내가 진행 중인 프로젝트는 stt를 이용한 일기앱이다. 당연히 주요 기능은 STT기능이다. STT가 요즘 한장인 기술이고 최근에 멜론, 카카오톡에도 적용된것을 보니 더욱 할맛이 난다.
먼저 STT 오픈소스를 어디껄로 할지를 결정할 때 네이버 API를 사용하기로 결정했다. 이유는
- 같은 팀 내에 네이버 STT API를 사용해본 경험자가 있다!
- 한국어 위주이기 때문에 구글보다는 네이버가 더 잘되다는 평이 많았다.
- 네이버에 관심도 많고 네이버 API는 한번도 사용해보지 않아 사용해보고 싶었다.
네이버 API 사용은 NAVER DEVELOPER에 가면 자세하게 나와있다.(밑에 주소) ++참고로 STT가 아닌 Clova Speech Recognition으로 나와있다.++ https://developers.naver.com/docs/clova/api/
STT를 사용하는데는 어려움이 크게 없었다. 하지만 일기앱 특성상 일시정지 기능이 있어야 하고 녹음이 저장되어야 한다는 기능이 합쳐져야 하는 상황에서 큰 어려움이 있었다.
1. 현재 STT API는 저장은 되지만 PCM파일로 저장된다.(재생이 안됨)
2. 안드로이드에는 녹음 일시정지 기능이 없다(알아서 만들어야 함)
3. 네이버 STT API는 최대 1분, 말을 하지 않으면 10초 후에 저절로 꺼진다..
3번은 내가 해결하 수 있는 부분이 아니므로 패스했다(사업성이 있고 결제를 한다면 네이버에서 변경해준다)
2번은 녹음의 일시정지 기능을 구현했다.
- 녹음을 하고 일시정지를 눌렀으면 녹음된 파일이 생성된다.
- 이것을 리스트에 저장시키고 마지막에 완료가 되면 생성된 파일들을 묶어 합쳐서 하나의 파일로 만든다.
- 분할된 파일들은 삭제해준다.
1번이 가장 어려웠다.
- PCM 파일 저장되는 위치를 찾는다.(NAVER RECOGNITION 폴더에 저장되어있을 것임)
- PCM 파일을 인코딩한다 PCMEncoder 사용(내가 쓴 encoder는 최소 API level 18로 기억한다)
- 비트레이트, 주파수 다 알맞게 수정해야 한다. 나는 (48000, 16000, 1)로 했다.
- PCM파일 샘플링이 16K ? 8K로 되어있어서 알맞게 수정해야하는데 자세한건 구글링을…
- 2번과 합쳐서 일시정지 마다 pcm -> mp4로 변환하고 파일을 생성한다.
- 2번에과 동일하게 파일을 합쳐서 하나의 mp4파일로 만든다.
결과는 STT가 상당히 정확하다(단, 조용한 공간에서 해야함)
들은바로는 설정을 변경하면 더 정확한 결과가 나올 수 있다고 해커톤 당시 네이버 개발자님이 말하셨다는데
설정 어느곳인지를 모르겠다.. 네이버 개발 질문에도 해당 질문엔 답변이 없었다.
아마 현재는 5개만 추출해서 5개중 가장 비슷한 것을 추출하는데 갯수를 늘리는건가??
암튼 STT 적용은 성공적으로 했다.
추가로 해야할 것들.
- 녹음시 백그라운드에서 돌아가는 미디어 정지시키기
- DB 적용시키기
- 퍼미션 확인하기
해당 코드는 https://github.com/quarl894/Yapp_Dev 이 프로젝트에 있다.