핀수로그
  • [NCP CSR] 기능 구현을 하며 만난 에러와 대응방안
    2023년 11월 14일 21시 13분 46초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    음성인식 기능 구현을 위해 네이버 클라우드 CSR(CLOVA Speech Recognition) SDK 를 사용하고 있는데,
    기능을 구현하며 만난 에러와 그에 대한 대응방안에 대해 정리하려고 한다.
    (검색을 해봐도 나오지 않아 남긴다..정확한 방법이 아닐 수 있다.)

    음성인식 기능 사용중 onPause() 호출시 에러

    음성인식 중에 홈버튼 또는 최근작업 버튼을 눌러 앱이 pause - stop 상태였다 다시 돌아오면
    앱이 아예 재시작이 돼버리는 현상을 발견했다. (process가 아예 다시 시작됨)
    음성 관련 예외는 제대로 로그도 남지 않아 디버깅이 힘들어 아주 난감하다.
     
    CSR의 가이드대로 onStart()에서 음성인식 관련 자원을 초기화하고,
    onPause()에서 음성인식 즉, 음성 녹음이 진행중이면 멈추고,
    onStop()에서 음성인식 관련 자원을 해제해주고 있었다.
     
    모두 CSR의 권장사항이라 따르고 있었는데 문득 그런 생각이 들었다.
    음성을 수집하는 도중 화면을 벗어났고(onPause, onStop),
    화면이 다시 resume 될 때의 앱의 상태가 음성 녹음을 위한 화면(CSR의 상태를 받아 화면에 출력하는 형태)이었는데,
    화면을 나타내기 위한 CSR의 자원이 모두 해제되어 버려 예외를 일으키는 것이 아닐까 하는...
    (위에서 말했듯 정보가 없어 디버깅하기가 너무 힘들다...이거 왜이러는걸까요? 저만 모르는걸까요?)
     
    그래서 onStart(), onPause() 이 호출될 때 수행해야하는 동작은 그대로 수행하고,
    자원은 onDestroy() 에서 해제하도록 해주었다.
    그랬더니 위와 같은 현상이 발생하지 않는 것을 확인했다.
    이와 관련한 문의를 NCP 측에 넣어둔 상태라, 답변이 오는 것을 보고 내용을 수정하면 될 것으로 보인다.
    release는 onStop에서 일어나는 것이 맞다......

    TTS 출력 중 음성인식 기능 사용 시도 시 에러

    TTS(TextToSpeech)를 통해 음성 안내를 하는 도중 사용자가 음성인식 기능을 사용하려고 하면 간헐적으로 에러가 발생했다.
    해당 에러도 위와 같이 로그도 뭣도 남지 않아 골머리를 싸매며 재현 해내는 데에만 온 힘을 쏟았다.
    그 결과 제목과 같이 TTS가 출력 중에 음성인식 기능을 사용하려고 하는 경우에 에러가 발생하는 것을 알 수 있었고
    음성인식을 사용하려고 할 때에 TTS가 나오고 있으면 TTS 출력을 멈추고 사용자의 음성을 수집하도록 처리를 해두었다.
    이와 관련해 NCP 측에 문의하니, TTS 또는 음악 등이 재생되고 있는 동안에는 오디오 취득이 안되는 경우가 발생할 수 있기 때문에, 구현상 예외처리가 필요하다고 한다. 
     

     

    728x90
    반응형
    댓글