Otrzymuję przeplatane 16-bitowe próbki PCM przez przewód. Każda próbka jest podpisana:PCM Web Audio Api JavaScript - Otrzymuję zniekształcone dźwięki
Przeczytałem to jako tablicę Int16bit, możemy nazwać to ALL_DATA. Zatem każdy z wpisów tablicy jest próbką 16-bitową.
Ponieważ jest on przeplatany, rozpakowuję go na 2 kanały R-L-R-L Kończę z 2 (16-bitowymi) tablicami o połowę mniejszymi niż tablica ALL_DATA.
Później przejrzałem każdą próbkę i normalizowałem ją do Float32Array, ponieważ to właśnie wykorzystuje interfejs web audio API .
var normalizedSample = (sample> 0)? sample/32768: sample/-32768;
Czy to jest właściwy sposób na zrobienie tego.
Dostaję zniekształcone dźwięki. Możesz powiedzieć, co się dzieje. Dosłownie, jeśli słuchasz gitary klasycznej, brzmi to jak elektryczna z dystorsją.
argumentów sake ja odkładając przykładowy kod, ale kod ten obsługuje
MONO SOUND, aby przykład prostsze, więc nie trzeba go przeplatać także
var startTime = 0;
var fileReader = new FileReader();
fileReader.onload = function (e) {
var data = new DataView(e.target.result);
var audio = new Int16Array(data.byteLength/Int16Array.BYTES_PER_ELEMENT);
var len = audio.length;
for (var jj = 0; jj < len; ++jj) {
audio[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true);
}
var right = new Float32Array(audio.length);
var channleCounter = 0;
for (var i = 0; i < audio.length;) {
var normalizedRight = (audio[i] > 0) ? audio[i]/32768 : audio[i]/-32768;
i = i + 1;
right[channleCounter] = normalizedRight;
channleCounter++;
}
var source = audioContext.createBufferSource();
var audioBuffer = audioContext.createBuffer(1, right.length, 44100);
audioBuffer.getChannelData(0).set(right);
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.noteOn(startTime);
startTime += audioBuffer.duration;
};
Wszelkie sugestie to może powodować zakłócony dźwięk. Napisałem dane pcm, zanim wyślę je po stronie serwera, aby plik był dobry, a dźwięk jest doskonały.
Twój post w końcu mi audio pracy ... Dzięki za komentarz mnóstwo swoje wysiłki, to podjąłem dźwięku w pobliżu krystalicznie czyste teraz :) – ole
Tu wspomnieć, że użyłeś dźwięk mono, aby go prosty. Próbuję to zrobić za pomocą dźwięku stereo. Czy wiesz jak to zrobić? –