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

스피커가 마이크를 간섭하는것 같습니다..

0 추천
영상통화 앱 만들고 있습니다.

 

음성에 대한 부분만 말씀 드리면

현재 테스트로

1. 마이크로 들어오는 음성 데이터를 실시간으로 서버로 보낸다.

2. 서버에서 에코처럼 들어온 음성 데이터를 다시 되돌려 보낸다.

3. 서버로부터 받은 음성 데이터를 스피커로 출력한다.

 

테스트 결과

목소리도 전달 되지만

엄청난 잡음이 (삐용 삐용 삐응 찌잉 찌잉 뭐 이런...) 같이 출력 됩니다.

 

이어폰이나 통화용 스피커로 출력 할 땐 위 같은 문제가 나타나지 않는 걸로 보아

근접해 있는 스피커와 마이크가 간섭되어 잡음이 생성되는것 같습니다.

 

어쩔 수 없는거라면 할 수 없지만

한뼘통화 같은 경우도 근접해 있는 스피커와 마이크를 사용하는데 잡음이 없으니

어떤 방법이 있는 건지 궁굼합니다.

 

간섭이 아닌 경우일 수도 있겠단 생각도 드는데

처음에 AudioRecord 객체로 byte 버퍼에 데이터를 받는데

0, 1, 0, 1, 0, 1, 0, 1 이런식으로 한두번 들어 오더니

데이터가 점점 커졌습니다.

만약 간섭이 아니라면 어떤 문제 때문일까요..

 

테스트 기종은 4.1버젼 노트1이구요.

 

셋팅은

private final int FREQUENCY = 8000;
 private final int CHANNEL = AudioFormat.CHANNEL_CONFIGURATION_MONO;
 private final int ENCODING = AudioFormat.ENCODING_PCM_16BIT;

 

이렇게 했습니다.
익명사용자 님이 2013년 8월 25일 질문

2개의 답변

0 추천
Elex (9,090 포인트) 님이 2013년 8월 25일 답변
NoiseSuppressor는 api level이 16인데 저는 min level 9로 작업을 해야 해서 사용이 안되네요. ㅠㅠ 말하면 목소리가 에코처럼 반복으로 들리는걸로 보아 간섭이 맞는것 같은데 방법이 없을까요..
일단은 api레벨을 16으로 한 다음 NoiseSuppressor를 적용해서 테스트해 보고, 이 때 잡음이 확연히 줄어든다면 무슨 수를 써서라도 노이즈 필터를 구현하셔야겠죠.
오픈소스 라이브러리가 있는진 모르겠는데, 예전에 제가 찾아봤을 땐 딱히 없어서 푸리에 변환 소스로 이래저래 해보다가 그만둔...ㅠ
0 추천
NoiseSuppressor의 경우 API레벨 16의 단말이더라도 구글에서 만든 넥서스 시리즈가 아니면 대부분의 단말이 지원하지 않습니다.
(support check시 false가 나오고 무시하고 객체 생성을 할 경우  null이 반환됩니다.)
 
 이어폰으로 할 땐 괜찮다고 하는게 에코 때문에 그럴겁니다. 
안드로이드에서 에코 캔슬러 클래스도 지원은하긴 한데 NoiseSuppressor 같이 일부 넥서스 단말을 제외하고는
거의 지원하는 단말이  없으니. 구글링을 통해 에코 캔슬러를 찾아 적용하셔야 할 겁니다.
 
저도 비슷한 문제로 오픈소스를 찾아 적용을 시도 해봤는데.
제가 실력이 부족해서인지.. 적용이 어려워 붙이지 못하고 포기했었습니다.
혹시 붙이시면, 저도 가르쳐주시면 감사하겠습니다.
사악미소 (65,330 포인트) 님이 2013년 8월 26일 답변
...