안드로이드에서 고음질로 녹음하는 방법은 무엇인가요?

조회수 4283회

모바일 커뮤니티 어플리케이션을 제작하고 있습니다

현재 안드로이드에서 MediaRecord 클래스를 사용해서 녹음을 하는데

음질이 좋지 않고 녹음된 데이터의 크기가 굉장히 작습니다.

.mp3 형식으로 변환하거나 고음질로 녹음하는 방법을 알 수 있을까요?


     recorder = new MediaRecorder();
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
     recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
     recorder.setOutputFile(RECORDED_FILE);

위 코드는 MediaRecord 클래스를 사용해서 녹음 한 코드입니다. OutputFormat이 mp3는 존재하지 않고 MPEG_4 포맷이 존재합니다.

재생을 하게되면 잡음이 섞여 들리게 됩니다.

어느정도 용량이 있어도 괜찮은데 더 좋은 음질을 얻고 싶습니다. 어떻게 해야 할까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 제가 테스트 해본 결과는 Encoder의 차이가 음질을 결정하는 것 같습니다. 다음 코드로 테스트 해보시기 바랍니다.

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setOutputFile(mFileName);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    
    

    올려주신 코드인 HE_AAC로 설정했을 때는 확실히 음질이 떨어지는 느낌을 받았고요. AMR_NB, AMR_WB는 HE_AAC보다 훨씬 좋은 음질로 녹음되는 것을 확인했습니다. 관련 코드의 출처는 다음 링크를 참고하세요.

    https://developer.android.com/guide/topics/media/audio-capture.html

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 추가로 올려주신 코드에서 SamplingRate와 EncodingBitRate 값을 조절하는 것으로도 음질을 향상 시킬 수 있습니다. 기존 코드에서 아래 값을 사용해보세요.

    recorder.setAudioSamplingRate(44100);
    recorder.setAudioEncodingBitRate(96000);
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)