2016-08-12 10 views
1

내 응용 프로그램은 PCM 이진 데이터를 서버에서 Web Audio API로 스트리밍합니다. 왜 내 JS 오디오 스트리밍 코드가 x86 및 x86_64 시스템에서 다르게 들리는가요?

내가 재생 Float32에 다시 캐스팅하기 전에, 32768에 의해 각각의 샘플을, INT16에 들어오는 데이터를 캐스팅 분할하는 DataView를를 사용하여 오디오를 정상화하려면

: 여기

var data = new DataView(arrayBuffer); 

var tempArray = new Int16Array(data.byteLength/Int16Array.BYTES_PER_ELEMENT); 

var len = tempArray.length; 
for (var jj = 0; jj < len; ++jj) { 
    tempArray[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true); 
} 


var bufferToPlay = new Float32Array(tempArray.length); 
var channelCounter = 0; 
for (var i = 0; i < tempArray.length;) { 
    var normalizedAudio = tempArray[i]/32768; 
    i = i + 1; 
    bufferToPlay[channelCounter] = normalizedAudio; 
    channelCounter++; 
} 

것은 불확실성이다

이것을 64 비트 Win 머신에서 실행할 때 오디오는 완벽합니다. 그러나 기존의 32 비트 Win XP 시스템을 사용하면 오디오는 리샘플링/비트 변환 아티팩트와 같은 사운드로 가득차 있습니다.

저는 엔디안에 대해 많이 읽었지 만 두 기계 모두 펜티엄이므로 리틀 엔디안이어야합니다. 맞습니까? 어떻게 가능합니까?

답변

1

각 컴퓨터의 WebAudio 컨텍스트에 대해 sampleRate을 확인하십시오. 그들은 같은가요? 또한, 엔디안이 잘못 되었다면 리샘플링/비트 변환처럼 들리지 않습니다. 리샘플링 (resampling)과 같은 소리가 들리면, 두 기계의 샘플 속도는 매우 다를 것입니다.

+0

입력 해 주셔서 감사합니다. 사운드 카드 샘플링 속도의 불일치라고 밝혀졌습니다. – user3174541