再看Android SDK的录制声音的例子时看见文章比较短就翻译了一下,请大家提出宝贵意见:
Android SDK\docs\guide\topics\media\audio-capture.html 的翻译
音频录制
Android多媒体框架支持对常见音频的录制和编码,如果硬件支持,可以使用 MediaRecorder APIs 来非常方便的编写音频程序。
通过学习这篇文档,你可编写应用程序通过设备的麦克来录制声音,并且保持和播放声音。
注意:Android模拟器不支持录制声音的功能,必须有实际设备。
运行录制声音程序
音频的录制要比音频或者视频的播放要复杂,但是相对也比较简单,课遵循以下步骤:
1.创建MediaRecorder实例: android.media.MediaRecorder
2.设置音频来源:MediaRecorder.setAudioSource();
3.设置输出音频格式:MediaRecorder.setOutputFormat();
4.设置输出文件名:MediaRecorder.setOutputFile();
5.设置输出编码格式:MediaRecorder.setAudioEncorder();
6.在开始录制之前调用MediaRecorder.prepare();
7.开始录制声音,调用:MediaRecorder.start();
8.停止录制声音,调用:MediaRecorder.stop();
9.当录制完声音的时候,调用MediaRecorder.release()来释放占用的相关资源
例子:录制音频并播放
下面的例子展示了怎样录制并播放声音
这个APP需要添加两个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
/*
* The application needs to have the permission to write to external storage
* if the output file is written to the external storage, and also the
* permission to record audio. These permissions must be set in the
* application's AndroidManifest.xml file, with something like:
*
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
* <uses-permission android:name="android.permission.RECORD_AUDIO" />
*
*/
package com.android.audiorecordtest;
import android.app.Activity;
import android.widget.LinearLayout;
import android.os.Bundle;
import android.os.Environment;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Context;
import android.util.Log;
import android.media.MediaRecorder;
import android.media.MediaPlayer;
import java.io.IOException;
public classAudioRecordTestextendsActivity
{
private staticfinalString LOG_TAG="AudioRecordTest";
private staticString mFileName=null;
private RecordButton mRecordButton=null;
private MediaRecorder mRecorder=null;
private PlayButton mPlayButton=null;
private MediaPlayer mPlayer=null;
private void onRecord(boolean start){
if (start){
startRecording();
} else{
stopRecording();
}
}
private void onPlay(boolean start){
if (start){
startPlaying();
} else{
stopPlaying();
}
}
private void startPlaying(){
mPlayer = newMediaPlayer();
try {
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
} catch(IOException e){
Log.e(LOG_TAG,"prepare() failed");
}
}
private void stopPlaying(){
mPlayer.release();
mPlayer = null;
}
private void startRecording(){
mRecorder = newMediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch(IOException e){
Log.e(LOG_TAG,"prepare() failed");
}
mRecorder.start();
}
private void stopRecording(){
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
class RecordButtonextendsButton{
boolean mStartRecording=true;
OnClickListener clicker=newOnClickListener(){
public void onClick(View v){
onRecord(mStartRecording);
if (mStartRecording){
setText("Stop recording");
} else{
setText("Start recording");
}
mStartRecording =!mStartRecording;
}
};
public RecordButton(Context ctx){
super(ctx);
setText("Start recording");
setOnClickListener(clicker);
}
}
class PlayButtonextendsButton{
boolean mStartPlaying
= true;
OnClickListener clicker=newOnClickListener(){
public void onClick(View v){
onPlay(mStartPlaying);
if (mStartPlaying){
setText("Stop playing");
} else{
setText("Start playing");
}
mStartPlaying =!mStartPlaying;
}
};
public PlayButton(Context ctx){
super(ctx);
setText("Start playing");
setOnClickListener(clicker);
}
}
public AudioRecordTest(){
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
}
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
LinearLayout ll
= newLinearLayout(this);
mRecordButton =
new RecordButton(this);
ll.addView(mRecordButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0));
mPlayButton = newPlayButton(this);
ll.addView(mPlayButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0));
setContentView(ll);
}
@Override
public void onPause(){
super.onPause();
if (mRecorder!=null){
mRecorder.release();
mRecorder =
null;
}
if (mPlayer!=null){
mPlayer.release();
mPlayer = null;
}
}
}
这是SDK的中带的代码,我已经在自己的手机上成功运行没有任何错误!
分享到:
相关推荐
AudioRecorder2Mp3Util 负责录音和转换 MainActivity 用户的操作界面 封装好格式转化成MP3 注意用的时候需要加上权限 录音权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 往SDCard...
QML for Android通过ScreenRecorder录制屏幕并保存为本地视频
实现android audioRecorder 录音并保存为m4a文件,mediaRecorder也集成了,尽量不要用mediaRecorder,因为声音小,音质也差一些。
Android AudioRecorder录制mp3文件(已经完整封装好,直接调用) 源码包中有2个类 AudioRecorder2Mp3Util 负责录音和转换 MainActivity 用户的操作界面 注意用的时候需要加上权限 <uses-permission android:name=...
AudioRecorder录制WAV文件
只有一个开始录制按钮,点击后录制开始,再次点击录制结束,并会在应用目录下生成pcm文件,如:/storage/emulated/0/Android/data/com.jesseandroid.audiorecorder/files/pcm/2022-10-21-16-17-42.pcm
源码中实现了2中方式分段录制mp4文件,一种是利用MediaRecoder+setMaxDuration 来实现,但是这种方式在完成某段录制,开始下段录制之前,中间有间隔时间,这个时间甚至可以达到1s。另一种方案是分别采集音视频流,...
Audio Record,Android声音录制,采用RTMP传输到Red5 Server
android视频录制,模仿微视,支持按下录制、抬起暂停。进度条断点显示。 视频录制存在的问题: 1.如何获取摄像头的数据 2.如何把获取到的数据保存到视频文件中 3.如何录制音频,并和视频合并 4.录制视频时如何实现...
android-CameraRecorder Android摄像头相关 模块说明 appcamera 摄像头录制视频App
安装完后,桌面会出现三个图标!其中两个是快捷性质的!...用了下,还行可以关闭屏幕后录像,省电哦! 界面虽然是中文的,有些专业词语啥的还是英语!半中半英,能看懂就行...3. Android系统当文件大小超过4G时停止录制。
public void recorder() { try { myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件 recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览 recorder....
Screen Recorder 5+ 是一款免费无限制的安卓手机录屏应用程序,它可以以将设备的屏幕录制为视频或截取安卓的手机屏幕。使用 Screen Recorder 5+ 可以快速创建宣传视频,制作教程或简单地录制剪辑以用作音频帮助! ...
屏幕录像机是一款应用程序,可帮助您轻松在任何地方记录屏幕并拍摄屏幕截图。想要录下 Android 手机上游戏甚至是任何程序的过程吗?如果手机没有内建的话现在可以推荐你安装这款 Screen Recorder – No Ads 软件,...
V Recorder是一款稳定且流畅的屏幕录像机/游戏录像机/适用于Android的录像机,也是功能强大的多合一视频编辑器。VideoShow Recorder由VideoShow应用程序的同一团队创建,拥有超过4亿用户。它是最易于使用的免费屏幕...
Android AudioRecord和MediaRecorder录音并实现了实时获取音量大小 看代码就知道了
V Recorder是一款稳定流畅的屏幕录像机/游戏录像机/录像机,适用于Android,也是一款功能强大的一体化视频编辑器。VideoShow Recorder由VideoShow应用程序团队创建,拥有超过4亿用户。它是世界上500万用户选择的最...
利用Audiorecorder实现录制音频文件
android-screen-recorder GLSurfaceView-Demo 该工程演示如何录制GLSurfaceView上面的内容,该工程参考 在这个开源工程上面加入录屏功能。
android-view-记录器[WIP] 带有 gif 动画的录制视图