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.stop_streaming() None

オーディオキャプチャを停止し、インストールされているコールバックをすべてクリアします。

audio.get_buffer(timeout: int = 0) bytearray

次に利用可能な PCM バッファを返します。バッファが準備できるまで、または timeout ミリ秒が経過するまでブロックします(0 は無期限の待機を意味します)。ストリーミングが有効になっていない場合、overflowTrue の間にバッファオーバーフローが発生した場合、またはストリーミングコールバックがインストールされている場合は、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 ポートでのみ利用可能です。