Skip to content

Conversation

@voluntas
Copy link
Member

@voluntas voluntas commented Oct 14, 2025

これは WebRTC ADM の PipeWire API 実装で、マージする予定はありません。

@voluntas voluntas changed the title [WIP] Feature/pipewire [DO NOT MERGE] Feature/pipewire Oct 14, 2025
WebRTC の AudioDeviceModule 実装では、AudioDeviceBuffer は通常
AudioDeviceModuleImpl 内部で作成されるが、カスタム wrapper では
自分で作成して attach する必要がある。

変更内容:
- AudioDeviceModulePipeWire::Init() で TaskQueueFactory を作成
- AudioDeviceBuffer を作成して AudioDeviceLinuxPipeWire に attach
- AttachAudioBuffer() を private メソッドとして実装
- 録音コールバックにログを追加して動作確認を容易にする

動作確認:
- AudioDeviceBuffer が正しく作成・attach される
- 録音ストリームが STREAMING 状態に遷移
- OnRecStreamProcess で audio_buffer_ が正しく設定されている
- Sora への録音データ送信が成功
- PW_KEY_NODE_FORCE_QUANTUM で quantum を 480 フレームに強制
- SPA_PARAM_Latency で min/max quantum を明示
- chunk offset を考慮してサンプルポインタを計算
- リングバッファで 480 フレーム未満のデータを次回へ繰り越し
- StopRecording でバッファをリセット (次回開始時に前回の端数が混入しないようにする)
- デバイス一覧表示から GUID を削除
- ドキュメントに実装の詳細を追記 (リングバッファ、データ欠落なし)
- InitPlayout で再生ストリームを作成
- OnPlayStreamProcess で AudioDeviceBuffer からデータを取得して PipeWire に転送
- StartPlayout/StopPlayout を実装
- 録音と同様に PW_KEY_NODE_FORCE_QUANTUM で 10ms ネイティブ配信
- リングバッファで 10ms 境界を維持
- StopPlayout でバッファをリセット

CHANGES.md:
- Linux PipeWire オーディオデバイスモジュール実装を追加
- Linux でのオーディオデバイス選択オプションを追加

doc/LINUX_PIPEWIRE.md:
- audio グループが必要な理由を詳しく説明
- PipeWire も底辺では ALSA デバイス経由でアクセスするため audio グループが必須
- デバイスパーミッションの具体例を追加
- 再生機能の実装状況を更新
- 実装見積もりを更新
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants