Воспроизведение трека Soundcloud с помощью WebAudio

Я изучаю WebAudio и SoundCloud для программы визуализации, но, похоже, не могу пройти базовый этап тестирования. Вот код, который я использовал для тестирования, но ничего не слышу. Я что-то упускаю?

<script src="http://connect.soundcloud.com/sdk.js"></script>
<script>
var context = new AudioContext(),
audio = new Audio(),
source,     
url = 'http://api.soundcloud.com/tracks/204082098/' + '?client_id=(used my client id)';

audio.src = url;
source = context.createMediaElementSource(audio);
source.connect(context.destination);
source.mediaElement.play();

</script>

person Aby    schedule 05.05.2015    source источник


Ответы (2)


Я предполагаю, что проблема в том, как вы загружаете mp3-файл и забыли /stream в конце.

Этот код работает:

audioContext = new AudioContext();
var source = audioContext.createBufferSource();
var gainNode = audioContext.createGain();
source.connect(gainNode);
gainNode.connect(audioContext.destination);
gainNode.gain.value = 0.5;
source.connect(audioContext.destination);

  function SCkickOffSampleDownload( sample ) {
    var url = new URL(sample+ '?client_id=679877a8ddb9badc6a2a75373c5f3de7');
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.responseType = "arraybuffer";
    request.onload = function() {
      audioContext.decodeAudioData( request.response,
        function(buffer) {
          console.log("sample loaded!");
          sample.loaded=true;
          source.buffer = buffer;
          source.start(0);
      },
      function() { console.log("Decoding error! ");} );
    }
    sample.loaded = false;
    request.send();
  }

var sample = 'http://api.soundcloud.com/tracks/204082098/stream';

SCkickOffSampleDownload( sample );

http://jsfiddle.net/iambnz/s7999f8t/

Некоторые соответствующие документы:

Я создал семплер на основе данных SoundCloud, cwilso может знать пользовательский интерфейс. ;-) Вы можете проверить это здесь: http://www.dope-dj-culture.com

person hwsw    schedule 06.05.2015

Вы пытаетесь получить доступ к звуку через границу домена. Поскольку SoundCloud не поддерживает междоменный доступ с помощью CORS, при подключении веб-аудио (поскольку веб-аудио позволяет проверять биты) это больше не будет работать.

person cwilso    schedule 06.05.2015
comment
SoundCloud утверждает, что поддерживает CORS, хотя неясно, относится ли это к аудиопотокам или просто к запросам метаданных. Если они поддерживают его для аудиопотоков, может быть достаточно добавить crossorigin="anonymous" к тегу <audio>. - person aldel; 06.05.2015
comment
Да, вам нужен бит crossOrigin="anonymous"; в теге audio. - person padenot; 12.05.2015