【发布时间】:2015-02-17 00:03:25
【问题描述】:
我尝试使用 AudioTrack.write() 来听到录制的声音但没有输出,所以我需要的目的是通过 AudioRecord 录制音频并通过 AudioTrack 播放而不将其保存在 sd 卡或内部存储中,所以任何帮助将不胜感激。
public class MainActivity extends Activity {
short[]buffer=new short[512];
AudioManager am = null;
AudioRecord record =null;
AudioTrack track =null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setVolumeControlStream(AudioManager.MODE_IN_COMMUNICATION);
init();
final Button jjbt1=(Button)findViewById(R.id.jt1);
final Button jjbt2=(Button)findViewById(R.id.jt2);
am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_COMMUNICATION);
record.startRecording();
track.play();
jjbt1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
for( int i=0 ; i<512 ; i++ ){
record.read(buffer, 0,512);
}
record.stop();
}
});
jjbt2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
try{
track.write(buffer, 0,buffer.length);
}catch(Exception de){Toast.makeText(getBaseContext(), de.getMessage().toString(), Toast.LENGTH_LONG).show();}
}
});
}
private void init() {
int min = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
record = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 8000, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, min);
int maxJitter = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
track = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, 8000, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, maxJitter, AudioTrack.MODE_STREAM);
}
}
【问题讨论】:
标签: android