Android实现录音的功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档



提示:以下是本篇文章正文内容,下面案例可供参考

一、Android实现录音的功能

二、使用步骤

代码如下(示例):

    Button mBtnAudio,mBtnunAudio;
    MediaRecorder recorder;//录音类
    String appHome;//保存路径

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audiorecord);
        mBtnAudio=findViewById(R.id.mBtnAudio);//开始按钮
        mBtnunAudio=findViewById(R.id.mBtnunAudio);//停止按钮
        //保存到手机的文件名
        String appHome = Environment.getExternalStorageDirectory().getAbsolutePath()+"/myApp";
        mBtnAudio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startRecordAudio(appHome);
            }
        });
        mBtnunAudio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stopRecordAudio();
            }
        });

        //判断安卓版本
        if(Build.VERSION.SDK_INT >=23){
            //需要申请的权限
            String [] permission={
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.RECORD_AUDIO
            };
            for(int i=0;i<permission.length;i++){
                //判断是否有权限
                if(this.checkSelfPermission(permission[i]) != PackageManager.PERMISSION_GRANTED){
                    this.requestPermissions(permission,i);
                }
            }
        }
    }

    //开始录音
    void startRecordAudio(String path){
        if(recorder ==null){
            recorder =new MediaRecorder();
        }
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置录音来源
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置编码格式
        recorder.setOutputFile(path);//设置输出路径
        try {
            recorder.prepare();//准备
            recorder.start();//开始录音
            Toast.makeText(this,"开始录音",Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    void stopRecordAudio(){
        if(recorder !=null){
            recorder.stop();//停止录音
            recorder.reset();//重置
            recorder.release();//释放资源
            recorder =null;
            Toast.makeText(this,"停止录音",Toast.LENGTH_SHORT).show();
        }
    }


}


---

# 总结
提示:别忘了添加必要的权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />

这样就可以实现录音的功能了

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android实现录音功能,可以使用 `MediaRecorder` 类或 `AudioRecord` 类。这里给出 `AudioRecord` 的实现示例。 首先,在 AndroidManifest.xml 文件中添加录音权限: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> ``` 然后,创建一个 `AudioRecord` 对象并开始录音: ```java import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Handler; import android.os.Looper; import android.util.Log; public class AudioRecorder { private static final String TAG = AudioRecorder.class.getSimpleName(); private static final int SAMPLE_RATE = 16000; private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; private static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT); private AudioRecord audioRecord; private byte[] buffer; private boolean isRecording; private Handler handler; private Callback callback; public AudioRecorder() { audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT, BUFFER_SIZE); buffer = new byte[BUFFER_SIZE]; handler = new Handler(Looper.getMainLooper()); } public void setCallback(Callback callback) { this.callback = callback; } public void start() { if (isRecording) { return; } audioRecord.startRecording(); isRecording = true; new Thread(() -> { while (isRecording) { int bytes = audioRecord.read(buffer, 0, buffer.length); if (bytes > 0 && callback != null) { handler.post(() -> callback.onAudioDataReceived(buffer, bytes)); } } audioRecord.stop(); audioRecord.release(); audioRecord = null; }).start(); } public void stop() { isRecording = false; } public interface Callback { void onAudioDataReceived(byte[] data, int size); } } ``` 在此示例中,我们首先创建一个 `AudioRecord` 对象,并使用 `MediaRecorder.AudioSource.MIC` 作为录音源。然后,我们在一个新线程中读取录音数据,并调用回调函数将数据传递给主线程。最后,我们在 `stop` 方法中停止录音。 使用示例: ```java AudioRecorder recorder = new AudioRecorder(); recorder.setCallback((data, size) -> { // 处理录音数据 }); recorder.start(); // 录音中... recorder.stop(); ``` 请注意,此示例中的 `Callback` 接口仅用于演示目的,您应该将其替换为您自己的接口,并在其中处理录音数据。另外,如果您需要将录音保存到文件中,可以使用 `AudioRecord` 的 `read` 方法读取录音数据,并将其写入文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值