日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 使用 audiorecord 和 audiotrack 实现实时录音播放

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 使用 audiorecord 和 audiotrack 实现实时录音播放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基本思路就是用 audiorecord不斷得到音頻數(shù)據(jù),然后使用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 ;//利用管道傳輸數(shù)據(jù)public mAudio(Context context , PipedInputStream instream) throws IOException {this.context = context;//初始化管道流 用于向外傳輸數(shù)據(jù)outstream = new PipedOutputStream();outstream.connect(instream);}public void StartAudioData(){//得到錄音數(shù)據(jù)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();}}}


播放音頻

package com.ysg.audiotest;import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream;import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack;public class mAudioPlayer {private PipedInputStream instream;private boolean isPlaying ;private AudioTrack audioplayer;private byte[] buffer;public mAudioPlayer() {isPlaying = false;instream = null;//初始化播音類@SuppressWarnings("deprecation")int bufsize = AudioTrack.getMinBufferSize(11025, AudioFormat.CHANNEL_CONFIGURATION_STEREO,AudioFormat.ENCODING_PCM_16BIT);audioplayer = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufsize,AudioTrack.MODE_STREAM);}//設置管道流,用于接受音頻數(shù)據(jù)public void setOutputStream(PipedOutputStream out) throws IOException{instream = new PipedInputStream(out);}public void startPlayAudio(){ //調用之前先調用setOutputStream 函數(shù)isPlaying = true;audioplayer.play();//開始接受數(shù)據(jù)流播放buffer = new byte[1024];while (instream!=null&&isPlaying){try {while (instream.available()>0){int size = instream.read(buffer);audioplayer.write(buffer, 0, size);//不斷播放數(shù)據(jù)}} catch (IOException e) {e.printStackTrace();}}}public void stopPlay(){//停止播放isPlaying = false ;try {instream.close();} catch (IOException e) {e.printStackTrace();}audioplayer.stop();}}

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 实现实时录音播放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美色图 | 神马老子午夜 | 久久黄色一级视频 | 国产熟妇一区二区三区四区 | 亚洲三级国产 | 欧美理论片在线观看 | 国产欧美日韩激情 | 国产曰肥老太婆无遮挡 | 激情狠狠 | 操她视频网站 | 神秘马戏团在线观看免费高清中文 | 欧美日韩一区二区三 | 超碰网站在线 | 夜夜爽爽 | 欧美一区精品 | 久久精品99国产 | 国产又爽又黄的激情精品视频 | 日韩欧美极品 | 我和公激情中文字幕 | 99re热视频 | 天天操夜夜操夜夜操 | 久久88| 国产精品久久久久久久久久免费看 | 高清久久久久久 | 青青草视频在线观看 | 国产乱淫av| 天堂√ | 国产精品欧美性爱 | 波多野结衣久久久久 | 国产精品久久久久无码av色戒 | 中文字幕在线三区 | 欧美a v在线 | av成人免费在线观看 | 亚洲av永久中文无码精品综合 | 亚洲av无码乱码国产精品久久 | 国产电影一区在线观看 | 国产在线视频网址 | 在线播放你懂的 | 成人av影院 | 成人精品亚洲 | 伊人黄色片| 久久久久久美女 | 亚洲免费小视频 | 国内偷拍第一页 | 欧美放荡性医生videos | 玉足调教丨vk24分钟 | 国产一区二区免费看 | 特大黑人娇小亚洲女mp4 | 性综艺节目av在线播放 | 天堂在线视频 | 大粗鳮巴久久久久久久久 | 免费看黄色一级视频 | 日产av在线 | 精品亚洲综合 | 国产精品久久久久一区二区 | 久久国产一区二区三区 | 尹人综合网 | 欧美理伦片在线播放 | 九九热视频这里只有精品 | 美女被男人插 | 欧美人xxxx | 毛片女人| 快色视频 | 羞羞的视频网站 | 黄在线免费 | 欧美成人一区二区 | 动漫美女无遮挡免费 | 91福利区 | 日本老太婆做爰视频 | 日韩aaaaa| 香港三级网站 | a√天堂网 | 在线国产一区二区 | 超碰99在线 | 成人片免费视频 | 91高跟黑色丝袜呻吟在线观看 | 精品黑人一区二区三区久久 | 岛国av免费在线 | 99久久精品国产毛片 | 国产美女免费观看 | 国产精品综合 | 日本黄网站在线观看 | 久久久久无码精品国产 | 麻豆免费在线观看 | 日韩欧美网 | 91一区二区视频 | 国产乱人乱精一区二视频国产精品 | 奇米色播| 黑人糟蹋人妻hd中文字幕 | av在线免费网址 | 69av在线视频 | 久久岛国 | 国产成人啪精品 | 日本免费在线视频 | 欧美精品xx | 国产精品性爱在线 | 天天操狠狠操夜夜操 | 一炮成瘾1v1高h | 成年人黄色小视频 |