CommandManager.micAudio
val micAudio: SharedFlow<ByteArray>
概要
グラスのマイク音声。PCM16 のリトルエンディアン、16kHz モノラル。startMicStreaming を呼ぶまで何も流れない。デバイスの世代で音声の形式が変わる(Ogg Opus か record stream)が、判別とデコードは SDK 側で行うため利用側は PCM だけ受け取ればよい。グラスの録音は小さいため、SDK が3倍に持ち上げてから流す。購読が遅れると古いデータから捨てるので、録音として貯めるなら受け取り側でバッファする。
1チャンクは 640 バイト(20ms 分)で届く。毎秒 32000 バイトに満たないときは BLE の取りこぼしを疑う。
音声認識に渡すとき
そのまま投げられる形ではないので、送り先に合わせて包み直す。
| 送り先 | 必要な変換 |
|---|---|
| ファイルを受け取る文字起こし API | WAV ヘッダ(44バイト)を付けてファイルにする。サンプルレートはヘッダに書けばよく、変換は要らない |
| 24kHz を要求するリアルタイム API | 16kHz から 24kHz へリサンプルしてから送る。そのまま送ると速度とピッチがずれる |
戻り値
SharedFlow<ByteArray>
使用例
scope.launch {
commandManager.micAudio.collect { pcm ->
// PCM16 リトルエンディアン、16kHz モノラル
Log.d("sample", "${pcm.size} bytes")
}
}
commandManager.startMicStreaming()