このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

4. AMP オーディオスキン

AMP オーディオスキンのはんだづけと利用法。

AMP skin AMP skin

次のビデオは、ヘッダー、マイク、スピーカーを 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秒間オーディオを再生します。