처리를 위해 원시 오디오를 녹음하기 위해 AudioRecord를 사용하고 있습니다. 오디오는 전적으로 잡음없이 기록되지만 원시 PCM 데이터가 재생되면 많은 속도가 빨라진 것처럼 재생됩니다 (최대 약 2 배). Audacity에서 PCM 데이터를보고 재생하고 있습니다. 나는 실제 전화 (삼성 갤럭시 S5670)를 사용하여 테스트하고있다. 녹음은 44100 Hz, 16 비트에서 수행됩니다. 무슨 일이 일어날 지 모르는 어떤 생각? 해결Android에서 AudioRecord로 녹음하면 오디오 속도가 빨라 집니까?
public class TestApp extends Activity
{
File file;
OutputStream os;
BufferedOutputStream bos;
AudioRecord recorder;
int iAudioBufferSize;
boolean bRecording;
int iBytesRead;
Thread recordThread = new Thread(){
@Override
public void run()
{
byte[] buffer = new byte[iAudioBufferSize];
int iBufferReadResult;
iBytesRead = 0;
while(!interrupted())
{
iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize);
// Android is reading less number of bytes than requested.
if(iAudioBufferSize > iBufferReadResult)
{
iBufferReadResult = iBufferReadResult +
recorder.read(buffer, iBufferReadResult - 1, iAudioBufferSize - iBufferReadResult);
}
iBytesRead = iBytesRead + iBufferReadResult;
for (int i = 0; i < iBufferReadResult; i++)
{
try
{
bos.write(buffer[i]);
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
// File Creation and UI init stuff etc.
bRecording = false;
bPlaying = false;
int iSampleRate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_SYSTEM);
iAudioBufferSize = AudioRecord.getMinBufferSize(iSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize);
bt_Record.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (!bRecording)
{
try
{
recorder.startRecording();
bRecording = true;
recordThread.start();
}
catch(Exception e)
{
tv_Error.setText(e.getLocalizedMessage());
}
}
else
{
recorder.stop();
bRecording = false;
recordThread.interrupt();
try
{
bos.close();
}
catch(IOException e)
{
}
tv_Hello.setText("Recorded Sucessfully. Total " + iBytesRead + " bytes.");
}
}
});
}
}
: 다음
는녹화 코드 I 1 ~ 2 일 동안 고민 한 후이를 기록했다. 그러나 아이러니하게도, 게시 한 직후 솔루션을 발견했습니다. 버퍼링 된 출력 스트림 쓰기는 for 루프에서 너무 많은 시간이 걸리므로 스트림이 샘플을 건너 뜁니다. for 루프를 제거하여 쓰기를 차단하도록 변경했습니다. 완벽하게 작동합니다.
해결책을 찾으면 간단하게 자신의 질문에 답하고 답을 표시하십시오. – Flow