XIAO ESP32S3でドレミファソラシドを鳴らす その1

2025年12月30日火曜日

マイコン工作

https://www.notyet-maker.com/2025/12/xiao-esp32s3.html

の続き。


前回、配線ができたので、XIAO ESP32S3でドレミファソラシドを鳴らすことから始めてみる。

今回のコードは、CircuitPython本体同梱ライブラリのみで動くらしい。


audiobusioを使ったコードをCodexで生成したが、Wio TerminalでSeeed Arduino Audioを

使っていたときには無かったブツブツ音が出てしまった。


---

・Seeed Arduino Audio

 - 連続ストリーム管理

 - 内部リングバッファ

 - 再生中に途切れない前提設計


・audiobusio

 - RawSampleをそのままI2Sに流す

 - 境界処理・平滑化なし

---

という違いがあるらしい。


・1周期(または周期が合う短波形)を使う

・音の切替は stop → play で明示

・ループ波形の境界で不連続を作らない

という処理で解決するようだ。


https://learn.adafruit.com/mx-midi-guitar/overview

にある、MX MIDI Guitarのコードを参考にする前提だったはずが、ChatGPTが忘却していたことが、

ハマった原因だった。


だけど、↓でドレミファソラシドが鳴ったが、ノイズも出る。

///

import time

import board, audiobusio, synthio


i2s = audiobusio.I2SOut(board.D6, board.D3, board.D7)

synth = synthio.Synthesizer(sample_rate=22050)

i2s.play(synth)


env = synthio.Envelope(

    attack_time=0.01,

    release_time=0.05,

    sustain_level=0.6

)


notes = [261.63, 293.66, 329.63, 349.23,

         392.00, 440.00, 493.88, 523.25]


while True:

    for f in notes:

        n = synthio.Note(frequency=f, envelope=env, amplitude=0.1)

        synth.press(n)

        time.sleep(0.4)

        synth.release(n)

        time.sleep(0.06)  # release_timeより少し長め

///

↓というパラメーター調整をしたが、ザッザッという音が残る。

///

import time

import board, audiobusio, synthio


i2s = audiobusio.I2SOut(board.D6, board.D3, board.D7)


synth = synthio.Synthesizer(sample_rate=18000)

i2s.play(synth)


env = synthio.Envelope(

    attack_time=0.06,

    release_time=0.25,

    sustain_level=0.4

)


notes = [261.63, 293.66, 329.63, 349.23,

         392.00, 440.00, 493.88, 523.25]


while True:

    for f in notes:

        n = synthio.Note(frequency=f, envelope=env, amplitude=0.035)

        synth.press(n)

        time.sleep(0.3)

        synth.release(n)

        time.sleep(0.25)

///


ここまでやってから、ChatGPTに、

synthio+ESP32S3は、Slash風の歪みサウンドには向きません。
と言われた。

いつも、前言撤回される...


audiobusioのブツブツ音は、

・1周期(または周期が合う短波形)を使う 

・音の切替は stop → play で明示 

・ループ波形の境界で不連続を作らない 

という処理で解決できなかったものの、振幅ゼロ近傍でのみ切替することにより、

audiobusioで、Slash風の歪みサウンドに近づけることができるらしい。


Codexでコード生成し、ChatGPTでレビューする形で進めているが、

なかなかうまくいかないので大変。


CircuitPythonを独学したとしても、audiobusioやsynthioのクセ、境界ノイズの正体は、

教科書を読んでも分からないということのようなので、仕方がないのだろう。


次回は、再度、audiobusioでトライする。


このブログを検索

ブログ アーカイブ

XIAO ESP32S3でドレミファソラシドを鳴らす その1

https://www.notyet-maker.com/2025/12/xiao-esp32s3.html の続き。 前回、配線ができたので、XIAO ESP32S3でドレミファソラシドを鳴らすことから始めてみる。 今回のコードは、CircuitPython本体同梱ライブラリの...

QooQ