android 麦克风录音输出
添加权限
<!-- AUX --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- write --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
一、录音(存文件)输出
1、录音至本地文件
import android.media.MediaRecorder;
import android.util.Log;import java.io.File;
import java.io.IOException;/*** @description* create by 2022/7/28 20:07* 录音*/
public class MicrophoneRecording {private static final String TAG = "MicrophoneRecording";private MediaRecorder mRecorder;private File audioFile;public void startRecording() {mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);try {audioFile = File.createTempFile("recording", ".amr");mRecorder.setOutputFile(audioFile.getAbsolutePath());mRecorder.prepare();Log.d(TAG, "startRecording");} catch (IOException e) {e.printStackTrace();}mRecorder.start();}public String getAudioFile() {return this.audioFile.getAbsolutePath();}public void stopRecording() {if (mRecorder != null) {mRecorder.stop();mRecorder.release();mRecorder = null;}}}
2、音源播放器
import android.media.MediaPlayer;
import android.util.Log;import java.io.IOException;/*** @description* create by 2022/7/28 20:09* 播放*/
public class AudioSourcePlay {private static final String TAG = "AudioSourcePlay";private MediaPlayer mPlayer;public void startPlaying(String fileName) {mPlayer = new MediaPlayer();try {mPlayer.setDataSource(fileName);mPlayer.prepare();mPlayer.start();Log.d(TAG, "startPlaying");} catch (IOException e) {e.printStackTrace();}}public void stopPlaying() {if (mPlayer != null) {mPlayer.release();mPlayer = null;}Log.d(TAG, "stopPlaying");}
}
3、调用
ok.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//开启录音startRecording();}});cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 停止录音stopRecording();}});mUpgrade.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 播放AudioSourcePlay();}});private void startRecording() {mMicrophoneRecording = new MicrophoneRecording();mMicrophoneRecording.startRecording();Log.d("ModuleService", "openMicrophone: ");}private void stopRecording(){mMicrophoneRecording.stopRecording();Log.d("ModuleService", "stopMicrophone: ");}private void AudioSourcePlay(){mAudioSourcePlay = new AudioSourcePlay();mAudioSourcePlay.startPlaying(mMicrophoneRecording.getAudioFile());Log.d("ModuleService", "playing: ");}@Overrideprotected void onDestroy() {super.onDestroy();if (mMicrophoneRecording != null) {stopRecording();mMicrophoneRecording = null;}if (mAudioSourcePlay != null){mAudioSourcePlay.stopPlaying();mAudioSourcePlay = null;}}
二、实时录音并播放
1、
// 线程处理数据流private class RecordThread extends Thread{static final int frequency = 44100;static final int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;@Overridepublic void run() {int recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding)*2;int plyBufSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding)*2;audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, recBufSize);audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, plyBufSize, AudioTrack.MODE_STREAM);byte[] recBuf = new byte[recBufSize];audioRecord.startRecording();audioTrack.play();while(true){int readLen = audioRecord.read(recBuf, 0, recBufSize);audioTrack.write(recBuf, 0, readLen);}}}
2、调用
private MicrophoneRecording mMicrophoneRecording;private AudioSourcePlay mAudioSourcePlay;private AudioRecord audioRecord;private AudioTrack audioTrack; mUpgrade.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 播放RecordThread recordThread = new RecordThread();recordThread.start();}});@Overrideprotected void onDestroy() {super.onDestroy();audioTrack.stop();audioRecord.stop();}
android 麦克风录音输出相关推荐
- Android 麦克风录音动画
Android 麦克风录音动画 源代码 RecordView.java R.drawable.voice_recording 源代码 RecordView.java import android.co ...
- Android麦克风录音的实现
最近公司有一个业务,就是通过IM发送音频,我用的是环信的第三方,自定义发送音频,写了一个录音的demo,录制完成之后发送. 这个Demo测试之后感觉还不错,分享一下. 一.添加权限: <uses ...
- android麦克风录音权限设置,小米9 SE怎么设置麦克风权限 小米9 SE打开录音权限的设置方法...
小米9 SE怎么设置麦克风权限?平时我们用小米9 se第一次打开软件时,会遇到要打开麦克风权限的提示,如果第一次拒绝了这个麦克风权限的话,后面要打开,就需要来进行设置一下了,今天新机汇小编为大家分享一 ...
- android按住录音按钮_Android实现录音方法(仿微信语音、麦克风录音、发送语音、解决5.0以上BUG)...
先给大家展示下效果图,如果大家感觉不错,请参考使用方法, 效果图如下所示: 使用方法: 录音工具类:AudioRecoderUtils.java,代码如下: public class AudioRec ...
- Android 录音实现方法、仿微信语音、麦克风录音、发送语音
效果图(注!由于使用的模拟器录制,所以图片中的录音时候话筒上下波动比较小,手机上正常!): 使用方法: 录音工具类:AudioRecoderUtils.java,代码如下: public class ...
- Android 录音实现方法、仿微信语音、麦克风录音、发送语音、解决5.0以上BUG
原文地址:https://blog.csdn.net/fan7983377/article/details/51750583 本文修改自:http://www.jianshu.com/p/06eca5 ...
- Android之录音--AudioRecord、MediaRecorder
Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...
- android java 录音放大_Android实现录音功能实现实例(MediaRecorder)
本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord, ...
- Android录音器实验报告,Android实现录音(MediaRecorder)
Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord,各有优劣. 1.MediaRecorder 已经集成了录音.编码.压缩等,支持少量的录音音频格式, ...
最新文章
- java web 默认页面配置文件_Tomcat中配置全局的错误页面(如404)+删除Tomcat中webapps目录下的自带项目,防止Tomcat默认文件泄露...
- leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)
- 常见的时间复杂度函数
- 《火球——UML大战需求分析》(第1章 大话UML)——1.5 小结和练习
- 自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串
- 一款简单易用的mp3录音软件
- sqlserver中创建包含事务的存储过程
- Cheatsheet: 2014 06.01 ~ 06.30
- java编程菜鸟入门02
- Maven系列(一):Maven简介
- iPhone唯一标识符
- python加法赋值运算符为_Python中什么是算术运算符、赋值运算符和复合运算符?...
- html倒计时代码执行操作,js实现网页倒计时、网站已运行时间功能的代码3例
- Dev中ChartControl——属性熟悉与简单应用
- Tomcat的实现原理
- 江苏科技大学计算机学院院长高尚,江苏科技大学计算机学院导师介绍:高尚
- 基础I/O【Linux】
- 区块链与大数据结合分析
- win10彻底关闭休眠状态(1909以上版本)
- 2020腾讯阅文集团-前端笔试题
热门文章
- 3D点云深度学习PointNet源码解析——pointnet_cls.py.py
- 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
- JFinal 极速开发框架--5.ActiveRecord
- arcsde mysql_ArcSDE空间数据库安装配置问题
- 机器学习中的概率模型
- 电子体温计方案温度传感器的解析
- 零基础学电路(一):白噪声电子催眠器电子温度计
- 通过抓包判断是否支持 802.11k and 11r
- python写一个简单的接口
- 重启网卡提示Bringing up interface eth0