Освой MicroPython играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Мне удалось воспроизвести WAV-файл из флеш-памяти. Файл из SD-карточки не воспроизводится.
При запуске приложения динамики хрипят и шумят. Звук воспроизводится при нажатии кнопки A.
from m5stack import *
from m5ui import *
from uiflow import *
from machine import I2S
from wav import wave
# initialize the I2S device
i2s = I2S(
mode=I2S.MODE_MASTER | I2S.MODE_TX | I2S.MODE_DAC_BUILT_IN,
rate=16000,
bits=16,
channel_format=I2S.CHANNEL_ONLY_RIGHT,
data_format=I2S.FORMAT_I2S_MSB,
)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print("Play wave")
def buttonA_wasPressed():
wav_player("/flash/res/mix.wav")
i2s.stop()
pass
btnA.wasPressed(buttonA_wasPressed)
def buttonB_wasPressed():
wav_player("/sd/bell.wav") # не работает
i2s.stop()
pass
btnB.wasPressed(buttonB_wasPressed)
# create a function to play the wav
def wav_player(fname):
wav = wave.open(fname)
i2s.set_dac_mode(I2S.DAC_RIGHT_EN)
i2s.sample_rate(wav.getframerate())
i2s.bits(wav.getsampwidth() * 8)
i2s.nchannels(wav.getnchannels())
i2s.volume(20)
while True:
data = wav.readframes(1024)
if len(data) > 0:
i2s.write(data)
else:
wav.close()
break
Не совсем воспроизведение из WAV-файла, используется DAC (Digital to Analog Conversion), оставлю на всякий случай. При нажатии кнопки воспроизводится звук пищалки.
from m5stack import *
from m5ui import *
from uiflow import *
lcd.clear()
lcd.setCursor(0, 0)
lcd.print("Play wave")
def buttonA_wasPressed():
dac0 = machine.DAC(25)
dac0.write(3)
dac0.waveform(1800, dac0.SINE, duration=200, scale=0, offset=0, invert=0)
dac0.stopwave()
pass
btnA.wasPressed(buttonA_wasPressed)
Вместо dac0.SINE попробуйте dac0.NOISE (есть и другие варианты).