audio --- オーディオモジュール¶
audio モジュールは、マイクからオーディオサンプルを録音するために使用します。マイクから取り込まれた PDM サンプルはフィルタリングおよびデシメーションされて PCM サンプルに変換され、ユーザーコールバックに渡したり、バッファに直接読み込んだりできます。
関数¶
- audio.init(channels: int = 1, frequency: int = 16000, gain_db: int = 24, highpass: float | bool = 0.9883, samples: int = -1, buffers: int = 16, overflow: bool = True, clkdiv: int = 0) None¶
オーディオモジュールを初期化します。オーディオモジュールを使用する前に、最初に呼び出す必要があります。
channelsはオーディオチャンネル数です。1または2を指定できます。複数のチャンネルを使用する場合、オーディオサンプルはインターリーブされます。マルチチャンネルキャプチャは、複数のマイクを備えたボードでのみサポートされます。frequencyは PCM サンプル周波数で、単位は Hz です。サポートされる周波数のセットはポート/ボードによって異なります。gain_dbは適用するマイクのゲインで、単位はデシベルです。highpassはハイパスフィルタの係数(STM32)、またはハイパスフィルタを有効にするブール値(Alif)です。ハイパスフィルタを実装していないポートでは無視されます。samplesはコールバックごとに蓄積する PCM サンプル数です。-1に設定すると、デシメーション係数とチャンネル数から値が自動的に計算されます。16 の倍数である必要があります。STM32 および Alif ポートで利用可能です。buffersは、DMA ISR とユーザーの間でサンプルをキューイングするために使用される内部 PCM バッファの数です。Alif および RP2 ポートで利用可能です。overflowは、バッファオーバーフローがRuntimeErrorを発生させるかどうかを制御します。Falseの場合、最も古いバッファが上書きされ、ストリーミングが継続されます。Alif および RP2 ポートで利用可能です。clkdivは、PDM クロックを駆動するために使用される PIO クロック分周器を上書きします。0の場合、分周器は要求された周波数から計算されます。RP2 ポートで利用可能です。
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
オーディオキャプチャを開始します。
callbackは、新しい PCM バッファが準備できるたびに、単一の引数pcmbufを伴ってスケジューラから呼び出されます。pcmbufは符号付き 16 ビットの PCM サンプルのbytearrayであり、その長さはデシメーション係数、チャンネル数、およびaudio.init()に渡されるsamples引数によって決まります。シングルチャンネルモードでは各エントリが 1 つの 16 ビットサンプルであり、デュアルチャンネルモードではサンプルがペアでインターリーブされます。audio.get_buffer()をサポートするポート(Alif および RP2)では、呼び出し不可能な値(例:None)を渡すと、コールバックなしでキャプチャが開始され、代わりにaudio.get_buffer()でバッファを取り出せるようになります。
- audio.get_buffer(timeout: int = 0) bytearray¶
次に利用可能な PCM バッファを返します。バッファが準備できるまで、または
timeoutミリ秒が経過するまでブロックします(0は無期限の待機を意味します)。ストリーミングが有効になっていない場合、overflowがTrueの間にバッファオーバーフローが発生した場合、またはストリーミングコールバックがインストールされている場合は、RuntimeErrorを発生させます。Alif および RP2 ポートで利用可能です。
- audio.read_pdm(buf: bytearray) None¶
マイクから生の PDM サンプルを
bufに直接読み込みます。bufは、要素サイズがチャンネル数に一致するarray/bytearrayである必要があります(モノラルの場合は 1 バイト、ステレオの場合は 2 バイト)。STM32 ポート(SAI ベースのボード)でのみ利用可能です。
- audio.samples() int¶
前回の
audio.start_streaming()の呼び出し以降にキャプチャされた PCM サンプルの総数を返します。RP2 ポートでのみ利用可能です。
- audio.overflow() bool¶
前回の
audio.start_streaming()の呼び出し以降にバッファオーバーフローが発生した場合はTrueを返します。RP2 ポートでのみ利用可能です。