1
我想录制使用AudioRecord类的语音,并使用AudioTrack类将 的读取字节写入扬声器。我能够听到来自扬声器的声音 ,但是声音非常低,并且伴随录制的声音产生了很多噪音。记录的声音非常非常低,大量的噪音记录在Android上
任何解决方案来解决这个问题,以减少噪音和大声的 真实的声音。
我使用下面的代码是:
package com.my.mic.record;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.util.Log;
public class Record extends Thread
{
int numCrossing,p,numSamples,af;
static final int bufferSize = 200000;
short[] buffer = new short[bufferSize];
short[] readBuffer = new short[bufferSize];
boolean isRecording;
AudioManager am;
public AudioRecord arec;
public AudioTrack atrack;
private int sampleRate = 8000;
public void run() {
isRecording = true;
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int buffersize =
AudioRecord.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
arec = new
AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,
buffersize);
//buffersize = arec.getMinBufferSize(arec.getSampleRate(),
arec.getChannelConfiguration(), arec.getAudioFormat());
atrack = new
AudioTrack(AudioManager.STREAM_MUSIC,arec.getSampleRate(),arec.getChannelConfiguration(),arec.getAudioFormat(),
buffersize,AudioTrack.MODE_STREAM);
am.setRouting(AudioManager.MODE_NORMAL,AudioManager.ROUTE_EARPIECE,
AudioManager.ROUTE_ALL);
//am.setMode(AudioManager.MODE_NORMAL);
Log.d("SPEAKERPHONE", "Is speakerphone on? : " +
am.isSpeakerphoneOn());
atrack.setPlaybackRate(sampleRate);
byte[] buffer = new byte[buffersize];
arec.startRecording();
atrack.play();
//atrack.setStereoVolume(atrack.getMaxVolume(),
atrack.getMaxVolume());
final float frequency = sampleRate;
float increment = (float)((2*Math.PI) * frequency/44100); //
angular increment for each sample
float angle = 0;
//AndroidAudioDevice device = new AndroidAudioDevice();
while(isRecording) {
try {
arec.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
} catch (Exception e) {
Log.d("Record", ""+e);
}
}
arec.stop();
atrack.stop();
//device.releaseTrack();
isRecording = false;
}
public boolean isRecording() {
return isRecording;
}
public void setRecording(boolean isRecording) {
this.isRecording = isRecording;
}
public AudioManager getAm() {
return am;
}
public void setAm(AudioManager am) {
this.am = am;
}
public void stopRecording(){
arec.stop();
arec.release();
atrack.stop();
atrack.release();
arec=null;
atrack=null;
setRecording(false);
this.stop();
}
}
嗨我面临同样的问题,请让我知道你有任何解决办法来处理这种情况? – aftab