最終更新:2025-02-06 (木) 23:28:23 (38d)
Module LLM/マイク
Top / Module LLM / マイク
I2Sの修正の話
概要
- Module LLMのマイクのALSAがバグってる模様
- S16のときはワークアラウンドとして録音したwavのヘッダを修正すると再生できる (が、データとしてはゴミデータ(0)が毎サンプルに混入した状態)
https://x.com/tokkyo/status/1862949670504534162
- 正しく録音するにはAxeraのAPI経由で録音するのが推奨
- Axeraのドライバのバグらしい (2025/01)
詳細
- S16で録音するとデータが2倍になってしまっている (モノラルでも2ch分のデータが含まれている)
- S32のときも一見正常に見えるがおかしい (最大音量が半分になっている)
ALSAでアクセスすると音声がおかしい問題
- Module LLM/マイクのALSAデバイスの挙動がおかしいので対策
確認
- arecord -l?
- arecord -L
- arecord -D hw:0,0 --dump-hw-params
初期ファーム?
https://x.com/devemin/status/1853944952205803886
- arecord -D plughw:0,0 -f S24_LE -r 24000 mic2.wav にすると録音できたらしい
M5_LLM_ubuntu22_04_20241115.axpのテスト用ファーム
cat /proc/asound/pcm 00-00: 6051000.i2s_slv-actt 23f2000.audio_codec-0 : 6051000.i2s_slv-actt 23f2000.audio_codec-0 : capture 1 00-01: 6050000.i2s_mst-actt 23f2000.audio_codec-1 : 6050000.i2s_mst-actt 23f2000.audio_codec-1 : playback 1
- このファームだと下記だとノイズになる
arecord -D plughw:0,0 -f S24_LE -r 24000 mic2.wav
- arecord
- 試した感じ44.1kはNG (Unable to install hw params)
arecord -D hw:0,0 -f S16_LE -c 2 -r 8000 (~48000) mic2.wav 1/2の再生速度になっている (8~48kHz) arecord -D hw:0,0 -f S24_LE -c 2 -r 8000 (~48000) mic2.wav ノイズ (8~48kHz) arecord -D hw:0,0 -f S32_LE -c 2 -r 8000 (~48000) mic2.wav OK (8~48kHz)
- 試した感じ44.1kはNG (Unable to install hw params)
- snd_pcm_hw_params_set_format(SND_PCM_FORMAT_S16_LE)ときは指定した2倍のデータをsnd_pcm_readi()で取得してしまっている模様 (S32_LEのときはOK)
- arecordで録音時下データの場合、WAVEのヘッダを修正すれば再生できるらしいと教えてもらったが、基本はAxeraのAX AUDIO APIで音声取得するのが正攻法らしい
https://x.com/HanxiaoM/status/1862455344288735508
メモ
- スピーカーのボリュームはANA GAINらしい
- systemctl stop llm-audio?
正攻法の取得方法
- ノイズキャンセリング周りでALSAにバグがあるけどワークアラウンドがStackFlowに実装してあるらしい
- arecord用のワークアラウンドはあるが、AxeraのAX AUDIO APIで音声取得するほうが良さそう
AX AUDIO API
- StackFlowのModule LLM/llm-audioが参考になりそう
Module LLM/llm-audioからZeroMQ経由で取得
- Module LLM/llm-kws?とかModule LLM/llm-asr?のコードが参考になる・・?
- Module LLM/llm-audioではAX AUDIO APIを使っている模様