微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在使用tone.js播放音频时更改音调间隔吗?

如何解决我可以在使用tone.js播放音频时更改音调间隔吗?

我会向你展示我的代码

audio_music = new Audio();
var track = audioContext.createMediaElementSource(audio_music);

//Import music files from other sources into base64 form.
audio_music.src = "data:audio/ogg;base64,"+ data.music;

var splitter = audioContext.createChannelSplitter(6);
var merger = audioContext.createChannelMerger(2);
track.connect(splitter);

//omitted in addition to 0 and 1 due to repetition of the similar content
gainNode0 = audioContext.createGain(); gainNode0.gain.setValueAtTime((musicvolume*0.1),audioContext.currentTime);
gainNode1 = audioContext.createGain(); gainNode1.gain.setValueAtTime((musicvolume*0.1),audioContext.currentTime);

splitter.connect(gainNode0,0);
splitter.connect(gainNode1,1);

var pitchshift0 = new Tone.PitchShift(pitch);
var pitchshift1 = new Tone.PitchShift(pitch);

Tone.connect(gainNode0,pitchshift0);
Tone.connect(gainNode1,pitchshift1);

Tone.connect(pitchshift0,merger,0);
Tone.connect(pitchshift1,1);

Tone.connect(merger,audioContext.destination);

我对audioContext和tone.js的使用不熟悉,所以不知道我理解对不对,但我的意图是将输入源分成六个通道,按照增益调整,音高的顺序进行处理分别是 shift 和 marge。

这将完成其他所有操作,但您无法在播放过程中更改音高偏移的值。

我想要一种类似于在音高变换中 GainNode 中使用的 setValueAtTime 起作用的方法

我该怎么办?

解决方法

您可以通过设置音高参数来改变音高:

pitchshift0.pitch = -12 // Semitone to shift the pitch to.

如果您想在播放期间的特定时间设置此项,您可以使用 Transport 类来安排:

Tone.Transport.schedule(() => pitchshift0.pitch = -12,time /* The transport time you want to schedule it at */);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。