Raspberry Pi Pico 向けに完全機能オーディオ DSP ファームウェア。

2026/04/25 22:28

Raspberry Pi Pico 向けに完全機能オーディオ DSP ファームウェア。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

DSPi システムは、安価な Raspberry Pi Pico ボード(RP2040 または RP2350 マイクロコントローラーを使用)を、macOS、Windows、Linux、iOS のいずれでも Plug-and-Play 機能に対応した高性能 USB オーディオカードに変換します。主要なハードウェア機能としては、RP2350 モデルで最大 8 チャンネルの音声入力・出力(RP2040 では 4 チャンネル)、24 ビット S/PDIF/I2S 対応、専用モノラル PDM サブウーハー出力があります。同ユニットはパラメトリックイコライゼーション(10 バンド)、マトリックスミキシング(最大 2×9 チャンネル)、ISO 226:2003 に基づく音量補償、最大 85ms の時間整合、BS2B ヘッドフォンクロスフィードといったプロフェッショナルグレードの DSP 機能を搭載しています。RP2350 プラットフォームは、専用ハイブリッド SVF/biquad アーキテクチャとハードウェア FPU を備え、標準電圧でも優れた低周波数精度を実現する一方、RP2040 はピーククロック速度を得るためにわずかな電圧上昇が必要です。設定は USB コントロール転送を通じて管理され、ファームウェアの再フラッシュなしでランタイムでのピンリエイスマイトが可能であり、DSP 設定とルーティングを含む最大 10 のプリセットを保存できます。ユーザーは CPU ロード、エラー統計量、音声レベルなどのシステムテレメトリを提供されており、GPL v3.0 ライセンスの下で提供され、ソースコードも公開されています。

本文

DSPi は、Raspberry Pi Pico および他の RP2040 ベースのボードを、非常に能力がありながら低価格なデジタルオーディオプロセッサへと変貌させます。搭載された DSP エンジンを有する USB オーディオインターフェースとして動作し、ルーム補正、アクティブ・クロスポイント、パラメトリックEQ、時間同期、音量補償、およびヘッドフォンのクロスフィードといった主要機能を活用可能にします。

RP2040 と RP2350 が「コーヒー一杯より安いオーディオの万能軍刀」という評判を確立するよう心から願っております。開発状況の確認、議論、あるいはサポートの要請については、公式 Discord サーバーへお気軽にご参加ください!

目次

主要機能 プラットフォーム対応 オーディオ信号チェーン ハードウェア接続手順 DSP 機能 ユーザープリセット 開発者リファレンス ソースからビルド 詳細仕様書 ライセンス

主要機能 (Key Capabilities)

  • USB オーディオインターフェース: macOS、Windows、Linux、iOS で Plug-and-Play。16 ビットおよび 24 ビットの PCM 入力を、44.1 kHz、48 kHz、96 kHz のサンプリング周波数でサポートします。
  • 24 ビット S/PDIF または I2S 出力: 最大 4 つの独立したステレオ出力スロット(RP2350 で 8 チャンネル、RP2040 で 4 チャンネル)。各スロットは動作時に S/PDIF と I2S の間で切り替え可能であり、あらゆる標準的な DAC に直接接続できます。I2S スロットは共通の BCK/LRCLK クロックを共有し、オプションとして 128 倍/256 倍のマスタークロックも出力可能です。
  • チャンネルごとのプレアンプ: DSP パイプラインの最初の処理(PASS 1)として、USB 入力チャンネル(L/R)それぞれに独立したゲイン制御を適用します。
  • マトリックスミキサー: どちらかまたは両方の USB 入力を任意の出力へルーティング可能。各交差点で独立したゲインと位相反転を制御できます。RP2350 で 2×9、RP2040 で 2×5 の構成です。
  • パラメトリック等化 (PEQ): チャンネルあたり最大 10 バンド、6 種類のフィルタータイプをサポート。RP2350 で総計 110 バンド、RP2040 で 70 バンドです。RP2350 は卓越した低周波数精度を実現するためにハイブリッドな SVF/biquad アーキテクチャを採用しています。
  • 音量リベラー: RMS ベースのステレオリンク、ソフトニー(膝)を持つ向上圧縮器で、静かな部分を目標レベルへ引き上げながら、大きなパートを絶対に増幅することはありません。オプションの 10 ms ルックアヘッド、設定可能な速度と最大ゲインセージング、そして -6 dBFS のゲイン削減用安全リミッター付きです。
  • 音量補償: ISO 226:2003 等価値周波数特性曲線標準に基づいた、音量依存型の EQ です。低い再生レベルで自動的にバスとトレブルをBoostし、知覚上のトーンバランスを維持します。
  • ヘッドフォンクロスフィード: BS2B ベースのクロスフィードに左右間聴時差(ITD)を組み込み、ヘッドフォンでの再生における不自然なステレオ分離を軽減します。3 つのクラシックプリセットに加え、完全にカスタマイズ可能なパラメータです。
  • マスターボリューム: シグナルチェーンの最後に適用されるデバイス側の出力上限値(-128 〜 0 dB、真のミュート哨兵あり)で、USB ホストの音量や DSP 処理とは独立しています。2 つのパステランシーモード: プリセットとは別に保存(デフォルト——再起動でも保持され、プリセット切り替えの影響を受けない)または各プリセットの一部として保存/復元します。
  • 出力ごとのゲインとミュート: 各出力チャンネルに対して独立したゲイン制御とミュート制御が備わります。
  • 時間同期 (Time Alignment): スピーカー/サブウーファーの同期のための出力ごとの遅延(最大 85ms)で、S/PDIF/I2S と PDM 出力経路の間を自動的にレイテンシー補償します。
  • サブウーファー出力: セカンドオードデルタ・シグマ変調器搭載の専用モノラル PDM 出力チャンネルであり、第 2 の DAC を必要とせず直接サブウーファーへ接続可能です。
  • デュアルコア DSP: 複数出力が動作中の際、等化処理は両プラットフォームで両コアに分割され、最大スループットを実現します。
  • 設定可能な出力ピン: すべての出力 GPIO ピン(I2S BCK/MCK も含む)を動作時に再割り当て可能であり、カスタム PCB 配置に適応でき、フラッシュ書き換え不要です。
  • 10 スロットプリセットシステム: ユーザー定義の名前を持つ最大 10 つの完全な DSP 構成を保存・ロード・管理可能です。チャンネルごとの命名、起動スロットの設定、高速状態同期のためのバッチパラメータ転送機能を備えます。
  • 診断機能: チャンネルごとのピーク/クリップメータリング、USB PHY エラーカウンター(CRC、ビットスタッフィング、タイムアウト、オーバーフロー、シーケンス)、バッファ充填統計、各出力スロットの S/PDIF DMA 飢餓カウンター、コアごとの CPU ロード報告を備えます。
  • USB 経由でのファームウェア更新: ベンダーコマンドでデバイスを UF2 ブートローダーに再起動し、ホストアプリから物理的な BOOTSEL 押下なしで新しいファームウェアをプッシュできる機能です。

プラットフォーム対応 (Platform Support)

機能RP2040 (Pico)RP2350 (Pico 2)
システムクロック307.2 MHz (オーバークロック)307.2 MHz
コア電圧1.15 V1.15 V
サンプリング周波数44.1 / 48 / 96 kHz44.1 / 48 / 96 kHz
オーディオ処理Q28 定点数シングルプレシジョンフロート
EQ バンドチャンネルあたり 10 (総計 70)チャンネルあたり 10 (総計 110)
チャンネル総数7 (マスター 2 + S/PDIF・I2S 4 + PDM 1)11 (マスター 2 + S/PDIF・I2S 8 + PDM 1)
出力スロットステレオ 2 つ (それぞれ S/PDIF または I2S)ステレオ 4 つ (それぞれ S/PDIF または I2S)
出力ビット深度24 ビット24 ビット
PDM 出力1 (サブウーファー)1 (サブウーファー)
最大遅延85ms 各出力あたり85ms 各出力あたり
マスチンエンジンハンド最適化 ARM アセンブリハードウェア FPU (ハイブリッド SVF/biquad EQ)
デュアルコア EQはい (コア 1 で出力 3-4 を処理)はい (コア 1 で出力 3-8 を処理)
ユーザープリセット10 スロット10 スロット
ステータス生産開始生産開始

両プラットフォームとも完全テスト済みで生産準備が完了しています。RP2040 はわずかな電圧上昇により 307.2 MHz に達し、RP2350 は同じ電圧で同周波数に達します。クロックは固定(レート依存切り替えなし)であり、サポートされているすべてのサンプリングレートで PIO デバイダーは整数値です。RP2350 はハードウェア浮動小数点ユニットにより大幅な処理余裕を提供し、より多くの出力チャンネルと低周波数精度を向上させるハイブリッド SVF/biquad フィルターアーキテクチャを実現します。

オーディオ信号チェーン (Audio Signal Chain)

DSPi は線形かつ低レイテンシーのパイプラインでオーディオを処理します:

RP2350 (11 チャンネル、9 出力):

USB 入力 (16/24 ビット PCM ステレオ, 44.1 / 48 / 96 kHz)
    |
PASS 1: チャンネルごとのプレアンプ (独立した L/R ゲイン) + USB ボリューム
    |
PASS 2: マスター EQ (チャンネルあたり 10 バンド、Left/Right)
    |
PASS 2.5: 音量リベラー (RMS 向上圧縮、オプション)
    |
PASS 3: ヘッドフォンクロスフィード (BS2B + ITD, オプション) + マスターピークメータリング
        音量補償 (音量依存型 EQ, オプション)
    |
PASS 4: マトリックスミキサー (入力 2x 出力 9、各交差点ごとのゲインと位相)
    |
PASS 5: 出力ごとの EQ -> ゲイン/ミュート -> 遅延 -> 出力ゲイン × マスターボリューム
    |
    +-- Out 1-2 --> S/PDIF または I2S スロット 0 (データ: GPIO 6 デフォルト)
    +-- Out 3-4 --> S/PDIF または I2S スロット 1 (データ: GPIO 7 デフォルト)
    +-- Out 5-6 --> S/PDIF または I2S スロット 2 (データ: GPIO 8 デフォルト)
    +-- Out 7-8 --> S/PDIF または I2S スロット 3 (データ: GPIO 9 デフォルト)
    +-- Out 9   --> PDM サブ                 (データ: GPIO 10 デフォルト)
                  (I2S BCK/LRCLK は GPIO 14/15 で共有; オプションの MCK は GPIO 13 デフォルト)

RP2040 (7 チャンネル、5 出力):

USB 入力 (16/24 ビット PCM ステレオ, 44.1 / 48 / 96 kHz)
    |
PASS 1: チャンネルごとのプレアンプ + USB ボリューム
    |
PASS 2: マスター EQ (チャンネルあたり 10 バンド、Left/Right)
    |
PASS 2.5: 音量リベラー (RMS 向上圧縮、オプション)
    |
PASS 3: ヘッドフォンクロスフィード (BS2B + ITD, オプション) + マスターピークメータリング
        音量補償 (音量依存型 EQ, オプション)
    |
PASS 4: マトリックスミキサー (入力 2x 出力 5、各交差点ごとのゲインと位相)
    |
PASS 5: 出力ごとの EQ -> ゲイン/ミュート -> 遅延 -> 出力ゲイン × マスターボリューム
    |
    +-- Out 1-2 --> S/PDIF または I2S スロット 0 (データ: GPIO 6 デフォルト)
    +-- Out 3-4 --> S/PDIF または I2S スロット 1 (データ: GPIO 7 デフォルト)
    +-- Out 5   --> PDM サブ               (データ: GPIO 10 デフォルト)
                  (I2S BCK/LRCLK は GPIO 14/15 で共有; オプションの MCK は GPIO 13 デフォルト)

信号チェーン詳細

  • 入力 (USB): 44.1、48、または 96 kHz の 16 ビットまたは 24 ビット PCM ステレオオーディオ。ビット深度は USB Alt セッティング経由で選択され、サンプリングレートは USB Audio Class レートセットリクエスト経由です。
  • チャンネルごとのプレアンプ (PASS 1): USB Left と Right 入力チャンネルそれぞれに独立した dB 単位のゲイン制御。DSP チェーンの最初に適用されるため、すべての下流処理に影響を与えます。
  • マスター EQ (PASS 2): チャンネル(Left/Right)あたり最大 10 バンドのパラメトリック EQ。ピーキング、ローシェルフ、ハイスヘルフ、ローパス、ハイパスのフィルタータイプをサポート。
  • 音量リベラー (PASS 2.5): オプションのフィードフォワード、ステレオリンク、単一バンド RMS コンプレッサーでソフトニー向上圧縮 —— より静かなコンテンツは目標レベルへ引き上げられし、閾値以上のコンテンツは無傷です。設定可能な速度、最大ゲインセージング、ノイズゲート付き。オプションの 10 ms ルックアヘッドあり。-6 dBFS ゲイン削減用安全リミッターにより出力オーバーシュートを防止します。
  • ヘッドフォンクロスフィード (PASS 3): オプションの BS2B クロスフィードで、各チャンネルから低通フィルタリングされた遅延部分を取り込み反対側にミックスします。補完的なフィルター設計に左右間聴時差(ITD)を採用し、アッパスフィルター経由でモデル化します。3 つのプリセット(Default, Chu Moy, Jan Meier)に加え、カスタム周波数とフィードレベルも可能。ITD は独立して切り替え可能です。マスターピークメータリングはこのステージに接続されます。
  • 音量補償: オプションの ISO 226:2003 等価値 EQ で、現在の音量レベルに適応します。低い音量では耳の感受性低下を補うためにバスとトレブルを Boost。設定可能な参照 SPL と強度。USB ホストボリューム位置に駆動されるため、下流のマスタボリューム減衰によらず常に正しく動作します。
  • マトリックスミキサー (PASS 4): 2 つの USB 入力チャンネル(L/R)をすべての出力チャンネルへルーティング。各交差点には独立した有効化、ゲイン(-∞〜+12 dB)、および位相反転があり、出力は個別にオン/オフして CPU を節約できます。RP2350 は 2×9 マトリックス(9 出力)、RP2040 は 2×5 マトリックス(5 出力)です。
  • 出力 EQ (PASS 5): 両プラットフォームで各出力チャンネルごとに独立した 10 バンド EQ。クロスポイントフィルターやドライバーごとの補正に最適。RP2350 では、Fs/7.5 以下のフィルターは Cytomic SVFトポロジー(低周波数における優れた数値精度)、それ以上の周波数は従来の TDF2 biquad を使用します。
  • 出力ごとのゲインとミュート: 各出力チャンネルに独立したゲイン(-∞〜+12 dB)とミュートが備わります。
  • 時間同期: スピーカー同期のための出力ごとの遅延、最大 85ms(48 kHz で 4096 サンプル)。S/PDIF/I2S と PDM 出力経路間の自動レイテンシー補償付き。
  • マスターボリューム: シグナルチェーンの最後に適用されるデバイス側の出力上限値、-128〜0 dB で -128 が真のミュート哨兵。PASS 5 の出力マルチплиアに折りたたまれるため CPU コストは実質ゼロ。USB ホストボリュームとは独立しており、両者が掛け合わせられます。音量補償の動作には影響しません。
  • 出力: 各番号されたスロットは、24 ビット S/PDIF または 24 ビット I2S(左揃え、MSB 先頭)として設定可能です。I2S スロットは共通の BCK/LRCLK クロックペアを共有し、LRCLK は常に BCK+1 です(PIO サイドセット制約のため)。オプションのマスタークロック(MCK)で 128×または 256× Fs は別の GPIO にルーティング可能です。PDM サブウーファーは独自の出力とピンに常設されます。

ハードウェア接続手順 (Hardware Setup)

ファームウェアのフラッシュ

  • ボード用の最新 DSPi.uf2 リリースをダウンロードします。
  • Pico をコンピューターに挿入する際、BOOTSEL ボタンを押したまま維持します。
  • 「RPI-RP2」と名付けられたドライブが表示されます。
  • .uf2 ファイルをこのドライブにドラッグ&ドロップします。
  • Pico は再起動し、「Weeb Labs DSPi」オーディオデバイスとして表示されます。
  • DSPi Console アプリケーションをダウンロードして起動し、DSPi を制御します。

ワイリングガイド

RP2350 (Pico 2) — 最大 8 つの出力ピン:

機能ピン接続
出力スロット 0 (Out 1-2)GPIO 6 (デフォルト)メイン L/R或多分音ペア 1 の S/PDIF または I2S データ
出力スロット 1 (Out 3-4)GPIO 7 (デフォルト)多分音ペア 2 の S/PDIF または I2S データ
出力スロット 2 (Out 5-6)GPIO 8 (デフォルト)多分音ペア 3 の S/PDIF または I2S データ
出力スロット 3 (Out 7-8)GPIO 9 (デフォルト)多分音ペア 4 の S/PDIF または I2S データ
サブウーファー出力 (PDM, Out 9)GPIO 10 (デフォルト)アクティブサブウーファーまたは PDM-アナログフィルター
I2S BCK (共有、I2S のみ)GPIO 14 (デフォルト)I2S と設定された任意のスロットのビットクロック
I2S LRCLK (I2S のみ)GPIO 15 (BCK+1、固定)ワード/フレームクロック; 常に BCK+1
I2S MCK (オプション)GPIO 13 (デフォルト)MCK が有効時の 128×または 256× Fs マスタークロック
USBマイクロUSBホストデバイス (PC/Mac/モバイルデバイス)

RP2040 (Pico) — 最大 6 つの出力ピン:

機能ピン接続
出力スロット 0 (Out 1-2)GPIO 6 (デフォルト)メイン L/Rまたはステレオペア 1 の S/PDIF または I2S データ
出力スロット 1 (Out 3-4)GPIO 7 (デフォルト)ステレオペア 2 の S/PDIF または I2S データ
サブウーファー出力 (PDM, Out 5)GPIO 10 (デフォルト)アクティブサブウーファーまたは PDM-アナログフィルター
I2S BCK (共有、I2S のみ)GPIO 14 (デフォルト)I2S と設定された任意のスロットのビットクロック
I2S LRCLK (I2S のみ)GPIO 15 (BCK+1、固定)ワード/フレームクロック; 常に BCK+1
I2S MCK (オプション)GPIO 13 (デフォルト)MCK が有効時の 128×または 256× Fs マスタークロック
USBマイクロUSBホストデバイス (PC/Mac/モバイルデバイス)

注記: S/PDIF 出力には Toshiba TX179 光送信器または単純な抵抗分圧回路が必要。I2S 出力は標準的な 24 ビットイン32 ビット左揃えフレームであり、多くの I2S DAC に直結可能です。PDM 出力は 1 ビットロジック信号で、アナログオーディオに変換するためのローパスフィルター(抵抗とコンデンサー)が必要になります。

カスタムピン割り当て

上記のデフォルトピン割り当てはそのまま使用可能ですが、DSPi Console アプリケーションを経由してすべての出力ピン——I2S BCK および MCK も含む——を動作時に再割り当てできます。フラッシュ書き換え不要です。カスタム PCB デザイン時や、デフォルト GPIO が不便なボードへの適応時に役立ちます。ピン割り当てはフラッシュに保存され、起動時に自動的に復元されます。GPIO 12 (UART TX) および GPIO 23-25 (電力制御と LED) は出力使用に予約されています。LRCLK は PIO サイドセット制約により常に BCK+1 にピン留めされます。

DSP 機能 (DSP Features)

マトリックスミキサー

マトリックスミキサーは USB ステレオ入力をすべての出力チャンネルへルーティングします。RP2350 は 2×9 マトリックス(9 出力)、RP2040 は 2×5 マトリックス(5 出力)です。各交差点(入力/出力ペア)には:

  • 有効化/無効化: アクティブまたは非アクティブのルーティング。
  • ゲイン: 各交差点あたり -∞〜+12 dB。
  • 位相反転: ドライバー同期用の極性反転。

また、各出力チャンネルには:

  • 有効化: 無効化された出力はすべての処理(EQ、遅延、変換)をスキップして CPU を節約します。
  • ゲイン: 出力ごとのゲイン (-∞〜+12 dB)。
  • ミュート: 出力ごとのソフトミュート。
  • 遅延: 出力ごとの時間同期。

出力可用性: コア 1 は PDM サブウーファー変調器と高番号の S/PDIF 出力を処理する EQ ワーカーを共有しています。PDM と EQ ワーカーモードは排他的です:

RP2350:

モード利用可能な出力コア 1 使用
PDM 有効 (Out 9 On)Out 1-2 (S/PDIF 1) + Out 9 (PDM)デルタ・シグマ変調器
PDM 無効 (Out 9 Off)Out 1-8 (S/PDIF 1-4)EQ ワーカーで出力 3-8

RP2040:

モード利用可能な出力コア 1 使用
PDM 有効 (Out 5 On)Out 1-2 (S/PDIF 1) + Out 5 (PDM)デルタ・シグマ変調器
PDM 無効 (Out 5 Off)Out 1-4 (S/PDIF 1-2)EQ ワーカーで出力 3-4

PDM サブウーファーが有効な際、コア 1 はデルタ・シグマ変調器に完全に割り当てられ、高番号の S/PDIF 出力は利用できません。PDM がオフの場合、コア 1 はそれらの出力を並列に処理する EQ ワーカーとして動作し、コア 0 と共に動作します。

一般的な構成例 (RP2350):

用途ルーティングモード
ステレオ + サブL→Out1, R→Out2, L+R→Out9PDM オン (3 出力)
2 分アクティブL→Out1(トゥイーター), L→Out3(ウーファー), R→Out2(トゥイーター), R→Out4(ウーファー)PDM オフ (4 出力)
3 分アクティブ上記に加え、ミドルレンジを Out5-6PDM オフ (6 出力)
4 分アクティブ上記に加え、スーパートゥイーターを Out7-8PDM オフ (8 出力)

一般的な構成例 (RP2040):

用途ルーティングモード
ステレオL→Out1, R→Out2PDM オフ (2 出力)
ステレオ + サブL→Out1, R→Out2, L+R→Out5PDM オン (3 出力)
2 分アクティブL→Out1(トゥイーター), L→Out3(ウーファー), R→Out2(トゥイーター), R→Out4(ウーファー)PDM オフ (4 出力)

パラメトリック等化

各フィルターバンドは 6 つのタイプをサポート:

タイプ説明
Flatバイパス(処理なし)
Peakingパラメトリックベルフィルター
Low Shelfロー周波数シェルフ
High Shelfハイク周波数シェルフ
Low Passローパスフィルター
High Passハイパスフィルター

RP2040 では、すべてのフィルターが Q28 定点算術を持つ biquad IIR(転置直接形式 II)を使用します。RP2350 では、ファームウェアはハイブリッド SVF/biquad アーキテクチャを使用:Fs/7.5(48 kHz で約 6.4 kHz)以下のフィルターは低周波数における優れた数値精度のための Cytomic SVF(線形梯形)トポロジーを、それ以上の周波数は従来の TDF2 biquad を使用します。すべてのフィルターには設定可能な周波数、Q ファクター、およびゲインがあり、フラットフィルターはゼロ CPU オーバーヘッドのために自動的にバイパスされます。

チャンネルレイアウト: RP2350 (11 チャンネル):

チャンネルインデックスEQ バンド
マスター Left010
マスター Right110
出力 1-8 (S/PDIF)2-9各々 10
出力 9 (PDM サブ)1010

RP2040 (7 チャンネル):

チャンネルインデックスEQ バンド
マスター Left010
マスター Right110
出力 1-4 (S/PDIF)2-5各々 10
出力 5 (PDM サブ)610

音量補償

ISO 226:2003 等価値周波数特性曲線標準に基づく再生音量が低いと、人間の耳はバスとトレブル周波数に対する感受性が低下します。音量補償はあらゆる再生レベルにおける知覚されたトーンバランスを維持するために、音量依存型の EQ カーブを適用します。

  • 参照 SPL: 設定可能(40-100 dB)。システムが全音量でトーンバランスが取れている時の SPL に設定します。
  • 強度: 標準 ISO 曲線の 0-200% で調整可能です。
  • 実装: 91 段階のすべてのボリュームステップに対する事前計算された係数テーブルと、クラッシュのない更新のためのダブルバッファリングを採用しています。

ヘッドフォンクロスフィード

Bauer Stereophonic-to-Binaural (BS2B) クロスフィードを実装し、補完的なフィルター設計でヘッドフォン再生における不自然なステレオ分離を軽減します。各チャンネルは反対側のチャンネルからの低通フィルタリングされ、時間遅延されたミックスを受けます。アコースティッククロスフィッド(スピーカー再生時のような)をシミュレートします。

  • 補完的な設計: 直接パス = 入力 - 低通 (入力)。単音信号はゲイン Unity で通過し、色付けなしを保証します。
  • 左右間聴時差 (ITD): 一次側アッパスフィルターがクロスフィードパスに約 220us の遅延を追加し、60 度のステレオスピーカー配置の頭を回った音の伝播をモデル化します。ITD は独立して切り替え可能です。
  • プリセット:
プリセットカットオフフィードレベルキャラクター
Default700 Hz4.5 dBバランス型、最も人気
Chu Moy700 Hz6.0 dBストロングな空間効果
Jan Meier650 Hz9.5 dBサブティル、ナチュラル
Custom500-2000 Hz0-15 dBユーザー定義

音量リベラー

変動する音量を持つコンテンツで一貫した知覚ボリュームを維持するためのフィードフォワード、ステレオリンク、単一バンド RMS ダイナミックレンジコンプレッサーです。

  • 向上圧縮: 閾値下のコンテンツを引き上げながら、閾値上のコンテンツは完全に無傷のままです。メイクアップゲイン不要。
  • RMS ベース検出: ピーク検出よりも知覚ボリュームに相関する RMS エンベロープを追跡します。
  • ソフトニー: フルブーストとユニティゲインの間の漸移で、透明なアーティファクトフリー動作を実現します。
  • ステレオリンク: 2 チャンネルのうち音量の大きい方が両方のゲインを決定し、ステレオイメージを保持します。
  • ゲイン削減安全リミッター: ハードクリッピングではなくゲイン削減(即時アタック、100 ms リリース)で -6 dBFS セージングを強制。大声コンテンツはユニティで通過するため稀に作動します。
  • オプション 10 ms ルックアヘッド: 滑らかな遷移のために。
  • 設定可能: 速度(アタック/リリース)、最大ゲインセージング(静かなコンテンツが引き上げられる量の上限)、およびゲート閾値(レベラーがブーストを停止してサイレンス/ノイズを増幅しないように)。

リベラーは PASS 2.5 に位置し、マスター EQ の後、クロスフィードの前に配置されます。音量補償とは独立しており、両者を同時に有効にすることも可能です。

チャンネルごとのプレアンプ

各 USB 入力チャンネル(Left と Right)には、他のすべての処理前の PASS 1 で適用される独立したプレアンプゲイン(dB)があります。チャンネルの不均衡を修正し、EQ の前に熱い入力を減衰させたり、ソース間のレベルを一致させるのに役立ちます。後方互換性のためのレガシー単一値コマンドも残っています(両チャンネルを同じ値に設定)。

マスターボリューム

シグナルチェーンの最後に適用されるデバイス側の出力上限値で、USB ホストボリュームとは独立しています。

  • 範囲: -128〜0 dB。-128 は真のサイレンス(ミュート)の哨兵です。

  • USB ホストボリュームとの独立性: 両者が掛け合わされるため、ホストスライダーはマスターボリュームが許す範囲内で動作します。

  • DSP 処理との独立性: 音量補償、EQ、リベラー、クロスフィードはいずれもマスタボリュームではなく生 USB ボリュームに駆動され、マスタ設定によらず動作は変化しません。

  • 2 つのパステランシーモード(動作時に選択可能で再起動後も保持):

    • モード 0 — 独立 (デフォルト): マスターボリュームはスタンドアロンなデバイス設定です。アプリが現在の値をディレクトリに保存するコマンドを呼び出すと、その値がすべての次の起動時に適用されます。プリセットの保存/ロードはマスターボリュームに影響せず、プリセット切り替えで音量は移動しません。
    • モード 1 — プリセットに含まれる: マスターボリュームは各プリセットの一部です。プリセットと共にもうすられて、プリセットロード時に復元されます。あらゆる他の DSP パラメータと同様に、異なる感度/最大出力要件を持つスピーカー設定をターゲットにする異なるプリセットがある場合に便利です。

最初の起動時のデフォルト: -20 dB(ファームウェア内の MASTER_VOL_DEFAULT_DB で設定可能)。

I2S 出力

各出力スロットはスロットごとに独立して動作時に S/PDIF(デフォルト)と I2S の間で切り替え可能です。1 つのデバイスで混合を駆動できます——例:スロット 0 を I2S にして DAC チップへ、スロット 1 を Toslink で外部レシーバーへ S/PDIF。

  • I2S 形式: 24 ビットデータ、左揃え、MSB 先頭、32 ビットフレーム。多くの標準 I2S DAC(PCM5102, ES9038Q2M など)へのドロップイン可能です。
  • 共有クロック: すべての I2S スロットは単一の BCK/LRCLK ペアを共有します。LRCLK は常に BCK+1 です(PIO サイドセットハードウェア制約のため)。
  • オプション MCK: 有効時に、設定可能な GPIO に 128×または 256× Fs マスタークロックが生成されます。内部 PLL を持っていない一部の DAC が必要とします。96 kHz では PIO クロック・デバイダーの制限によりのみ 128×を選択可能です。
  • サンプル同期開始: I2S スロットはまとめてオンになり、複数の DAC が位相同期した状態を維持できます。

DSP パイプラインは両出力タイプで同一であり、最後のエンコーディングのみが異なります(S/PDIF は BMC/NRZI 対 I2S は生の左揃え PCM)。

サブウーファー PDM 出力

サブウーファー出力はコア 1 で動作する高性能ソフトウェア定義デルタ・シグマ変調器を使用します。

  • 変調: 2nd-Order Delta-Sigma
  • オーバーサンプリング比: 256x(48 kHz では 12.288 MHz ビットクロック)
  • ダither: TPDF(三角確率密度関数)とノイズシェイピング
  • DC 保護: DC オフセット蓄積を防ぐリーキーインテグラタ設計

目標は、サブウーファーにのみ使用されるかもしれないがフルレンジとして聞こえる優れた出力を作り出すためにコア 1 の可能な最大部分を使用することでした。この実装は非常に安定しており、ポップ、クリック、またはアイドルトーンはありません。

ユーザープリセット (User Presets)

DSPi はフラッシュに完全な DSP 構成を保存する 10 スロットのプリセットシステムを含んでいます。プリセットは常にアクティブであり、「プリセットなし」の状態はありません。

  • 10 プリセットスロット: 各スロットはチャンネルごとのプレアンプ、EQ バンド、遅延、音量、リベラー、クロスフィード、マトリックスミキサー、出力ゲイン/ミュート、出力タイプ(S/PDIF または I2S)、I2S クロック設定、ピン割り当て、マスターボリューム(モード 1 で使用)、およびチャンネルごとの名前という完全な DSP 状態を保存します。
  • チャンネル名: 各チャンネルにはユーザー定義の名前(最大 31 文字)を設定でき、プリセットと共に保存されます。
  • 起動構成: 起動時にロードされるプリセットを選択——特定のデフォルトスロットか、最後にアクティブだったスロットどちらか。
  • ピン設定含み: プリセットを保存/ロードする際、GPIO ピン割り当てを含める/除外するオプション(デフォルト:含める——ピンレイアウトがプリセットと共に移動)。
  • マスターボリュームモード: マスターボリュームが各プリセットの一部(モード 1)か、プリセットディレクトリに独立して保存される(モード 0、デフォルト)かを選択します。詳細は「マスターボリューム」を参照。
  • プリセット切り替えミュート: プリセット遷移中はオーディオ出力を一時的にミュート(約 10ms)し、聴覚可能なクラッシュを防ぎます。
  • レガシーコマンド: オリジナルの保存/ロード/リセットコマンド(0x51-0x53)はプリセットシステムを経由して再ルーティングされ、現在アクティブなスロットに対して動作します。
  • バッチパラメータ転送: 完全な DSP 状態を単一の USB コントロール転送(約 2.9 KB)で読み取りまたは書き込みでき、ホストアプリケーションとの高速同期が可能です。
  • 自動移行: 新しいファームウェアの最初の起動時に古いプリセットディレクトリが透明にアップグレードされ、スロット名、起動構成、および他の保持状態は保持されます。

開発者リファレンス (Developer Reference)

システムアーキテクチャ

  • コア 0: USB コミュニケーション、オーディオストリーミング、DSP 処理(マスター EQ、クロスフィード、音量補償、マトリックスミキシング、S/PDIF ペア 1 の出力 EQ)、および制御ロジック。

  • コア 1(3 つのモード):

    • PDM モード: サブウーファー出力用のデルタ・シグマ変調器(PDM 出力が有効時のみ)。
    • EQ ワーカーモード: PDM が無効で高番号の出力がアクティブな際に、コア 0 と並列でそれらの出力の出力 EQ、遅延、および S/PDIF 変換を処理。RP2350: 出力 3-8。RP2040: 出力 3-4。いずれかの出力が有効で PDM が無効の場合に活性化します。
    • アイドルモード: コア 1 を必要とする出力が有効でない場合。
  • PIO と DMA: S/PDIF エンコーディング(PIO0)と PDM ビットストリーム生成(PIO1)のためのハードウェアオフロードで、I/O のゼロ CPU オーバーヘッドを確保します。

  • マスチンエンジン:

    • RP2040: 32 ビット定点数(Q28)処理で、内側 DSP ループ用にハンド最適化された ARM アセンブリ。
    • RP2350: シングルプレシジョンフロートパイプラインとハードウェア FPU。ハイブリッド SVF/biquad EQ —— 低周波数(Fs/7.5 以下)では Cytomic SVF、高周波数では TDF2 biquad。SVF は低周波数フィルターにおける優れた数値精度を提供し、biquad 係数クアンタイゼーションが問題となる場所で優れています。

注記: PDM モードと EQ ワーカーモードはコア 1 で排他的です。PDM 出力が有効な場合、コア 0 がすべての S/PDIF 出力 EQ 処理を処理します。PDM が無効で高番号の出力がアクティブな場合、コア 1 はそれらの出力のための EQ ワーカーとして動作します。

パフォーマンスチューニング

両プラットフォームとも固定 307.2 MHz システムクロック(VCO 1536 MHz / 5 / 1)で動作するため、サポートされているすべてのサンプリングレートで PIO デバイダーが整数値となり、サンプリングレート依存のクロック切り替えクラッシュを排除します。

プラットフォームシステムクロックコア電圧
RP2040307.2 MHz (オーバークロック)1.15 V
RP2350307.2 MHz1.15 V

RP2040 はノミナル 1.10 V よりわずかな電圧上昇で 307.2 MHz に達し、RP2350 はこのクロックで同じ電圧で快適です。電圧ステップは周波数変更前に適用されます。サンプリングレート変化はシステムクロックの再設定ではなく PIO デバイダーのみを調整するため、44.1 / 48 / 96 kHz の間の遷移はシームレスです。フラッシュアクセスもチューニングされており、PICO_FLASH_SPI_CLKDIV は 6 に設定され、このクロックで W25Q080 の 104-133 MHz 仕様の下に XIP とイレイズ/プログラム操作を安全に保っています。RP2350 では、ブート ROM がそのプラットフォームで boot2 設定に従わないため、ランタイム QMI レジスタ管理はファームウェア/DSPi/flash_clkdiv.c で処理されます。

USB コントロールプロトコル

設定は Windows ではインターフェース 2(ベンダーインターフェース)を経由したコントロール転送、macOS ではインターフェース 0 を経由して行われます。デバイスは Windows での自動ドライバーレスインストールのための WinUSB/WCID をサポートしています。

リクエストテーブル

コード名称方向ペイロード説明
0x42REQ_SET_EQ_PARAMOUT16 バイトフィルターパラメータアップロード
0x43REQ_GET_EQ_PARAMIN16 バイトフィルターパラメータ読み取り
0x44REQ_SET_PREAMPOUT4 バイトグローバルゲイン設定 (float dB)
0x45REQ_GET_PREAMPIN4 バイトグローバルゲイン取得
0x46REQ_SET_BYPASSOUT1 バイトマスター EQ バイパス (1=On, 0=Off)
0x47REQ_GET_BYPASSIN1 バイトバイパスステータス取得
0x48REQ_SET_DELAYOUT4 バイトチャンネル遅延設定 (float ms)
0x49REQ_GET_DELAYIN4 バイトチャンネル遅延取得
0x50REQ_GET_STATUSIN4-12 バイトシステム統計取得 (wValue でフィールド選択)
0x51REQ_SAVE_PARAMSIN1 バイトアクティブプリセットスロットへ保存
0x52REQ_LOAD_PARAMSIN1 バイトアクティブプリセットスロットから読み込み
0x53REQ_FACTORY_RESETIN1 バイトライブ状態をデフォルトにリセット
0x54REQ_SET_CHANNEL_GAINOUT4 バイト出力チャンネルゲイン設定 (float dB)
0x55REQ_GET_CHANNEL_GAININ4 バイト出力チャンネルゲイン取得
0x56REQ_SET_CHANNEL_MUTEOUT1 バイト出力チャンネルミュート (1=Muted)
0x57REQ_GET_CHANNEL_MUTEIN1 バイトミュートステータス取得
0x58REQ_SET_LOUDNESSOUT1 バイト音量補償の有効化/無効化 (1=On)
0x59REQ_GET_LOUDNESSIN1 バイト音量補償ステータス取得
0x5AREQ_SET_LOUDNESS_REFOUT4 バイト参照 SPL 設定 (float, 40-100)
0x5BREQ_GET_LOUDNESS_REFIN4 バイト参照 SPL 取得
0x5CREQ_SET_LOUDNESS_INTENSITYOUT4 バイト強度%設定 (float, 0-200)
0x5DREQ_GET_LOUDNESS_INTENSITYIN4 バイト強度取得
0x5EREQ_SET_CROSSFEEDOUT1 バイトクロスフィード有効化/無効化 (1=On)
0x5FREQ_GET_CROSSFEEDIN1 バイトクロスフィードステータス取得
0x60REQ_SET_CROSSFEED_PRESETOUT1 バイトプリセット設定 (0-3)
0x61REQ_GET_CROSSFEED_PRESETIN1 バイト現在のプリセット取得
0x62REQ_SET_CROSSFEED_FREQOUT4 バイトカスタム周波数設定 (float Hz, 500-2000)
0x63REQ_GET_CROSSFEED_FREQIN4 バイトカスタム周波数取得
0x64REQ_SET_CROSSFEED_FEEDOUT4 バイトカスタムフィードレベル設定 (float dB, 0-15)
0x65REQ_GET_CROSSFEED_FEEDIN4 バイトカスタムフィードレベル取得
0x66REQ_SET_CROSSFEED_ITDOUT1 バイトITD 有効化/無効化 (1=On)
0x67REQ_GET_CROSSFEED_ITDIN1 バイトITD ステータス取得
0x70REQ_SET_MATRIX_ROUTEOUT8 バイトマトリックス交差点設定 (MatrixRoutePacket)
0x71REQ_GET_MATRIX_ROUTEIN8 バイトマトリックス交差点取得
0x72REQ_SET_OUTPUT_ENABLEOUT1 バイト出力チャンネル有効化/無効化
0x73REQ_GET_OUTPUT_ENABLEIN1 バイト出力有効ステータス取得
0x74REQ_SET_OUTPUT_GAINOUT4 バイト出力ごとのゲイン設定 (float dB)
0x75REQ_GET_OUTPUT_GAININ4 バイト出力ごとのゲイン取得
0x76REQ_SET_OUTPUT_MUTEOUT1 バイト出力ミュート (1=Muted)
0x77REQ_GET_OUTPUT_MUTEIN1 バイト出力ミュートステータス取得
0x78REQ_SET_OUTPUT_DELAYOUT4 バイト出力ごとの遅延設定 (float ms)
0x79REQ_GET_OUTPUT_DELAYIN4 バイト出力ごとの遅延取得
0x7AREQ_GET_CORE1_MODEIN1 バイトコア 1 モード取得 (0=Idle, 1=PDM, 2=EQ Worker)
0x7BREQ_GET_CORE1_CONFLICTIN1 バイトPDM vs EQ ワーカー競合チェック
0x7CREQ_SET_OUTPUT_PININ1 バイト出力 GPIO ピン変更 (ステータスを返す)
0x7DREQ_GET_OUTPUT_PININ1 バイト現在の出力 GPIO ピン取得
0x7EREQ_GET_SERIALIN変数一意のボードシリアル番号取得
0x7FREQ_GET_PLATFORMIN1 バイトプラットフォーム ID 取得 (0=RP2040, 1=RP2350)
0x83REQ_CLEAR_CLIPSOUTクリップ検知ラッチクリア
0x90REQ_PRESET_SAVEIN1 バイトライブ状態をプリセットスロットへ保存 (wValue=スロット)
0x91REQ_PRESET_LOADIN1 バイトプリセットスロットからライブ状態へ読み込み (wValue=スロット)
0x92REQ_PRESET_DELETEIN1 バイトプリセットスロット削除 (wValue=スロット)
0x93REQ_PRESET_GET_NAMEIN32 バイトプリセット名取得 (wValue=スロット)
0x94REQ_PRESET_SET_NAMEOUT32 バイトプリセット名設定 (wValue=スロット)
0x95REQ_PRESET_GET_DIRIN変数プリセットディレクトリ取得 (占有量、起動構成)
0x96REQ_PRESET_SET_STARTUPOUT2 バイト起動モードとデフォルトスロット設定
0x97REQ_PRESET_GET_STARTUPIN2 バイト起動構成取得
0x98REQ_PRESET_SET_INCLUDE_PINSOUT1 バイトピン設定含み設定 (1=含める)
0x99REQ_PRESET_GET_INCLUDE_PINSIN1 バイトピン設定含みステータス取得
0x9AREQ_PRESET_GET_ACTIVEIN1 バイト現在アクティブなプリセットスロットインデックス取得
0x9BREQ_SET_CHANNEL_NAMEOUT32 バイトチャンネル名設定 (wValue=チャンネル)
0x9CREQ_GET_CHANNEL_NAMEIN32 バイトチャンネル名取得 (wValue=チャンネル)
0xA0REQ_GET_ALL_PARAMSIN~2896 バイト完全な DSP 状態のバッチ読み取り (マルチパケット)
0xA1REQ_SET_ALL_PARAMSOUT~2896 バイト完全な DSP 状態のバッチ書き込み (マルチパケット)
0xB0REQ_GET_BUFFER_STATSIN変数バッファ充填統計読み取り
0xB1REQ_RESET_BUFFER_STATSIN1 バイトバッファ統計カウンターリセット
0xB2REQ_GET_USB_ERROR_STATSIN24 バイトUSB PHY エラーカウンター読み取り (CRC/ビットスタッフィング/タイムアウト/オーバーフロー/シーケンス)
0xB3REQ_RESET_USB_ERROR_STATSIN1 バイトUSB PHY エラーカウンターリセット
0xB4REQ_SET_LEVELLER_ENABLEOUT1 バイト音量リベラー有効化/無効化
0xB5REQ_GET_LEVELLER_ENABLEIN1 バイトリベラー有効ステータス取得
0xB6REQ_SET_LEVELLER_AMOUNTOUT4 バイトリベラー目標/量設定 (float)
0xB7REQ_GET_LEVELLER_AMOUNTIN4 バイトリベラー量取得
0xB8REQ_SET_LEVELLER_SPEEDOUT1 バイトリベラーアタック/リリース速度設定
0xB9REQ_GET_LEVELLER_SPEEDIN1 バイトリベラー速度取得
0xBAREQ_SET_LEVELLER_MAX_GAINOUT4 バイト最大向上ゲイン設定 (float dB)
0xBBREQ_GET_LEVELLER_MAX_GAININ4 バイト最大向上ゲイン取得
0xBCREQ_SET_LEVELLER_LOOKAHEADOUT1 バイト10 ms ルックアヘッド有効化/無効化
0xBDREQ_GET_LEVELLER_LOOKAHEADIN1 バイトルックアヘッドステータス取得
0xBEREQ_SET_LEVELLER_GATEOUT4 バイトノイズゲート閾値設定 (float dB)
0xBFREQ_GET_LEVELLER_GATEIN4 バイトノイズゲート閾値取得
0xC0REQ_SET_OUTPUT_TYPEOUT1 バイトスロット出力タイプ設定 (0=S/PDIF, 1=I2S; wValue=スロット)
0xC1REQ_GET_OUTPUT_TYPEIN1 バイトスロット出力タイプ取得 (wValue=スロット)
0xC2REQ_SET_I2S_BCK_PINOUT1 バイト共有 I2S BCK GPIO 設定 (LRCLK オート = BCK+1)
0xC3REQ_GET_I2S_BCK_PININ1 バイト現在の I2S BCK ピン取得
0xC4REQ_SET_MCK_ENABLEOUT1 バイトI2S マスタークロック出力有効化/無効化
0xC5REQ_GET_MCK_ENABLEIN1 バイトMCK 有効ステータス取得
0xC6REQ_SET_MCK_PINOUT1 バイトMCK GPIO 設定
0xC7REQ_GET_MCK_PININ1 バイトMCK GPIO 取得
0xC8REQ_SET_MCK_MULTIPLIEROUT1 バイトMCK マルチプライヤー設定 (0=128×, 1=256×)
0xC9REQ_GET_MCK_MULTIPLIERIN1 バイトMCK マルチプライヤー取得
0xD0REQ_SET_PREAMP_CHOUT4 バイトチャンネルごとのプレアンプ設定 (wValue=チャンネル, ペイロード=float dB)
0xD1REQ_GET_PREAMP_CHIN4 バイトチャンネルごとのプレアンプ取得 (wValue=チャンネル)
0xD2REQ_SET_MASTER_VOLUMEOUT4 バイトマスターボリューム設定 (-128 ミュート哨兵, -127..0 dB)
0xD3REQ_GET_MASTER_VOLUMEIN4 バイト現在のライブマスターボリューム取得
0xD4REQ_SET_MASTER_VOLUME_MODEOUT1 バイトパステランシーモード設定 (0=独立, 1=プリセット込)
0xD5REQ_GET_MASTER_VOLUME_MODEIN1 バイトパステランシーモード取得
0xD6REQ_SAVE_MASTER_VOLUMEIN1 バイトライブマスターボリュームをディレクトリへ保存 (モード 0 パステランシー)
0xD7REQ_GET_SAVED_MASTER_VOLUMEIN4 バイトディレクトリの保存されたマスター音量値読み取り
0xF0REQ_ENTER_BOOTLOADERIN1 バイトファームウェア更新のための UF2 ブートローダーへの再起動

REQ_GET_STATUS (0x50) — システムテレメトリ

REQ_GET_STATUS リクエストは wValue フィールドに基づいてデータを返します:

wValue返すデータ説明
0uint32チャンネル 0-1 のピーク (圧縮化された 16 ビット値)
1uint32チャンネル 2-3 のピーク (圧縮化された 16 ビット値)
2uint32チャンネル 4 のピーク + CPU0/CPU1 ロード (圧縮化)
3uint32PDM リングバッファオーバーラン数
4uint32PDM リングバッファアンダーラン数
5uint32PDM DMA オーバーラン数
6uint32PDM DMA アンダーラン数
7uint32S/PDIF オーバーラン数
8uint32S/PDIF アンダーラン数
912 バイト合計:5 つのピーク + CPU ロード
10uint32USB オーディオパケットカウント
11uint32USB Alt セッティング
12uint32USB オーディオマウントステータス
13uint32システムクロック周波数 (Hz)
14uint32コア電圧 (mV)
15uint32サンプリングレート (Hz)
16int32システム温度 (センチ度 C)
17uint32総 S/PDIF DMA 飢餓数(すべてのスロット合計)
18uint32S/PDIF スロット 0 飢餓数 (Out 1-2)
19uint32S/PDIF スロット 1 飢餓数 (Out 3-4)
20uint32S/PDIF スロット 2 飢餓数 (Out 5-6, RP2350)
21uint32S/PDIF スロット 3 飢餓数 (Out 7-8, RP2350)

「飢餓事象」は、S/PDIF DMA がバッファーを必要としたがコンシューマプ 풀为空だったため、ファームウェアがその転送にサイレンスバッファーを代替したことを意味します。これは従来の spdif_underruns USB パケットギャップヒューリスティックスよりも直接的な出力側ドロップアウトシグナルです。

データ構造体

フィルターパケット (16 バイト):

struct __attribute__((packed)) {
    uint8_t channel;  // RP2350: 0-10, RP2040: 0-6
    uint8_t band;     // 0-9
    uint8_t type;     // 0=Flat, 1=Peak, 2=LS, 3=HS, 4=LP, 5=HP
    uint8_t reserved;
    float freq;       // Hz
    float Q;
    float gain_db;
}

マトリックスルートパケット (8 バイト):

struct __attribute__((packed)) {
    uint8_t input;          // 0-1 (USB L/R)
    uint8_t output;         // RP2350: 0-8, RP2040: 0-4
    uint8_t enabled;        // 0 or 1
    uint8_t phase_invert;   // 0 or 1
    float gain_db;          // -inf to +12dB
}

ランタイムピン構成

出力 GPIO ピンはフラッシュ書き換えなしで動作時に再割り当て可能です。カスタム PCB レイアウトや、デフォルトピン割り当てが他のハードウェアと競合する場合に役立ちます。 REQ_SET_OUTPUT_PIN (0x7C) — IN 転送、1 バイトステータスを返す:

  • wValue = (new_pin << 8) | output_index
  • RP2350: S/PDIF 出力 1-4 用に output_index 0-3、PDM サブウーファー用に 4
  • RP2040: S/PDIF 出力 1-2 用に output_index 0-1、PDM サブウーファー用に 2

S/PDIF 出力はピン変更中に自動的に無効化/有効化されます(その出力でのみ約 1ms のオーディオドロップ)。PDM 出力を先に無効化(REQ_SET_OUTPUT_ENABLE を使用)していないと、PIN_CONFIG_OUTPUT_ACTIVE を返します。

ステータスクード意味
PIN_CONFIG_SUCCESS0x00ピン変更成功
PIN_CONFIG_INVALID_PIN0x01ピンが範囲外または予約済み (GPIO 12, 23-25)
PIN_CONFIG_PIN_IN_USE0x02ピンがすでに他の出力に割り当てられている
PIN_CONFIG_INVALID_OUTPUT0x03出力インデックスが範囲外
PIN_CONFIG_OUTPUT_ACTIVE0x04PDM 出力をピンジャン換える前に無効にする必要あり

REQ_GET_OUTPUT_PIN (0x7D) — IN 転送、1 バイトを返す:

  • wValue = output_index
  • その出力の現在の GPIO ピン番号を返す

ピン割り当ては各プリセットに保存され、プリセット保存/ロード時にオプションで含めることができます(REQ_PRESET_SET_INCLUDE_PINS で制御)。

ソースからビルド (Building from Source)

ファームウェアを自らビルドするには、標準的な Raspberry Pi Pico C/C++ 開発環境が必要です。

1. 前提条件のインストール

以下のツールがインストールされていることを確認してください:

  • CMake (3.13 以降)
  • Arm GNU Toolchain (arm-none-eabi-gcc など)
  • Python 3 (Pico SDK スクリプト用)
  • Git

2. リポジトリのクローン

Pico SDK および他のサブモジュールを含むようにリクルーシブにプロジェクトをクローンします:

git clone --recursive https://github.com/WeebLabs/DSPi.git
cd DSPi

すでに

--recursive
なくクローンした場合は、以下を実行してください:

git submodule update --init --recursive

3. ファームウェアのビルド

標準 RP2040 (Raspberry Pi Pico) または新しい RP2350 (Raspberry Pi Pico 2) のいずれかのためにビルドできます。ビルドシステムは別のディレクトリを使用して競合を回避します。

オプション A: RP2040 (Standard Pico) 用ビルド

mkdir build-rp2040
cd build-rp2040
cmake -DPICO_BOARD=pico -DPICO_EXTRAS_PATH=../firmware/pico-extras ../firmware
make

出力:

DSPi/DSPi.uf2

オプション B: RP2350 (Pico 2) 用ビルド

mkdir build-rp2350
cd build-rp2350
cmake -DPICO_BOARD=pico2 -DPICO_EXTRAS_PATH=../firmware/pico-extras ../firmware
make

出力:

DSPi/DSPi.uf2

4. デバイスのフラッシュ

ボード上の BOOTSEL ボタンを押したまま挿入します。生成された .uf2 ファイルを RPI-RP2 (または RP2350) ドライブにドラッグ&ドロップします。

または、すでに動作中の DSPi をボタン押さずにブートローダーモードに入れるには、REQ_ENTER_BOOTLOADER (0xF0) を送信します。DSPi Console アプリケーションはワンクリックファームウェア更新のためにこれを利用しています。プロトコル詳細については Documentation/Features/firmware_update.md を参照してください。

詳細仕様書 (Detailed Specifications)

各サブシステムの詳細仕様は Documentation/Features/ 下で保持されています。これらがプロトコル形式、ワイヤレイアウト、エッジケース、およびホストアプリ統合パターンの権威あるソースです。

機能仕様書
マトリックスミキサーmatrixmixer_spec.md
ユーザープリセットuser_presets_spec.md
マスターボリュームmaster_volume_spec.md
チャンネルごとのプレアンプper_channel_preamp_spec.md
音量リベラーvolume_leveller_spec.md
I2S 出力i2s_output_spec.md
ピーク/クリップメータリングpeak_clip_metering_spec.md
バッファ統計buffer_statistics_spec.md
S/PDIF DMA 飢餓spdif_starvation_spec.md
USB エラー診断usb_errors_spec.md
コア 1 モードcore1_modes_spec.md
デバイス識別device_identification_spec.md
S/PDIF 入力 (計画)SPDIF_input_spec.md
USB 経由ファームウェア更新Documentation/Features/firmware_update.md
ロードマップroadmap.md

ライセンス (License)

このプロジェクトは GNU General Public License v3.0 の下でライセンスされています。詳細は LICENSE を参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/04/28 6:26

NPM ウェブサイトがダウンしています。 (注:ご提示いただいたテキストは、元の改行・余白・記号なしの状態を維持したまま整理済みです。特定の状況(例:障害報告時の注意喚起など)を想定している場合は、以下のような形式もご参照ください。) **NPM ウェブサイトがアクセス不能になっています**

## Japanese Translation: 2026 年 4 月 27 日にウェブサイトの障害が解消されていないものの、npm エコシステムは機能上正常に動作し続けています。`www.npmjs.com` の利用ができなかった一方で、パッケージのインストール、公開、検索、セキュリティ監査、およびレプリケーションフィードといった重要なサービスは現在「Operational(運用中)」の状態です。過去 90 日間の稼働メトリクスは堅牢なパフォーマンスを示しており、ウェブサイト以外のサービスでは稼働率が 100%、ウェブサイトでは 99.92% であり、これは 4 月 13 日から 26 日の間にはインシデントが起きていなかった安定期と対照的です。本件は、これが軽微な不具合なのかより深く対応が必要なのかを調査しており、npm に依存している企業が主要なワークフローが影響を受けていないため自信を持って進めることができます。

2026/04/28 5:44

トロントでの逮捕:3人の男性が、SMS ブラスト関連の事件で容疑から 44 の起訴罪状に直面している

## Japanese Translation: 「Project Lighthouse」のもと、トロント警察は、RCMP およびその他の機関と連携し、SMS ブラスターを関与した画期的なサイバー犯罪の捜査を進めています。これは、カナダでこの特定の攻撃ベクトルの初例となります。捜査は 2025 年 11 月に、セキュリティパートナーがトロント市中心部で稼働していたデバイスの存在を当局に通報したことから開始されました。このモバイル脅威は数か月の間にグレート・トロント・エリアの複数の車両から実行され、1300 万件を超える接続を妨害し、端末を正当なネットワークから切断して、銀行クレデンシャルを奪おうと設計された偽サイトへと誘導しました。準副頭長の Rob Johnson 氏は、この攻撃が 9-1-1 などの緊急サービスに影響を与える恐れがあり、なりすましや盗難の重大なリスクをもたらすと警告しました。3 月 31 日、警察はマークハムとハミルトンで捜索令状を実行し、2 人の容疑者から複数のブラスターを没収した一方、3 目の容疑者は 4 月 21 日に自首しました。この 3 人は現在、44 の告訴に直面しています。当局は、カナダではこの技術が新しいものの、犯罪者の個人データを収集しようとする意図自体は古いものであると強調しています。

2026/04/28 2:45

Easyduino:KiCAD 用のオープンソース PCBA 開発ボード

## Japanese Translation: The Easyduino プロジェクトは、マイコン開発基板における歴史的な断片化に対処するため、Arduino(Uno/Nano)、ESP32/ESP32 S3、Raspberry Pi Pico、STM32 Bluepill といった一般的な MCU 向けにオープンソースかつ KiCad ベースの設計を提供する。Eagle や Altium といった地域固有のツールに依存していた以前のバージョンとは異なり、Easyduino は標準化された 4 レイヤ銅スタックアップ(JLC04161H-7628)を通じてプラットフォーム間でソフトウェア、言語、慣習を統一し、配線の簡素化を実現する。部品は市場での入手可能性とコストに適応され、例えばオリジナルの UNO の USB シリアル変換チップの代わりに ATmega16U2 を使用したり、高価な 01005 パッシブ部品を避けるなどの対応が取られている。各プロジェクトフォルダには、メインの KiCad ファイル、README、必要に応じて非標準フットプリントライブラリ、および BOM(JLCPB が読み取れる Centroid ファイルを含む)や主要部品のデータシート、Gerbers、PDF スケーマ/PCB、写真が含まれる ProductionFiles ディレクトリが用意されている。開発は KiCad v8.0.0 で行われ、更新とテストは KiCad v10 で実施された。Jobsets は生産データの生成を簡素化する。ユーザーは最新版の KiCad をインストールし、ZIP ファイルをダウンロードするか Git を経由してクローンし、変更を行う際は「git add」で全体を追加する必要があることに注意せよ(KiCad v10 の Git ツールには制限があるため)。すべてのボードは CERN Open Hardware Licence Version 2 – Permissive の下で公開されており、ライセンスのコピーを含めれば必須のソースコード開示なしに商用利用が可能である。今後の作業としては、v1.1 RP2040 および ESP32S3 ボードの注文とテストならびに nRF52840 および RP2350A ドングルを開発する予定がある。クレジットは、KiCad に関するヒントを提供し、地上から v1.1 RP2040 ボードを新規設計した winsrrow に贈られる。ハードウェアの作成を全球でよりアクセス可能で一貫性のあるものにするという使命を継続する。