안녕하세요 아즈라엘 입니다.
이번에 계속 비슷한 질문을 하고 있는데 그만큼 잘 안되는것 때문에 미치겠네요 ^^
일단 마이크에서 음성을 녹음해서 약간 빠르게 출력하여 변조하는데는 문제 없이 되었습니다만..
이걸 음성을 자동을 읽어 들여서 자동으로 출력하려 하는데
한개의 쓰레드에서 파일을 읽고, 쓰고, 지우고 음성 크기체크까지 하니..
제대로 읽어들이지를 못하고 끊기듯이 읽어들이는 문제가 발생되네요..
아무래도 사람이 말할때 제댜로 다 읽어 들이지 못하는 문제일거 같은데...정확하지는 않습니다.ㅋ
그래서 체크 부분과 파일을 읽어들이는 부분을 나누려고 하고 있습니다만..
여러가지 문제로 자알~~ 안되고 있군요..ㅠㅠ
버튼을 눌러서 음성을 녹음하는게 아닌 스레드상황에서 음성을 체크하여 필요할때만
음성을 녹음하려는데 어떤 방법이 제일 좋을까요?
답변 감사합니다.
개발일정에 맞춰 일할려다보니.. ndk영역에서 하는건 무리일거 같아서 sdk 영역에서 해결하려고 하고 있습니다.
일단 Thread 한개로 하였고 handler 를 적절하게 사용해서 싱크를 맞추고 있습니다.
Main Thread 에서 Handler를 완벽하게 떨어뜨리기 위해서 Looper도 따로 관리 하고 있습니다.
버퍼스트림을 열고 닫을때 의외로 시간소요가 되는걸 확인 하여 이부분을 타이트 하게 관리하고 있고..
수만은 exception 과 if 문으로 비동기에서도 안죽게 만들려고 열심히 때려 넣은 결과...
그럭저럭 굴러는가는데.. Mic에서 멀어지면 약간의 에코가 들어가고 ..
오디오 출력의 마지막에서 끊기는듯한 현상이 발견되어 이부분 잡고 있는데..
아무래도 입력 주파수를 높여서 Hz 로 해결하려고 하고 있는데.. 버퍼에 저장할 용량이 늘어나게 되어
음질은 좋아지나.. 버퍼에서 처리해야 하는 data 양이 늘어나는 결과가 나타날거 같네요..
이래저래.. 문제는 계속 발생되고 있습니다. ^^
소스 몇줄때문에 많이 개 고생하고 있네요..




1. 소리를 읽을 순환 버퍼를 10개정도 만든다.
2. Thread A 에서는 소리를 읽어서 버퍼에 넣고, 새 자료가 생겼음을 체크.
3. Thread B 에서는 버퍼 검사하다가 새로운 자료가 생겼으면 처리, 처리완료후 체크 해제.
그런데 말씀하신 내용으로 봐선
Java 로 처리하면 아무래도 속도 때문에 버퍼에 처리되지 못한 자료가 누적될듯 합니다.
NDK 로 처리하면 경우에 따라서는 10배도 빨라집니다.