我正在用webgl創建音頻可視化工具,並且已經整合了soundcloud音軌。我想不能切換曲目,但是我可以讓我的可視化工具工作,並打破音頻,或者我可以讓音頻工作和可視化工具打破。打開音頻開關的鉻音頻分析儀
兩種方式,我已經能夠使它工作的
音頻工作
- 刪除音頻元素
- 新的音頻元素追加到身體
- 觸發玩
Vi sualizer工作
- 停止音頻
- 變化源
- 觸發播放
當我有可視化的工作,音頻完全搞砸了。緩衝區聽起來不對,音頻中有人造物(噪聲,嗶嗶聲和爆炸聲)。
當我有音頻工作,當我打電話analyser.getByteFrequencyData
,我得到一個0的數組。我想這是因爲分析儀沒有正確連接。
的音頻使用的代碼看起來像
$('#music').trigger("pause");
currentTrackNum = currentTrackNum + 1;
var tracks = $("#tracks").data("tracks")
var currentTrack = tracks[parseInt(currentTrackNum)%tracks.length];
// Begin audio switching
analyser.disconnect();
$('#music').remove();
$('body').append('<audio id="music" preload="auto" src="'+ currentTrack["download"].toString() + '?client_id=4c6187aeda01c8ad86e556555621074f"></audio>');
startWebAudio(),
(我不認爲我需要pause
電話。難道我?)
當我想可視化的工作,我用這代碼
currentTrackNum = currentTrackNum + 1;
var tracks = $("#tracks").data("tracks")
var currentTrack = tracks[parseInt(currentTrackNum)%tracks.length];
// Begin audio switching
$("#music").attr("src", currentTrack["download"].toString() + "?client_id=4c6187aeda01c8ad86e556555621074f");
$("#songTitle").text(currentTrack["title"]);
$('#music').trigger("play");
startWebAudio
函數看起來像這樣。
function startWebAudio() {
// Get our <audio> element
var audio = document.getElementById('music');
// Create a new audio context (that allows us to do all the Web Audio stuff)
var audioContext = new webkitAudioContext();
// Create a new analyser
analyser = audioContext.createAnalyser();
// Create a new audio source from the <audio> element
var source = audioContext.createMediaElementSource(audio);
// Connect up the output from the audio source to the input of the analyser
source.connect(analyser);
// Connect up the audio output of the analyser to the audioContext destination i.e. the speakers (The analyser takes the output of the <audio> element and swallows it. If we want to hear the sound of the <audio> element then we need to re-route the analyser's output to the speakers)
analyser.connect(audioContext.destination);
// Get the <audio> element started
audio.play();
var freqByteData = new Uint8Array(analyser.frequencyBinCount);
}
我懷疑是分析儀沒有勾搭上了正確的,但我想不出來看看弄明白什麼。我看過frequencyByteData
的輸出結果,這似乎表明某些東西沒有正確連接。 analyser
變量是全局變量。如果您想了解更多的參考代碼,這裏的where it is on github