Android- Audiorecord/Track 대신 MediareCord/MediaPlayer 로이 작업을 수행 할 수 있습니까?
-
19-09-2019 - |
문제
현재 AudioreCord를 사용하여 Android 장치의 마이크에서 오디오를 녹음 한 다음 Android 장치의 이어 피스를 재생하는 오디오 트랙으로 바로 파이프를 파이프합니다.
오디오 클래스가 아닌 미디어 클래스에서 사용할 수있는 AMR-NB 인코딩을 사용해야하므로 미디어 플레이어 및 MediareCorder 클래스를 사용하여 똑같이 할 수 있을지 궁금합니다.
MediareCorder와 MediaPlayer의 문제가 파일에 녹음 한 다음 해당 파일을 재생 해야하는 것 같습니다.
이것은 내가하고 싶은 일이 아닙니다. 어쨌든 미디어 클래스와 함께 마이크에서 이어 피스로 오디오 사운드를 스트리밍 할 수 있습니까?
오디오 클래스를 사용하는 내 코드는 아래에 있습니다. MediaPlayer 및 MediareCorder와 동일한 작업을 수행 할 수 있습니까?
public class Record extends Thread
{
static final int bufferSize = 200000;
final short[] buffer = new short[bufferSize];
short[] readBuffer = new short[bufferSize];
public void run() {
isRecording = true;
android.os.Process.setThreadPriority
(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize,
AudioTrack.MODE_STREAM);
Log.d("AUDIO", "sample rate = : " + arec.getSampleRate());
atrack.setPlaybackRate(11025);
byte[] buffer = new byte[buffersize];
arec.startRecording();
atrack.play();
while(isRecording) {
arec.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
}
}
}
해결책
아니요, 현재는 아닙니다. 잘 알려진 한계입니다 MediaPlayer
바이트 스트림 입력은 지원되지 않습니다. 여전히 파일 또는 URI 입력 소스가 필요합니다.
제휴하지 않습니다 StackOverflow