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でトライする。
0 件のコメント:
コメントを投稿