使用Javascript SDK将WebAudio数据发布到Soundcloud曲目
我试图使用由使用Javascript SDK将WebAudio数据发布到Soundcloud曲目,javascript,soundcloud,recorder,Javascript,Soundcloud,Recorder,我试图使用由Float32Arrays(每个通道1个)组成的音频缓冲区作为资产数据来创建一个声音云轨迹。 单声道录音的音频缓冲区如下所示: [Float32Array { 0=-0.0001220703125, 1=0.000579833984375, 2=0.000762939453125, ...}] 所以我假设我应该把它转换成一个二进制字符串。 为了知道正确的编码,我看了一下 它是flash,但在最后完成了以下帖子: audio.wav --ievejmnijdgyooinchsl
Float32Array
s(每个通道1个)组成的音频缓冲区作为资产数据来创建一个声音云轨迹。
单声道录音的音频缓冲区如下所示:
[Float32Array { 0=-0.0001220703125, 1=0.000579833984375, 2=0.000762939453125, ...}]
所以我假设我应该把它转换成一个二进制字符串。
为了知道正确的编码,我看了一下
它是flash,但在最后完成了以下帖子:
audio.wav
--ievejmnijdgyooinchslwnpygpivapif
Content-Disposition: form-data; name="track[asset_data]"; filename="audio.wav"
Content-Type: application/octet-stream
RIFF(WAVEfmt D¬XdataÚÿÇÿÿ+ÿc]ÿ1&»ÿUÿ(1ÊÿEc&môã...
为了将我的音频缓冲区转换成这样,我使用了类似的代码,因此现在我的过程如下所示:
worker.onmessage = function( e ) {
var blob = e.data;
var reader = new window.FileReader();
reader.onloadend = function() {
var binaryData = reader.result;
SC.post('/tracks', {
asset_data : binaryData,
title : 'recording'
});
};
reader.readAsText(blob);
});
尽管如此,编码还是存在一些问题。在上面,生成以下帖子:
_status_code_map[302] 200
asset_data RIFF ���WAVEfmt �����D�������data����
format json
oauth_token 1....
title recording
但是Soundclound API的响应仍然是:“NetworkError:422不可处理实体-
任何人都能发现问题所在吗?结果表明,Soundcloud只接受多部分格式编码的请求。在我看来,使用SDK实现这一点是不可能的。这是使用angular.js的代码:
worker.onmessage = function( e ) {
var blob = e.data;
var fd = new FormData();
fd.append('oauth_token', SC.accessToken());
fd.append('format','json');
fd.append('track[title]', 'recording');
fd.append('track[asset_data]', blob);
$http.post('https://api.soundcloud.com/tracks', fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
});
将其转换为blob,然后您可以上载blob或使用FormData将blob转换为在服务器上看起来像附加文件的内容我遵循了您的建议,但我得到的结果是:asset_data=%5Bobject%20Blob%5d高级上载功能可能无法处理二进制数据,这是一个相对较新的功能。我已根据您的建议更新了代码,但是编码方面仍有一些问题没有解决