我正在尝试使用timbre.js记录功能来创建多个缓冲区并将它们存储在一个对象中。创建录音并将其存储在歌曲中的功能'对象在这里:
var generateSong = function(songtitle){
T.rec(function(output) {
//... composition here, full at: http://mohayonao.github.io/timbre.js/RecordingMode.html
output.send(synth);
}).then(function(buffer) {
var songobject = {}
var song = T("buffer", {buffer:buffer});
songobject['song'] = song;
songobject['buffer'] = buffer.buffer[0];
songobject['samplerate'] = buffer.samplerate;
songs[songtitle] = songobject;
console.log('test message');
});
};
然后我尝试用这样的for循环多次调用它:
for(var i=0;i<5;i++){
var songtitle = generateSongTitle();
var songobject = generateSong(songtitle);
}
但是我只是将一条测试消息记录到控制台,因此循环似乎正在运行一次然后停止。我已经尝试过移动&#39;然后()&#39;将部分代码转发到for循环本身(即generateSongTitle()。then(...)),但这有同样的问题。如何让generateSong()函数多次运行?
谢谢
答案 0 :(得分:0)
所以,我猜实际上有两个可能的问题。
T.rec(function(output) {
//... composition here, full at: http://mohayonao.github.io/timbre.js/RecordingMode.html
return output.send(synth);
}
这将使promise链上的下一个处理程序实际获得buffer
值(如果它确实由send
同步返回)。
你想同时录制5首歌曲 吗?
在录制下一首歌之前,您应该等待一首歌完成。
function generate() {
var songtitle = generateSongTitle();
var songobject = generateSong(songtitle);
return songobject;
}
var nextSong = $.when(); // or any empty promise wrapper
for(var i=0;i<5;i++){
nextSong = nextSong.then(generate);
}
理论上这将顺序生成5首歌曲!请告诉我它是否有效:)