[android] 안드로이드 Audio 입력

안드로이드 앱을 개발할 때 오디오 입력을 다루는 것은 중요한 과제 중 하나입니다. 사용자가 음성 메시지를 녹음하거나 음성 명령을 감지하는 기능을 구현해야 할 수도 있습니다. 이 블로그 게시물에서는 안드로이드 앱에서 오디오 입력을 다루는 방법에 대해 알아봅니다.

마이크 액세스 권한 획득

안드로이드 앱이 마이크에 접근하려면 먼저 해당 권한을 획득해야 합니다. AndroidManifest.xml 파일에 다음과 같이 마이크 액세스 권한을 추가합니다.

<uses-permission android:name="android.permission.RECORD_AUDIO" />

오디오 레코딩

안드로이드에서는 MediaRecorder 클래스를 사용하여 오디오를 녹음할 수 있습니다. 아래는 간단한 오디오 레코딩의 예시 코드입니다.

import android.media.MediaRecorder;
import android.os.Environment;

public class AudioRecorder {
    private MediaRecorder mediaRecorder;
    private String outputFile;

    public void startRecording() {
        outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        mediaRecorder.setOutputFile(outputFile);

        try {
            mediaRecorder.prepare();
            mediaRecorder.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void stopRecording() {
        mediaRecorder.stop();
        mediaRecorder.release();
        mediaRecorder = null;
    }
}

오디오 스트림 처리

앱이 오디오 스트림을 실시간으로 처리해야 하는 경우 AudioRecord 클래스를 사용할 수 있습니다. 아래는 오디오 스트림을 처리하는 간단한 예시 코드입니다.

import android.media.AudioRecord;
import android.media.AudioFormat;
import android.media.MediaRecorder;

public class AudioStreamer {
    private AudioRecord audioRecord;

    public void startStreaming() {
        int bufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
        short[] audioData = new short[bufferSize];

        audioRecord.startRecording();

        while (shouldContinueStreaming) {
            audioRecord.read(audioData, 0, bufferSize);
            // 오디오 데이터 처리 로직을 구현
        }

        audioRecord.stop();
        audioRecord.release();
        audioRecord = null;
    }
}

결론

안드로이드 앱에서 오디오를 입력으로 다루는 것은 다양한 응용 프로그램에 필요한 중요한 기능입니다. 위에서 언급한 방법을 활용하여 안드로이드 앱에서 오디오 입력을 효과적으로 다룰 수 있습니다.