ライブラリtone.jsを試しています。デフォルトのインストゥルメントの 1 つを使用して、オーディオ ループ ファイル (1 小節 120 bpm) を、tone.js 内で生成された一連のノートと同期させたいと考えています。
これらは私が試した主な手順です:
- プレーヤーにオーディオ ループをロードする
- プレーヤーをトランスポートに同期する
- ノートのシーケンスを作成する
- シーケンスを開始
- トランスポートを開始します (ページ読み込みの 1 秒後)
これはコードです:
const player = new Tone.Player("path/to/loop.mp3").toMaster() // 1 bar,
120 bpm audio loop
player.autostart = true
player.loop = true
player.sync() // sync player to Transport
const notes = ["C2", "C3"]
const synth = new Tone.Synth().toMaster()
synth.oscillator.set({type: "fatsawtooth"})
synth.envelope.set({attack: 0.05, decay: 0.2, sustain: 0.1, release: 0.1})
synth.volume.value = -8
const synthPart = new Sequence(
function(time, note) {
synth.triggerAttackRelease(note, "8n", time)
},
notes,
"8n"
)
synthPart.start()
Transport.start(1)
ループとシーケンスは同時に再生を開始しますが、タイミングが少しずれています (完全に同期していません)。上記はオーディオとメモを同期する正しい方法ですか? または、タイミングを改善するためにできることはありますか?