Bee*_*ees 10 javascript audio html5 web-audio-api
我正在尝试使用Web Audio API,我的目标是创建一个数字吉他,其中每个弦都有一个实际吉他的初始声源,打开弦,然后我想动态生成所有其他音品位置声音.经过对该主题的一些研究(这对我来说都是新手),听起来这可能是通过改变源声音样本的频率来实现的.
问题是我已经看到很多用于改变合成sin波的算法,但没有改变音频样本的频率.以下是我的代码示例,以便更好地了解我是如何实现此目的的:
// Guitar chord buffer
var chordBuffer = null;
// Create audio context
var context = new webkitAudioContext();
// Load sound sample
var request = new XMLHttpRequest();
request.open('GET', 'chord.mp3', true);
request.responseType = 'arraybuffer';
request.onload = loadChord;
request.send();
// Handle guitar string "pluck"
$('.string').mouseenter(function(e){
e.preventDefault();
var source = context.createBufferSource();
source.buffer = chordBuffer;
// Create javaScriptNode so we can get at raw audio buffer
var jsnode = context.createJavaScriptNode(1024, 1, 1);
jsnode.onaudioprocess = changeFrequency;
// Connect nodes and play
source.connect(jsnode);
jsnode.connect(context.destination);
source.noteOn(0);
});
function loadChord() {
context.decodeAudioData(
request.response,
function(pBuffer) { chordBuffer = pBuffer; },
function(pError) { console.error(pError); }
);
}
function changeFrequency(e) {
var ib = e.inputBuffer.getChannelData(0);
var ob = e.outputBuffer.getChannelData(0);
var n = ib.length;
for (var i = 0; i < n; ++i) {
// Code needed...
}
}
Run Code Online (Sandbox Code Playgroud)
所以你有它 - 我可以很好地播放声音但是在改变和弦采样频率时会有点失败,这会改变和弦采样频率,因此它听起来像是字符串上的另一个音品位置.任何有关此代码的帮助都将受到赞赏,或者对我是否尝试做的事情的意见甚至是可能的.
谢谢!
您可以通过设置获得所需的行为playbackRate
,但正如 Brad 所说,您将不得不使用多重采样。另请参阅这个问题:SettingplayingRate on audio elementconnected to web audio api。
归档时间: |
|
查看次数: |
5127 次 |
最近记录: |