使用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高级上载功能可能无法处理二进制数据,这是一个相对较新的功能。我已根据您的建议更新了代码,但是编码方面仍有一些问题没有解决