我在瀏覽器上播放PCM音頻時遇到了一些問題。 PCM音頻來自udp協議的android設備,並以* .raw使用javascript播放PCMD
保存在服務器上。我嘗試使用webaudioapi播放此保存的文件失敗。使用下面的代碼,扮演我一些令人毛骨悚然的聲音,白噪聲:
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
audioCtx.sampleRate = 16000;
// Stereo
var channels = 1;
// Create an empty two second stereo buffer at the
// sample rate of the AudioContext
var frameCount = audioCtx.sampleRate * 10.0;
var myAudioBuffer = audioCtx.createBuffer(channels, frameCount, audioCtx.sampleRate);
var req = new XMLHttpRequest();
req.open('GET', "example.raw", false);
req.overrideMimeType('text\/plain; charset=x-user-defined');
req.send(null);
function play(){
for (var channel = 0; channel < channels; channel++) {
var nowBuffering = myAudioBuffer.getChannelData(channel,16,16000);
for (var i = 0; i < frameCount; i++) {
// audio needs to be in [-1.0; 1.0]
// for this reason I also tried to divide it by 32767
// as my pcm sample is in 16-Bit. It plays still the
// same creepy sound less noisy.
nowBuffering[i] = (req.responseText.charCodeAt(i) & 0xff;
}
}
// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
var source = audioCtx.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = myAudioBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);
// start the source playing
source.start();
}
它扮演這樣一個無法辨認的聲音,我不知道,如果是打我認爲它必須做的PCM文件。
我假設它必須對pcm文件做些什麼。 PCM文件具有16 kHz的採樣率,每個採樣16位,只有一個通道或者單通道。
任何人在這裏有相同的問題,或有人有任何建議來解決我的問題?
我在尋找一些解決方案,並感謝任何幫助。
有我的解決方案的錯誤。我提交了一個修復並添加了一個例子。 – Locoluis
我試着用你的例子。它仍然不起作用...:/ 你可以嘗試用你的例子玩這個原料嗎? http://taxameter.esy.es/example.raw –
好吧,我知道這一切都錯了,提供其他每一幀。我的例子工作,因爲他們有平穩的數據。我更新了答案和工作示例。另外,根本不需要使用或混淆audioCtx.sampleRate。 – Locoluis