javascript - 使用 Tone.js 笔记创建音效?
问题描述
如何使用 Tone.js 笔记创建其中一种音效
这甚至可能吗?当给出这些音符时:"C","C#","Db","D","D#","Eb","E","E#","Fb","F","F#", "Gb","G","G#","Ab","A","A#","Bb","B","B#","Cb"...我现在可以以某种方式使用tone.js吗创造像“Tada!”这样的音效?我认为它需要的不仅仅是音符/音调,它还需要以某种方式进行音高和时间操纵?
简单的 C 音播放 400 毫秒:
polySynth.triggerAttack("C");
setTimeout(x=>polySynth.triggerRelease("C"),400);
这是一个使用 Tone.js进行实验的工作 Jsfiddle。
解决方案
我没有经验丰富的耳朵,但对我来说,其中大部分听起来像是大和弦(基础、三度、五度),有些还增加了八度。例如,C4、E4、G4、C5:
const chord = ["C4", "E4", "G4", "C5"];
const duration = 0.5;
const delay = 0.05;
const now = Tone.now();
for (let i = 0; i < chord.length; i++) {
const note = chord[i];
polySynth.triggerAttackRelease(note, duration, now + i * delay);
}
如果您想随机化根音符,直接使用频率而不是音符名称可能会很有用。中音C以上的A通常取为440Hz,其上的每一个连续半音为Math.pow(2, 1/12)
高一个因子:
const rootFrequency = 440;
const chordSemitones = [0, 4, 7, 12];
const duration = 0.5;
const delay = 0.1;
const now = Tone.now();
for (let i = 0; i < chordSemitones.length; i++) {
const pitch = rootFrequency * Math.pow(2, chordSemitones[i] / 12);
polySynth.triggerAttackRelease(pitch, duration, now + i * delay);
}
推荐阅读
- pdf-generation - html2pdf 保存文件到后端
- android - 从 Firebase 查询返回 null 的模型类(查询结果不返回 null)
- scala - Scala 书中的 FP:Stream.apply 是否严格?
- android - 加载设备灰显 (Android Studio) 在物理设备上测试应用程序
- java - 等待结果的异步和同步有什么区别?
- python - 带有模块 pyexcel 的 ImportError
- algorithm - 按给定顺序创建目标数组的算法的时间复杂度
- npm - 松露拆箱元币下载失败
- python - SYMPY:如何在特征向量计算后细化整个矩阵?
- angular - 与 ngx-pagination 一起使用时,ngFor 索引重置为 0