使用Javascript SDK将WebAudio数据发布到Soundcloud轨道

时间:2015-06-30 22:06:17

标签: javascript soundcloud recorder

我尝试使用由Float32Array s(每个频道1个)组成的音频缓冲区作为资产数据来创建soundcloud音轨。 单声道录音的音频缓冲区如下所示:

[Float32Array { 0=-0.0001220703125,  1=0.000579833984375,  2=0.000762939453125,  ...}]

所以我假设我应该将它转换为二进制字符串。 要知道正确的编码,我看了http://connect.soundcloud.com/examples/recording.html 这是闪光灯,但最后完成了以下帖子:

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ôã...

为了将我的音频缓冲区变为这样,我使用了与https://gist.github.com/kevincennis/9754325类似的代码,现在我的过程看起来像:

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无法处理的实体 - https://api.soundcloud.com/tracks"

有人能发现错误吗?

1 个答案:

答案 0 :(得分:0)

原来,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}
  })
});