본문 바로가기
프로그래밍/App 개발

[android] 안드로이드 wav 레코딩 (20.06.28 깨달은점)

by 엽기토기 2020. 8. 6.
반응형

https://github.com/Smart-Mobil/Smart-Mobil/blob/master/android_app/app/src/main/java/com/example/mymobil/record/RecordFragment.java

 

Smart-Mobil/Smart-Mobil

:baby: Smart Mobil. Contribute to Smart-Mobil/Smart-Mobil development by creating an account on GitHub.

github.com

동화책 읽어주기 기능을 구현 중이었다.

 

* 로직

  1. 안드로이드 앱에서 목소리를 녹음
  1. 녹음한 목록 출력
  1. 목록 터치 시 node.js 서버로 업로드
  1. 업로드와 동시에 'voicestart' post 전송
  1. 라즈베리파이 스피커로 재생

 

* 에러

2 ⇒

  • 녹음하자마자 리스트뷰 갱신이 안됨 → 프래그먼트 갱신으로 간단하게 해결

public void refresh() { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.detach(this).attach(this).commit(); }

3 ⇒

  • httpUrlConnection 으로 해결

5 ⇒

  • 와 이게 제일 문제였다. 업로드까지 잘되는데 서버에서 재생이 안되네???ㅋㅋㅋㅋ 

    정확히 8시간만에 답을 찾음. 안드로이드에서 녹음을 'MediaRecorder' API를 사용해서 하는데, 이거는 OutputFormat으로 AAC_ADTS, AMR_NB, AMR_WB, MPEG_2_TS, MPEG_4, OGG, RAW_AMR, THREE_GPP, WEBM 포맷들로만 저장이 된다.

    첨에 걍 MPEG_4 또는 AAC_ADTS로 포맷을 지정하고, 확장자 파일명만 .mp3로 저장했음. 물론 PC는 AAC_ADTS 및 등등 포맷들을 웬만하면 지원해주니까 바로 재생이 됐다. 근데 웹은 지원을 안함!!!!!!!!!!!!!!!!!!!!!  ← 이걸 구글링을 통해 찾음.

    하 근데 또 안드로이드는 공식적으로 녹음 mp3 저장을 지원을 안하네ㅋㅋㅋㅋ ndk 포함시켜서 lame 라이브러리(media muxer)를 사용해야되는데 너무 복잡.


     자 여기서 두 가지 방법을 생각했다.

    (1) 웹에서 지원하는 js 라이브러리(howler 등)를 쓰자. ^^ (내가 안해도 됨ㅋㅋ)
    (2) 안드로이드에서 웹에서 지원하는 포맷으로 저장을 하자. (mp3, wav)

    근데 mp3는 너무 어려웠다.
    허 !!!!!!!!!!! 근데 깃헙에 wav 레코딩을 라이브러리화 해놓은 아주 감사한 분을 찾음.
    바로바로~~~~~~~~~~~~~~~ OmRecorder!!
    https://github.com/kailash09dabhi/OmRecorder
 

kailash09dabhi/OmRecorder

A Simple Pcm / Wav audio recorder with nice api. https://play.google.com/store/apps/details?id=com.kingbull.omrecorder - kailash09dabhi/OmRecorder

github.com

  • 이걸로 wav파일로 저장해서 업로드 했더니!!!!!!!!!!!!!!!!!!!
     재생이 .............! 된다!!!!!!!!!! ㅠㅠㅠ

 




* 암튼 느낀점

- 협업과 소통의 중요성...

- 구글링 최고. 

- 솔루션에만 집중하다보면 억지스럽게 끼워맞추게 된다. 근본적인 원인을 찾아서 해결하는 것이 중요. 

- 내 머리로 코딩하는 것보다, 라이브러리 갖다 쓰는 것도 나쁘지 않다. 시간 절약은 덤.

반응형