有人知道是否需要将audiorecord和audiotrack以特殊方式/类型的线程,可运行,服务等分开,以便它能够一起工作?现在我可以开始录音,然后听音乐也没有问题。
但是,如果我在录音时开始和停止音频录音,那么音频录音开始输出0就像它被静音一样。 (但它没有静音或停止)
如果我开始录音电话然后是录音带,那么录音带也会被静音#34;
同样奇怪的是,当我拔下并插上我的有线耳机时,它将再次开始录制/输出录音而不是0(这让我觉得我的手机联想B和联想C2太便宜了(电路/硬件问题)或构建问题)但我不知道。
任何人都突然听到这个问题并且#34; audiorecord或audiorecord响应拔出/插入有线头设备而没有应用任何设置/方法?
代码更新
class myRecordAndPlayer(){
public void initiateRecorder() {
if(audio.getMode()!=AudioManager.MODE_IN_CALL) {
audio.setMode(AudioManager.MODE_IN_CALL);
//audio.setSpeakerphoneOn(false); for mode in com (mode in com produces more echo/crosstalk)
}
rec = true;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
AudioRecord audioRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT) * 10);
try {
audioRecorder.startRecording();
while (rec) {
bytes_read = audioRecorder.read(buf_audio, 0, buf_audio_len);
public void initiatePlayer() {
if(!play) {
play = true;
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
Thread receiveThread = new Thread(new Runnable() {
@Override
public void run() {
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, BUF_SIZE, AudioTrack.MODE_STREAM);
track.play();
try {
while(play) {
track.write(bufToPlay, 0, bufToPlay.length);
答案 0 :(得分:0)
未经测试。
private Thread audioRecordThread
private AudioRecord audioRecorder;
private AudioTrack audioTrack;
public void initialize() {
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, BUF_SIZE, AudioTrack.MODE_STREAM);
audioRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT) * 10);
audioRecordThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToAudioTrack();
}
});
}
public void start() {
audioTrack.play();
audioRecorder.startRecording();
audioRecordThread.start();
}
private void writeAudioDataToAudioTrack() {
while(AudioRecord.RECORDSTATE_RECORDING == audioRecord.getRecordingState()) {
audioTrack.write(bufToPlay, 0, bufToPlay.length);
}
}