안녕하세요 아즈라엘 입니다. 


이번에 AudioRecord 를 통해서 음성을 녹음을 하고 음성이 어느정도 되면

자동으로 AudioTrack 을 통해서 사운드를 출력합니다.


쉽게 말하면 Talking Tom 과 같이 말을 하면 알아서 들어먹고 같은 말을 하는거죠..

음원을 조금 빠르게 해서 변조도 합니다...


문제는 사람이 말하는게 아니라 디바이스에서 나오는 소리도 마이크로 다시 들어가서

그걸 녹음하니.. 원하지 않는 동작을 하게 됩니다.


-- 소스 내용 --

dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(recordingFile))));

int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);

audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);

while (isRecording) {

if (isPlaying) {

continue;

}


short[] buffer = new short[bufferSize];

audioRecord.startRecording();

int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);

for (int i = 0; i < bufferReadResult; i++) {

if (recordingEnable) {

dos.writeShort(buffer[i]);

}


if (buffer[i] > 0x2FF0) {

recordingEnable = true;

}

}

}


대충 이렇게 해서 어느정도 음성체크를 합니다 근데 정확하게 말하자면 음성이라기 보단 마이크로 들어온 데쉬벨 크기정도라

생각하면 되겠네요.. 그냥 잡음의 크기가 얼마나?에 따라 반응하게 만든것입니다만..


혹시 마이크 보이스 필터링 할 수 있는 방법은 어떻게 해야 할까요?

아니면 디바이스에서 마이크로 들어오는 소리를 어떻게 막을까요? (이게 더 어려워 보입니다만..)


점점 일반 SDK  영역을 벗어나야 하는가? 라는 생각이 드는군요

TalkingTom 이 왜 FFMpeg 와 SoundTouch 를 사용했는지 이해가 가기도 하고..

단지 멀티플렛폼 지원때문에 한것이라 생각했는데 ... 기능때문에 한거 같기도 하네요..

윽...ㅠㅠ