나는 짧은 버퍼에 두 개의 16 비트 PCM 샘플을 혼합하고에 16 비트 모노 PCM 원시 데이터를 변환합니다.자바 - 스테레오
// This is our buffer for PCM audio data
mp3Buffer = new short[minBufferSize];
wavBuffer = new short[minBufferSize];
mixedBuffer = new short[minBufferSize];
이 버퍼를 mp3 및 wav 파일의 샘플로 채우고 있습니다. wav 파일은 항상 모노로 표시되며 mp3는 항상 스테레오가됩니다.
나는 당신이 경우
short[] stereoWavBuffer = new short[minBufferSize];
int k = 1;
for (int j = 0; j < minBufferSize/2; j += 2)
{
stereoWavBuffer[j] = wavBuffer[j];
stereoWavBuffer[k] = wavBuffer[k];
k += 2;
}
// TO DO - Add the 2 buffers together
for (int i = 0; i < minBufferSize; i++){
mixedBuffer[i] = (short)(mp3Buffer[i] + stereoWavBuffer[i]);
}
track.write(mixedBuffer, 0, minBufferSize);
}
어떻게 "그냥 두 번 원래의 PCM 데이터의 크기, 원래 버퍼의 모든 샘플에 대한 버퍼를 할당 새로운 버퍼에 두 번 넣어"읽었습니다 나는 이것을 성취합니까? 나는 이것을 시도했지만 wav 오디오는 이제 보통 속도이지만 다람쥐처럼 들린다. 당신이 읽기 전용하더라도 - 그것은
j < minBufferSize - 1
/2, 당신은 파도 버퍼의 모든 읽거나 전체 스테레오 버퍼를 쓰기 않습니다 의미해야하는 것처럼 나에게 루프의 첫 번째 보이는
당신이 말하고있는 그 하나의 버퍼'minBufferSize' 오디오의 N 초이지만, 또 다른 하나는 오디오의 2N 초? – Gabe
연구를 마친 후에 모노를 스테레오로 변환하는 것이 더 나은 것처럼 보이지만 여전히 문제가 있습니다. minbufferSize는 스테레오 오디오의 N 초입니다. 그래서 wavbuffer를 1 : 1로 혼합하면 너무 빨리 재생됩니다. – nawlrus
'mixedBuffer'를 사용한 연산은 무엇을합니까? 하나의 샘플을 다른 샘플에 추가하고 16 비트에 맞도록 결과를 반올 렀 으면 아무 것도 얻을 수 없습니다. 결과의 크기를 조정해야합니다. 원시 WAV 데이터에 대해서는 예 (데이터 헤더를 수정했다고 가정) 만 샘플을 인터 리브해야합니다. – Malcolm