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

2026年1月2日金曜日

マイコン工作

https://www.notyet-maker.com/2025/12/xiao-esp32s3-1.html
の続き。

前回まで、audiobusioのブツブツ音は、
・1周期(または周期が合う短波形)を使う 
・音の切替は stop → play で明示 
・ループ波形の境界で不連続を作らない 
という処理で解決できなかったものの、振幅ゼロ近傍でのみ切替することにより、 audiobusioで、Slash風の歪みサウンドに近づけることができる、ということだった。

再度、audiobusioでトライしてみたが、まだブブブ音が出てしまう。

AdafruitsのMX MIDI Guitarを参考にしていたが、どうもマイコンの性能差があるようだ。

---
・MX MIDI Guitar(SAMD51)
オーディオ用途に向いた“素直な土台”です。
単一コアで、割り込みとDMAの関係が読みやすく、I2Sを一定周期で淡々と流す設計に向いています。
結果として、音を出しているだけで余計な揺らぎが混ざりにくい。

・ESP32S3
汎用・高機能だが、オーディオ専用ではありません。
マルチコア+RTOS前提のため、I2Sの裏で
タスク切替・クロック分周・DMA制御が常に動いています。
そのため、音声データが非ゼロになった瞬間から、周期の揺らぎが低周波として音に乗りやすい。
これは歪みの有無とは無関係で、歪みは単にそれを目立たせるだけです。
---

ChatGPTとの会話の末、下記のようにする。
---
1. ESP32S3+MAX98357Aでは「素材音」まで
サイン波などの単純波形で、
速いアタック・自然な減衰・安定したピッチ反応を作る。
音色や歪みはここで完成させない。

2. MX MIDI Guitarの“鳴らし方”だけを真似る
倍音設計ではなく、
エンベロープ・演奏応答・ピッチ挙動を参考にする。
ここがギターっぽさの核心です。

3. ESP32S3側でクリーン音を整え、Slash寄りにする。
ESP32S3側で軽いビブラート、ピッキング感、低域整理を行い、クリーン音の段階で「Slash寄り」と感じられる音を作る。
MAX98357Aは、ESP32S3で作った音をスピーカーで聞ける音量にするために使うだけで、音の性格やニュアンスには関与しない。
---

これで、比較的、クリアな音が出た。
///
import time
import board, audiobusio, synthio

# I2S初期化
i2s = audiobusio.I2SOut(board.D6, board.D3, board.D7)

# 素材音の安定性重視(中間のサンプルレート)
synth = synthio.Synthesizer(sample_rate=18000)
i2s.play(synth)

# 素材音用エンベロープ(速い立ち上がり+自然減衰)
env = synthio.Envelope(
    attack_time=0.01,
    decay_time=0.20,
    sustain_level=0.25,
    release_time=0.25
)

# ドレミファソラシド(C4〜C5)
notes = [261.63, 293.66, 329.63, 349.23,
         392.00, 440.00, 493.88, 523.25]

# 低めの出力(外部歪み前提)
AMPLITUDE = 0.05

while True:
    for f in notes:
        n = synthio.Note(frequency=f, envelope=env, amplitude=AMPLITUDE)
        synth.press(n)
        time.sleep(0.35) # 発音
        synth.release(n)
        time.sleep(0.25) # 余韻
///

コードの解説は、下記の通り。
---
・やめたこと
audiocore.RawSample を作って
i2s.play(sample, loop=True) を繰り返す
stop / play や波形切替で音を制御する
→ これがブツブツ音の原因になっていました。

・今やっていること
audiobusio.I2SOut はそのまま使う
その上に synthio.Synthesizer を常駐再生する
音の出入りは Note の press / release と Envelope だけで制御する
---

次回は、 2. MX MIDI Guitarの“鳴らし方”だけを真似る
にトライする。

このブログを検索

ブログ アーカイブ

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

https://www.notyet-maker.com/2025/12/xiao-esp32s3-1.html の続き。 前回まで、audiobusioのブツブツ音は、 ・1周期(または周期が合う短波形)を使う  ・音の切替は stop → play で明示  ・ループ波形の境...

QooQ