4. AMP オーディオスキン¶
AMP オーディオスキンのはんだづけと利用法。
次のビデオは、ヘッダー、マイク、スピーカーを AMP スキンにはんだづけする手順を示しています。
スキンの回路図と使われている部品のデータシートについては pyboard ハードウェア を参照してください。
4.1. サンプルコード¶
AMP スキンにはスピーカがあり、小さなパワーアンプを介して DAC(1)
に接続されています。アンプのボリュームは、デジタルポテンショメータで制御します。デジタルポテンショメータは I2C(1)
バスのアドレス 46 でアクセスする I2C デバイスです。
ボリュームを設定するために以下の関数を用意します:
import pyb
def volume(val):
pyb.I2C(1, pyb.I2C.CONTROLLER).mem_write(val, 46, 0)
用意ができたら次のようにできます:
>>> volume(0) # 最小ボリューム
>>> volume(127) # 最大ボリューム
音を鳴らすには DAC
オブジェクトの write_timed
メソッドを使います。たとえば次のようにします。
import math
from pyb import DAC
# 正弦波のデータのバッファを作成する
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# 正弦波を 400Hz で出力する
dac = DAC(1)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
また、Python wave
モジュールを使って WAV ファイルを再生することもできます。wave モジュールは ここ から入手できます。chunk モジュールも必要になりますが、 ここ から入手できます。入手したモジュールを pyboard (フラッシュまたは SDカードの最上位ディレクトリ)に入れてください。再生するには このような 8ビット WAV ファイルが必要ですが、さもなければ次のようにしてファイルを変換します:
avconv -i original.wav -ar 22050 -codec pcm_u8 test.wav
用意ができたら次のようにできます:
>>> import wave
>>> from pyb import DAC
>>> dac = DAC(1)
>>> f = wave.open('test.wav')
>>> dac.write_timed(f.readframes(f.getnframes()), f.getframerate())
これでWAVファイルが再生されます。これはファイル全体を RAM に読み込むので、RAM に収まるほど小さくなければならないことに注意してください。
大きな wave ファイルを再生するには、micro-SD カードを使用して保存する必要があります。また、ファイルを読み取り、マイクロコントローラの RAM 制限に適合する小さなチャンクで DAC に送信する必要があります。最大 16kHz サンプリングの8ビットウェーブファイルを再生できる関数の例を次に示します。
import wave
from pyb import DAC
from pyb import delay
dac = DAC(1)
def play(filename):
f = wave.open(filename, 'r')
total_frames = f.getnframes()
framerate = f.getframerate()
for position in range(0, total_frames, framerate):
f.setpos(position)
dac.write_timed(f.readframes(framerate), framerate)
delay(1000)
この関数は1秒分のデータを読み取り、それをDACに送信します。次に1秒間待機し、ファイルカーソルを新しい位置に移動して、for ループの次の反復で次のデータを読み取ります。1秒ごとに1秒間に1秒間オーディオを再生します。