2012-04-07 4 views
2

나는 짧은 버퍼에 두 개의 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, 당신은 파도 버퍼의 모든 읽거나 전체 스테레오 버퍼를 쓰기 않습니다 의미해야하는 것처럼 나에게 루프의 첫 번째 보이는

+0

당신이 말하고있는 그 하나의 버퍼'minBufferSize' 오디오의 N 초이지만, 또 다른 하나는 오디오의 2N 초? – Gabe

+0

연구를 마친 후에 모노를 스테레오로 변환하는 것이 더 나은 것처럼 보이지만 여전히 문제가 있습니다. minbufferSize는 스테레오 오디오의 N 초입니다. 그래서 wavbuffer를 1 : 1로 혼합하면 너무 빨리 재생됩니다. – nawlrus

+0

'mixedBuffer'를 사용한 연산은 무엇을합니까? 하나의 샘플을 다른 샘플에 추가하고 16 비트에 맞도록 결과를 반올 렀 으면 아무 것도 얻을 수 없습니다. 결과의 크기를 조정해야합니다. 원시 WAV 데이터에 대해서는 예 (데이터 헤더를 수정했다고 가정) 만 샘플을 인터 리브해야합니다. – Malcolm

답변

2

웨이브 버퍼의 절반은 모노이기 때문에 모든 스테레오 버퍼를 작성해야하기 때문에 모든 데이터입니다. 또한 J를 1 씩 2 씩 증가시켜 각 모노 샘플을 읽어야합니다. 당신은 일본에서 stereowavebuffer를 설정하고 J에 wavebuffer에 모두 동일한 케이해야하기 때문에

속도 문제가 될 것으로 보인다. 실제로 원래 모노 파일의 절반 만 복제하고있는 것 같습니다. 그런 다음 스테레오로 다시 재생합니다 (예 : 바이트를 두 배로 늘림).

나는 첫 번째 루프

int k = 0; 
for (int j = 0; j < minBufferSize/2; j++) //Assuming you only have half a buffer since mono??? 
{ 
    stereoWavBuffer[k] = wavBuffer[j]; 
    stereoWavBuffer[k+1] = wavBuffer[j]; 
    k += 2; 
} 

나쁜 아이 패드 입력을 해결하기 위해 -edited이 같은 더 많은 보일 것이다 생각!

+0

거룩한 쓰레기. 정말 고맙습니다. 그게 효과가 있었어. 내 논리가 완전히 벗어나도록 오디오를 다루는 것은 이번이 처음입니다. 정말 고맙습니다!! – nawlrus