0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

M5stackで遊んでみる(音を鳴らしてみる)

Last updated at Posted at 2018-05-04

音声の再生

何回か前の投稿で画像を表示することはできているので、
今回はそれに合わせて音を出して見ようと思います。

音声ファイルの準備

M5stackのフラッシュは具体的な容量はよくわからなかったんですが、
サイズがあまり大きくないらしく、音声ファイルもある程度サイズがあると溢れてしまいそうなので、
SDカードに保存しておきます。フォーマットとかは何も考えずに、買ってきた奴をそのままMacにブッ刺して
ルートのディレクトリに音声を放り込でおきます。

今回は super-dry.wav というファイルを保存しておきます。

wavファイルを再生する関数を用意。

↑ここにwavを再生する関数があったので丸パクリしてmain.pyに書き写します。


from m5stack import lcd, buttonC, speaker
from machine import I2S
import os, wave

# スーパードライの画像表示
lcd.clear()
lcd.setCursor(0, 0)
lcd.setColor(lcd.WHITE)
# lcd.print("Hello world!")
lcd.image(0,0,'super-dry.jpg')

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)

# 音声の再生
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)
            print('.', end='')
        else:
            wav.close()
            break
        if buttonC.isPressed():
            wav.close()
            break;

os.mountsd()

# Playing WAV audio file
wav_player('/sd/super-dry.wav')
i2s.volume(0)
i2s.stop()
lcd.setBrightness(0)

wav再生のコード自体はちょっとよく理解していませんが、
SDをマウントしてルートディレクトリに置いてあるwavを再生する関数を呼ぶだけなので、
全体としては簡単な作りにはなっています。

I2SというのはInter-IC SoundといってIC間でデジタル音声データをシリアル転送するための規格みたいです。
(出典: Wikipedia)
勉強になりますね。さっぱり理解できてないですが。

再生中、再生後のボリュームがうるさかったので、
再生する際のボリュームと終わった後のボリュームを調整していたり、
終わった後のlcdの明るさを0にして真っ黒にしているのは再生後にボリュームを0にしているのに
何か音がなっているのを抑えようとして失敗した跡だったりするので、あんまり気にしなくても良いです。

ファイルをアップロード

できたmain.pyをampyを使ってアップロードし、音声を入れて置いたSDカードをM5stackに刺して
電源ボタンを押して再起動すると、うまいこと再生されました。

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?