android 使用 audiorecord 和 audiotrack 实现实时录音播放
生活随笔
收集整理的這篇文章主要介紹了
android 使用 audiorecord 和 audiotrack 实现实时录音播放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本思路就是用 audiorecord不斷得到音頻數據,然后使用audiotrack 播放
//得到音頻
package com.ysg.audiotest;import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream;import android.content.Context; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder;/** To getaudio or play audio* */ public class mAudio {private AudioRecord audioRecord;private Context context;private boolean isRecording = false ;private PipedOutputStream outstream ;//利用管道傳輸數據public mAudio(Context context , PipedInputStream instream) throws IOException {this.context = context;//初始化管道流 用于向外傳輸數據outstream = new PipedOutputStream();outstream.connect(instream);}public void StartAudioData(){//得到錄音數據int frequency = 11025;@SuppressWarnings("deprecation")int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_STEREO;int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;int buffersize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, buffersize);byte[]buffer = new byte[buffersize];audioRecord.startRecording();//開始錄音isRecording = true;int bufferReadSize = 1024; while (isRecording){audioRecord.read(buffer, 0, bufferReadSize);try {outstream.write(buffer, 0, bufferReadSize);} catch (IOException e) {e.printStackTrace();}}}public void stopRecord(){//停止錄音isRecording = false;audioRecord.stop();try {outstream.close();} catch (IOException e) {e.printStackTrace();}}}
activity
package com.ysg.audiotest;import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream;import android.app.Activity; import android.os.Bundle; import android.view.View;public class MainActivity extends Activity {PipedInputStream in;boolean isRrcord;mAudio mm ;mAudioPlayer m;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);isRrcord = false;}public void btnclick(View v){if (isRrcord){isRrcord = false;mm.stopRecord();m.stopPlay();}else{isRrcord = true;startRecord();}}private void startRecord(){in = new PipedInputStream();new Thread(new Runnable() {@Overridepublic void run() {try {mm = new mAudio(MainActivity.this, in);mm.StartAudioData();} catch (IOException e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {@Overridepublic void run() {byte[] buffer = new byte[1024];PipedOutputStream pout = new PipedOutputStream();m = new mAudioPlayer();try {m.setOutputStream(pout);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubm.startPlayAudio();}}).start();} catch (IOException e1) {e1.printStackTrace();}int size = 0 ;try {while (true){while (in.available()>0){size = in.read(buffer);pout.write(buffer, 0, size);}}} catch (IOException e) {e.printStackTrace();}}}).start();} }再者注意添加權限:
<uses-permission?
? ?android:name="android.permission.RECORD_AUDIO"
? ?/>
總結
以上是生活随笔為你收集整理的android 使用 audiorecord 和 audiotrack 实现实时录音播放的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最经典的数据库面试题之二
- 下一篇: python基础语法+爬虫精进.pdf_