CircuitPython 10行プログラミング Step2 (9) I2S UDA1334A
Grand Central M4 Expressマイコン・ボードのI2S信号は、下記のポートに出ています。
- #14:I2SSCK0 BCLK(Bit Clock)
- #15:I2SMCK0 マスタ・クロック出力
- #31:I2SSDI データ入力。MICなどで利用。
- #32:I2SSDO データ出力
- #33:I2SFS0 LRCLK(WSEL;Word Select or Left/Right Clock)クロック
I2S入力をもつD-Aコンバータには、I2SMCK0、I2SFS0、I2SSCK0、I2SSDOをつなぎます。一番周波数の高いマスタ・クロックを内部で作るD-Aコンバータでは、I2SMCK0信号の接続は不要です。
●ディジタル・オーディオ用I2S信号
音楽用CDプレーヤは、記録された44.1kHz/16ビットのPCM信号をCDから読み出してD-Aコンバータに入力し、アナログ信号に変換します。D-Aコンバータの入力部分をI2Sバスで規定していて、3種類のフォーマットがあります。ディジタル・オーディオの時代になって物理的なCDを利用しなくなった現在、フォーマットは一つだけになりました。
最初に流通したディジタル・データは44.1kHz/16ビットもしくは48kHz/16ビットのPCMデータです。PCではwav(ワブ)フォーマットのデータです。RIFF形式で記述されていますが、いろいろなローカル・ルールで記述されているのもも見かけます。44.1kHzはサンプリング・レートと呼ばれ、入力のうち変換されるのは半分の0~22kHzのデータです。16ビット(2^16)は量子化する細かさで、音楽業界では24ビットが主流になっています。
I2Sバスでは、音楽用で使われる上記のフォーマットより低いサンプリング・レート、少ない量子化ビット数も扱えます。データは、BCLKと同じ幅のパルス信号です。BCLKはずっと出ています。LRCLKはステレオのLeftとRightの信号データのスタートを表し、HIGHとLOWのトグルなので、この信号の周波数を測るとそのままサンプリング周波数になります。
下記のオシロスコープの波形は、LRCLK信号とデータ(Dout)の関係を観測したものです。
マスタ・クロックはBCLKの1桁高い24~80MHzが使われます。D-Aコンバータの内部で使われ、アップサンプリングやディジタル・フィルタの演算用クロックになります。
●D-AコンバータUDA1334A
ここでは、Adafruitのブレークアウト・ボードUDA1334Aを利用します。NXPのデバイスでサンプリング周波数96kHzまで対応していますが、SN比はそれほど高くはないので、音楽用途ではないかもしれません。NTSC/PALテレビ時代の回路が含まれるので、設計は古そうです。パッケージは小さく、アナログ・テレビの後期に採用されたのかもしれません。
●接続
ブレークアウト・ボードUDA1334Aのピンの機能はこちらのページを参照します。基板上で8本の信号が出ているピンヘッダには何もつなぎません。
UDA1334A | Grand Central |
---|---|
Vin | 3.3V |
3Vo | - |
GND | GND |
WSEL | 33番 |
Din | 32番 |
BCLK | 14番 |
Lout | - |
AGND | - |
Rout | - |
ヘッドホン・ジャックにヘッドホンをつなぎます。
●プログラム
こちらのページに掲載されているCircuitPythonのプログラムCircuitPython_I2S_Wave.pyをコピーしMuエディタに貼りつけます。同ページにはここで利用しているGrand Central M4 Expressマイコン・ボードの接続例は掲載されていないので、下記のように記述を変更します。
BCLK LRCLK Dout
audio = audiobusio.I2SOut(board.D14, board.D33, board.D32) |
プログラムです。
import audioio
import board
import audiobusio
wave_file = open("StreetChicken.wav", "rb")
wave = audioio.WaveFile(wave_file)
audio = audiobusio.I2SOut(board.D14, board.D33, board.D32)
while True:
audio.play(wave)
while audio.playing:
pass
同ページからダウンロードしたStreetChicken.wav以外に、下記の三つのwavデータを再生してしてみました。ハイレゾ・データは知らないフォーマットだというエラーが出ました。
- x 96kHz/24ビット
- x 48kHz/24ビット
- 〇 48kHz/16ビット