
2026/10/07 22:58
Linux 向けイーサネットオーディオインターフェース ETH-68
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
eth68 は Linux をベースにしたイーサネットオーディオインターフェースであり、STM32H7 マイクロコントローラー上でカスタム bare-metal ファームウェアを実行して netJACK マスターエンドポイントをエミュレートします。1/4 インチ TRS コネクタを介したバランスドラインレベルの入力 6 チャンネルと出力 8 チャンネル、および DIN MIDI 接続性を備えています。Burr-Brown PCM3168A コーデックを使用し、48 kHz および 96 kHz のサンプリング周波数をサポートします。卓越した線形性を実現(ループバックパスバンド平坦度 ±0.15 dBFS、1 kHz/48 kHz で THD+N –94.8 dBFS、入力ノイズ床 A 加重で –107.8 dBFS、ダイナミックレンジ –103.2 dBFS)。レイテンシは極めて低く、48 kHz で 64 サンプリルのバッファを使用した場合の往復レイテンシは 3.620 ms(jack_delay およびループバックで測定)であり、RME HDSPe AIO Pro PCIe カードと同等です。96 kHz では、同カードよりも 0.33 ms 高性能です。レイテンシはバッファサイズに比例し、48 kHz では 2.288 ms から 11.621 ms、96 kHz では 1.148 ms から 5.814 ms にスケールします。背面の BNC コネクタでは 3.3 V の LATMON デジタル信号を伝送し、総処理レイテンシを示します(~625 µs サイクルで、48 kHz/64 サンプリルの場合のデッドライン 1333 µs)。
プロフェッショナルな用途では、複数の eth68 ユニットを高周波クロックと UDP シンクコマンドによるデイジーチェーン接続で同期させ、チャンネル数を増やすことなく速度を損なうことなくスケールさせることができます。複数ユニット動作には、eth68proxy アプリケーションが macOS および Windows で JACK をサポートします。 alternatively、pw-eth68 はプロキシなしで PipeWire 向けにデータストリームを管理します。macOS および Windows では JACK(JACK-Router は Windows で動作しますが、OS の変更により macOS 10.15+ では破損しています)による完全なソフトウェア統合が可能です。PipeWire ユーザーは専用プロキシツールを使用して制限を回避できます。本デバイスは高価な PCIe カードのコスト効果的な代替手段であり、プロフェッショナルオーディオワークフローに不可欠な超低レイテンシを維持します。テストは Ubuntu 24.04.3 LTS を使用し、Ryzen 7 5700X CPU、Intel I210 NIC、ASUS B450-F マザーボード上で実施されました。
本文
eth68: Linux 向け低遅延イーサネット・オーディオインターフェース
eth68 は、Linux システム向けに設計された、極めて低い遅延を特徴とするイーサネット接続のオーディオインターフェースです。STM32H7 マイクロコントローラーを採用し、カスタムのバーストレームファームウェアで動作します。
主な特徴と仕様
主要機能
- 超低遅延: サンプリングレート 48 kHz、バッファサイズ 64 の設定では、往復遅延を 3.620 ミリ秒に抑制できます。
- スケーラビリティ: 複数のユニットを同期させることでチャンネル数を拡張可能です。この場合も往復遅延を増大させることなく動作します。
スペック詳細
- 入力: バランス型ラインレベル、6 チャンネル(1/4 インチ TRS コネクタ)
- 出力: バランス型ラインレベル、8 チャンネル(1/4 インチ TRS コネクタ)
- サンプリングレート: 48 kHz / 96 kHz
- コーデック: Burr-Brown PCM3168A
- MIDI コネクト: DIN MIDI
- 筐体サイズ: 1U(19 インチラックマウント対応)
オペレーティング・システムとの連携
eth68 は
netJACK のマスターエンドポイントとして機能し、netone バックエンドを持つ JACK サーバーと連携します。
JACK での使用方法
JACK サーバーを起動すると、物理的な eth68 IO にマッピングされた IO ポートが自動的に作成されます。その後、対応するアプリケーションを起動して接続します。
jackd -d netone
PipeWire での使用方法
PipeWire セッションへ直接接続することも可能です。
pw-eth68 クライアントを使用し、JACK サーバーと同様の挙動を実現できます。
オーディオ遅延 (Audio Latency)
オーディオ遅延は、信号がハードウェアおよびソフトウェアを通過する際の聴覚的な遅れです。eth68 はループバックケーブルを用いた測定において、48 kHz / バッファサイズ 64 の設定で 3.620 ミリ秒の往復遅延を達成しています。
各種バッファサイズにおける往復遅延比較
| バッファサイズ | 48 kHz | 96 kHz |
|---|---|---|
| 32 | 2.288 ms | 1.148 ms |
| 64 | 3.620 ms | 1.814 ms |
| 96 | 4.954 ms | 2.480 ms |
| 128 | 6.287 ms | 3.147 ms |
| 256 | 11.621 ms | 5.814 ms |
RME HDSPe AIO Pro PCIe カードとの比較
| バッファサイズ | RME (48 kHz) | RME (96 kHz) | eth68 (48 kHz) | eth68 (96 kHz) |
|---|---|---|---|---|
| 32 | -.--- ms | -.--- ms | 3.62 ms | 1.81 ms |
| 64 | 3.62 ms | 2.14 ms | 3.62 ms | 1.81 ms |
| 96 | -.--- ms | -.--- ms | 4.95 ms | 2.48 ms |
| 128 | 6.28 ms | 3.48 ms | 6.29 ms | 3.15 ms |
| 256 | 11.62 ms | 6.14 ms | 11.62 ms | 5.81 ms |
RME カードは 48 kHz でも同等の性能を持ち、96 kHz においては eth68 よりも高周波帯域で低遅延(0.33 ミリ秒以上高速)です。
マルチユニット同期
複数の eth68 ユニットを同期させることでチャンネル数を増やします。同期には以下の手法が採用されています。
同期メカニズム
- 高周波 (HF) クロックの共有
- 一つのユニットをクロックマスターとして指定し、BNC ケーブルで追加ユニットへ HF クロックを直列接続します。
- これにより、ユニット間のサンプルドリフトを排除します。
- サンプルオフセットの消去
を使用してブロードキャスト UDP 同期コマンドを送信し、ユニット間のサンプルオフセットをゼロにします。eth68ctl.py- オフセットは -1、0、+1 サンプル に抑制されます。
JACK 環境での動作
netJACK は複数のマスターからのデータ統合には設計されていないため、プロキシアプリケーション eth68proxy が必須です。
: 複数の eth68 から送信されたキャプチャパケットを統合し、再生パケットを各ユニットへ配信します。eth68proxy- 2 ユニットと
を動作させると、JACK は自動的に二倍のチャンネル数を検知してポートを生成します。eth68proxy
PipeWire 環境での動作
PipeWire セッションでは
が複数のストリームを管理するため、pw-eth68
は不要です。eth68proxy
注: 同期された eth68 ユニット間(単体ループバック時)の往復遅延は変化せず、追加ホップによる処理遅延も xrun(オーバーラン)の原因にはなりません。
処理遅延 (Processing Latency)
処理遅延とはオーディオバッファ全体の処理に要する時間です。デッドライン時間を超えると xrun が発生します。eth68 は処理遅延の可視化を支援するために、前面パネル BNC コネクタから 3.3V デジタル信号
を出力しています。LATMON
LATMON パルス幅
- 挙動: キャプチャデータ入手で高レベル(オン)、再生データコピー完了で低レベル(オフ)になります。
- 意味: パルス幅は、マイクロコントローラー処理、ネットワーク伝送、ホスト OS 処理などを含む総処理遅延の正確な尺度です。
可視化と負荷試験
リアルタイムヒストグラム表示により、処理遅延やジッターを把握できます。
- デッドライン: 48 kHz / バッファ 64 で約 1333 マイクロ秒。
- 現状: 典型的なサイクルで約 625 マイクロ秒となり、余裕(ヘッドルーム)があります。
負荷試験 (
stress -c 6) を実行してホストをバジーさせることで、処理遅延の増大を検証できます。
ネットワーク設定とハードウェア
eth68 はデフォルトで
12.12.12.10:3000 にキャプチャパケットを送信します。ネットワーク構成は eth68ctl.py で調整可能です。
設定確認
python eth68ctl.py 12.12.12.10 query
出力例:
header: 2820800604 board_id: 3407900 source_ip: 12.12.12.100 (202116196) netmask_ip: 255.255.255.0 (4294967040) gateway_ip: 12.12.12.1 (202116097) destination_ip: 12.12.12.10 (202116106) destination_port: 3000 mode: 0 period_size: 64 sample_rate: 48000 capture_channels: 6 playback_channels: 8 footer: 2603798065
設定の更新(IP アドレス変更例)
ホスト IP はネットワーク上の管理側端末のアドレスを指定します。ブロードキャスト UDP を使用して非公式に通信可能です。
python eth68ctl.py 12.12.12.10 --board_id 3407900 set destination_ip 12.12.12.50
サンプリングレート変更例
python eth68ctl.py 12.12.12.10 --board_id 3407900 set sample_rate 96000
ハードウェア推奨事項
- ネットワーク: AVB/TSN は必須ではありませんが、マルチユニット構成では 1G エサネットスイッチを推奨します。単一ユニットの場合はホスト NIC に直接接続可能です。
- NIC (ネットワークインタフェースカード): Intel I210(PCIe カード)が推奨されます。割り込み設定が可能で、リアルタイム動作に最適です。
- デフォルト設定でも動作しますが、遅延を削減する場合は割り込み統合タイムアウトを変更する必要があります。
ethtool -C enp9s0 rx-usecs 0
オーディオ測定結果 (THD+N)
Stanford Research DS360 を用いた測定結果です。入力 THD+N は -94.8 dBFS (-1 kHz)、出力はループバック構成で計測しました。
- 入力性能 (1 kHz): -94.8 dBFS (典型値 -93 dB に準拠)
- パスバンド平坦度: +/- 0.15 dBFS
- ノイズレベル (A-ウェイト):
- 入力のみ:48 kHz で -107.8 dBFS、96 kHz で -110.5 dBFS
- ループバック(入力+出力):48 kHz で -106.2 dBFS、96 kHz で -108.6 dBFS
- ダイナミックレンジ:
- 入力のみ:48 kHz で -104.8 dBFS
- ループバック:48 kHz で -103.2 dBFS
オスサポートと互換性
eth68 は Linux 向けに最適化されていますが、JACK のクロスプラットフォーム特性により macOS および Windows でも動作します。ただし、OSごとのネイティブドライバー(macOS: CoreAudio, Windows: ASIO)を介しての直接接続には互換性の課題があります。
JACK-Router
JACK プロジェクトは、JACK セッションと OS のネイティブインターフェースを接続する仮想ドライバ「JACK-Router」を提供しています。
- Windows: 現在動作しています。対応アプリケーションリストあり。
- macOS: macOS 10.15 以降では破損しているため、利用不可です。
ワークベンチとホストシステム
テスト環境の構成要件は以下の通りです。
- OS: Ubuntu 24.04.3 LTS
- Kernel: 6.19.10-2-liquorix-amd64
- CPU: AMD Ryzen 7 5700X
- マザーボード: ASUS B450-F
- スイッチ: TP-LINK TL-SG608
- NIC: Intel I210 (PCIe)