나는 2 개의 파일이 있습니다. 일단 mp3가 pcm으로 디코드되어 스트림으로 보내지는데 wav가 pcm로 읽혀집니다. 샘플은 짧은 데이터 형식으로 보관됩니다.오디오 Android/Java에 묵음 추가하기
오디오 통계 : 44,100 샘플 * 샘플 * 2 개 채널 당 16 비트 = 1,411,200 비트/초
나는 내가있는 mp3 PCM 데이터의 시작 부분에 적용해야 침묵의 X 초를 가지고 내가 그 일을하고있다 이렇게 :
private short[] mp3Buffer = null;
private short[] wavBuffer = null;
private short[] mixedBuffer = null;
double silenceSamples = (audioInfo.rate * padding) * 2;
for (int i = 0; i < minBufferSize; i++){
if (silenceSamples > 0){
mp3Buffer[i] = 0; //Add 0 to the buffer as silence
mixedBuffer[i] = (short)((mp3Buffer[i] + stereoWavBuffer[i])/2);
silenceSamples = silenceSamples - 0.5;
}
else
mixedBuffer[i] = (short)((mp3Buffer[i] + stereoWavBuffer[i])/2);
오디오는 항상 꺼져 있습니다. 때로는 두 번째 또는 두 번째 너무 빠르며 때로는 두 번째 또는 두 번째 너무 느립니다. 나는 audiorecord (wav)를 먼저 시작한 다음 start timer -> start mediaplayer (이미 준비 됨) -> end timer를 설정하고 "padding"변수와의 차이를 설정함에 따라 타이밍 문제를 생각하지 않습니다. 나는 또한 wav 헤더에서 44kb를 건너 뛰고있다.
도움을 주시면 감사하겠습니다.
stereoWavBuffer를 오프셋하는 것처럼 보입니다. 내가 여기서 맞습니까? 일단 mp3Buffer가 시작되고 나서 silenceSamples가 I보다 강하면 stereoWavBuffer가 시작될 것입니까? – nawlrus
예 - 어떤 것을 오프셋하고 싶은지 잘 모르겠습니다. 그래서 방금 WavBuffer를 선택했습니다. 또한 혼합 된 데이터를 두 개로 나누기를 원하지 않을 수도 있습니다. float [32 비트 해상도를 제공합니다]의 배열에 함께 섞은 다음 float []을 16 비트 범위로 정규화 한 다음 다시 []로 변환하십시오. 내 예제를 업데이트하겠습니다 ... –
죄송합니다 - 침묵은 MP3 오디오의 시작 부분에 있어야한다고 말씀하셨습니다 - 대답은 –