17

<audio/>-element 経由createMediaElementSourceでオーディオファイルをロードし、オーディオデータをAudioBufferSourceNodeにロードすることは可能ですか?

noteOnおよびのような Buffer メソッドを使用したいので、オーディオ要素をソース (MediaElementSource) として使用することはオプションではないようnoteGrainです。

残念ながら、オーディオファイルを XHR 経由でバッファーに直接ロードすることもできません (クライアント側の XHR を介して Soundcloud トラックの stream_url を開きますか? を参照してください) 。

ただし、オーディオ要素からバッファの内容をロードすることは可能であるようです:

http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

<audio/>または、 -element のバッファをsourceNode として直接使用することさえ可能ですか?

4

4 に答える 4

9

MediaElementSourceNode からオーディオ バッファを抽出できないようです。

https://groups.google.com/a/chromium.org/forum/?fromgroups#!topic/chromium-html5/HkX1sP8ONKsを参照してください

私が間違っていることを証明する返信は大歓迎です!

于 2012-07-14T22:45:24.237 に答える
6

これは可能です。http://updates.html5rocks.com/2012/02/HTML5-audio-and-the-Web-Audio-API-are-BFFsで私の投稿を参照してください。そこにはコードスニペットと例もあります。未解決のバグがいくつかありますが<audio>、 Web Audio API へのロードは思い通りに動作するはずです。

// Create an <audio> element dynamically.
var audio = new Audio();
audio.src = 'myfile.mp3';
audio.controls = true;
audio.autoplay = true;
document.body.appendChild(audio);

var context = new webkitAudioContext();
var analyser = context.createAnalyser();

// Wait for window.onload to fire. See crbug.com/112368
window.addEventListener('load', function(e) {
  // Our <audio> element will be the audio source.
  var source = context.createMediaElementSource(audio);
  source.connect(analyser);
  analyser.connect(context.destination);

  // ...call requestAnimationFrame() and render the analyser's output to canvas.
}, false);
于 2012-07-08T13:52:38.503 に答える
0

あなたがまだより良い解決策を見つけたかどうかはわかりませんが、あなたが投稿した W3C リンクもチェックしました: http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

しかし、それを実際に機能させるには、 を使用する必要がありますAudioContext.createScriptProcessor()。私はまだこれを試していませんが、基本的にはソース ノード (オーディオ要素) をスクリプト プロセッサに接続しますが、必要がない場合はオーディオを出力しません。コールバックでは、onaudioprocess(もちろん指定されたサイズのチャンクで) オーディオ バッファ データに直接アクセスできます。上のリンクに例があります。

また、より多くのバッファ配列をより速く取得できるように、何らかの方法で再生速度を微調整できると思います。

于 2016-03-13T09:52:55.483 に答える