마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 노래방을 앱을 만들려면 ffmpeg을 사용할 수 밖에 없나요?

0 추천
가수와 듀엣을 할 수 있는 앱을 만들어 보려고 합니다. 가수의 목소리 파일과 배경 음악 파일을 재생 시키고 원하는 구간 마다 가수의 목소리 파일을 중지 시키고, 사용자의 목소리를 녹음하는 방법으로 만들려고 하는데요. 마지막에는 모든 소리를 합쳐서 하나의 mp3 파일로 만들어야합니다. 안드로이드에서 이 기능을 구현하려면 ffmpeg을 개발해 사용할 수 밖에 없는건가요? 어디 예제나 관련 라이브러리는 없을까요?
준버기 (1,160 포인트) 님이 2018년 6월 25일 질문

1개의 답변

+1 추천
 
채택된 답변

가능합니다.

아래 방법을 사용하시면 될 듯 합니다.

 

1. 가수 목소리 + 배경음 재생

  =>  MediaExtracktor를 통해 mp3파일에서  Mp3  packet  데이터를  뽑고 이 데이터를 MediaCodec를 통해   PCM으로  변경 시켜 AudioTrack을 통해 재생시킬 수 있습니다.

2. 원하는 구간 마다 가수의 목소리 파일을 중지 

=> 1번 과정을 통해 구한  PCM 데이터를 중 가수 목소리 쪽 PCM을 AudioTrack에 write 하지 않으면, 가수 목소리가 안 나옵니다.

3. 사용자의 목소리를 녹음

= > AudioRecoder를 통해 사용자 목소리(MIC정보)를 PCM 데이터로 구할 수 있습니다.

4.  마지막에는 모든 소리를 합침

=> 합치기 위해선 2,3번으로 구한 PCM 데이터의 SamplingRate, Channel count 를 동일하게 맞춰 주셔야 합니다. 

https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/audio/ResamplingAudioProcessor.java

https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/audio/ChannelMappingAudioProcessor.java

를 참조하셔서 각 PCM 데이터  SamplingRate, Channel count  를 동일하게 맞춘 후 더해 주시면 merge가 됩니다.

(https://stackoverflow.com/questions/6161231/merging-pcm-audio-files)

5. 하나의 mp3 파일로 만들어야합니다.

=> 4번을 통해 구한 pcm 파일을 Mp3 로 생성해야 하는데, 불행히도 안드로이드 자체 API로는 생성이 안되는듯 합니다.

(관련 라이센스가 작년에서야 만료 되었으니.. 좀 지나면 지원가능할 수도 있지만.. 현재는 안됩니다.)

https://stackoverflow.com/questions/3641920/how-to-encode-a-wav-to-a-mp3-on-a-android-device

를 참조해서 mp3를 만드셔야 할 듯 합니다.

(AAC는 MediaRecoder 에서 지원하니 AAC로 저장하는 것도 방법입니다)

익명사용자 님이 2018년 6월 25일 답변
준버기님이 2018년 6월 25일 채택됨
감사합니다. 혹시 가수 목소리 중지를 여러번 해도 구현가능 한가요? 사용자가 녹음하고 싶은 구간마다 중지를 하고, 사용자 목소리를 녹음하고 합치는게 가능할까요?
가능합니다.
앞서 설명 드렸듯이  가수 목소리에서 추출한 PCM을 AudioTrack에 적어주면, 소리가 나는거구, 안 적어 주면, 소리가 나지 않습니다.
마찬가지로, MIC 로 구한 PCM과 가수 목소리를 merge하지 않고 MIC로 구한 PCM 데이터만 5번을 통해 파일로 생성해 주면 MIC만 녹음될 겁니다.
답변 감사합니다. 음질에 관한 이슈가 있어서 ffmpeg을 사용하는 것 같습니다. ㅠㅠ
...