Android MediaRecorder与AudioRecord音频录制
来源:互联网 发布:数据可视化工作 编辑:程序博客网 时间:2024/05/22 08:10
Android 音频录制
MediaRecorder
AudioRecord
- MediaRecorder
需要的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
/** * 开始录音 */ class startRecordListener implements OnClickListener { @Override public void onClick(View v) { try { MediaRecorder mRecorder = new MediaRecorder(); // 设置声音源为麦克风 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置输出格式为3gp mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 设置输出文件路径,mFileName为录音音频输出路径 mRecorder.setOutputFile(mFileName); // 设置声音解码AMR_NB mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 媒体录制器准备 mRecorder.prepare(); // 开始录制 mRecorder.start(); } catch (IOException e) { } } } /** * 停止录音 */ class stopRecordListener implements OnClickListener { @Override public void onClick(View v) { mRecorder.stop(); mRecorder.release(); mRecorder = null; } }
2.AudioRecord
AudioRecord录音步骤:1. 创建一个数据流。2. 构造一个AudioRecord对象,其中需要的最小录音缓存buffer大小可以通过getMinBufferSize方法得到。如果buffer容量过小,将导致对象构造的失败。3. 初始化一个buffer,该buffer大于等于AudioRecord对象用于写声音数据的buffer大小。4. 开始录音。5. 从AudioRecord中读取声音数据到初始化buffer,将buffer中数据导入数据流。6. 停止录音。7. 关闭数据流。
录音代码:
/** * 录音,需要在新的线程中执行,防止主线程阻塞 */ private void record() { int frequency = 11025; int channelConfiguration = AudioFormat.CHANNEL_IN_STEREO; int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; try { // 创建一个数据输入流往文件里写数据 OutputStream os = new FileOutputStream(mFileName); BufferedOutputStream bos = new BufferedOutputStream(os); DataOutputStream dos = new DataOutputStream(bos); // 创建一个AudioRecord对象来录音 int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); AudioRecord mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize); short[] buffer = new short[bufferSize]; // 开始录音 mAudioRecord.startRecording(); isRecording = true; Log.e(TAG, "record: 录音开始"); while (isRecording) { int bufferReadResult = mAudioRecord.read(buffer, 0, bufferSize); for (int i = 0; i < bufferReadResult; i++) { dos.writeShort(buffer[i]); Log.e(TAG, "record: 录音中..."); } } } catch (Exception e) { e.printStackTrace(); } } /** * 停止录音 */ class stopRecordListener implements OnClickListener { @Override public void onClick(View v) { mAudioRecord.stop(); Log.e(TAG, "record: 录音结束"); } }
播放代码:
/** * 播放录音 */ class startPlayListener implements OnClickListener { @Override public void onClick(View v) { try { // Get the file we want to playback. File file = new File(mFileName); // Get the length of the audio stored in the file (16 bit so 2 bytes per short) // and create a short array to store the recorded audio. int musicLength = (int) (file.length() / 2); short[] music = new short[musicLength]; // Create a DataInputStream to read the audio data back from the saved file InputStream is = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(is); DataInputStream dis = new DataInputStream(bis); // Read the file into the music array. int i = 0; while (dis.available() > 0) { music[i++] = dis.readShort(); } // close the input streams dis.close(); // Create a new AudioTrack object using the same parameters as the AudioRecord // object used to create the file. AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, musicLength * 2, AudioTrack.MODE_STREAM); Log.e(TAG, "onClick: 开始播放"); // Start playback audioTrack.play(); // Write the music buffer to the AudioTrack object audioTrack.write(music, 0, musicLength); Log.e(TAG, "onClick: 播放结束"); audioTrack.stop(); } catch (Exception e) { e.printStackTrace(); } } }
代码下载
阅读全文
0 0
- Android MediaRecorder与AudioRecord音频录制
- Android MediaRecorder录制音频
- Android MediaRecorder录制音频
- android MediaRecorder录制音频
- android MediaRecorder 与 AudioRecord 差异
- Android之MediaRecorder录制音频
- Android:使用MediaRecorder录制音频
- Android播放器MediaPlayer与MediaRecorder:录制音频并播放
- Android音频录制--AudioRecord
- Android AudioRecord录制wav格式的音频
- Android音频开发之使用AudioRecord录制
- android AudioRecord 音频录制 噪音消除
- Android Multimedia实战(六)音频 MediaRecorder和AudioRecord录音与MediaPlayer和AudioTrack播放
- AudioRecord 录制音频
- 使用AudioRecord录制音频
- android MediaRecorder 录制音频、视频代码片段
- Android之多媒体--使用MediaRecorder录制音频
- Android多媒体之音频、视频录制MediaRecorder
- Java 常用加密算法(一)---单向加密算法(MD5/SHA)
- Java 常用加密算法(二)---对称加密(DES/3DES(TripleDES)/AES)
- Java 线程池(Executor)
- Java NIO学习使用
- Java Mina-2.0.16框架学习使用
- Android MediaRecorder与AudioRecord音频录制
- Java 泛型
- Java Annotation注解
- Java ThreadLocal使用
- Android OpenGL 使用
- Java Reflect(反射)机制详解
- Android Lottie使用
- Android 解决 Toolbar 的 Menu 图标无法显示
- Android GreenDao使用