4. AMP 音频皮肤¶
焊接和使用 AMP 音频皮肤。
以下视频展示了如何将接头、麦克风和扬声器焊接到 AMP 外壳上。
有关皮肤上组件的电路原理图和数据表,请参阅 pyboard 硬件。
4.1. 示例代码¶
AMP 皮肤有一个扬声器,DAC(1)
通过一个小功率放大器连接到它。放大器的音量由数字电位器控制,数字电位器是总线上地址为 46 的 I2C 设备IC2(1)
。
要设置音量,请定义以下函数:
import pyb
def volume(val):
pyb.I2C(1, pyb.I2C.MASTER).mem_write(val, 46, 0)
然后你可以这样做:
>>> volume(0) # minimum volume
>>> volume(127) # maximum volume
要播放声音,请使用对象的write_timed
方法 DAC
。例如:
import math
from pyb import DAC
# create a buffer containing a sine-wave
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# output the sine-wave at 400Hz
dac = DAC(1)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
您还可以使用 Pythonwave
模块播放 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,因此它必须足够小以适应其中。
要播放更大的波形文件,您必须使用 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)
此函数读取一秒钟的数据并将其发送到 DAC。然后等待一秒钟并将文件光标移动到新位置,以在 for 循环的下一次迭代中读取下一秒的数据。它每隔一秒一次播放一秒的音频。