• android开发(18) 调用手机的麦克风录音,并播放。


    收到需求说要做语音通信,我去,要做个微信么,当然,我们做不到那个程度,先捣鼓下怎么录音吧。那么尝试做个示例。

    看看录音的代码:

     mRecorder = new MediaRecorder();

    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setOutputFile(newFileName());
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {
    mRecorder.prepare();
    } catch (IOException e) {
    Log.e(LOG_TAG, "prepare() failed");
    }
    mRecorder.start();

     代码的大概过程有:

    1。设定声音来源。这里指定为 麦克风

    2。指定输出格式 。

    3。指定输出文件。

    4. 指定音频编码格式。

    5. 预备。

    6. 启动录音。

    配合启动录音的过程,就会有终止录音的过程,代码:

     mRecorder.stop();

    mRecorder.release();
    mRecorder = null;

    结束,并释放资源。

    ---------

    录音完成后,总得要听听吧。我们看播放的过程:

     mPlayer = new MediaPlayer();

    try {
    mPlayer.setDataSource(fileName);
    mPlayer.prepare();
    mPlayer.start();
    } catch (IOException e) {
    Log.e(LOG_TAG, "prepare() failed");
    }

     这个,太简单了把。指定个数据源(要播放的文件)就可以了。

    那么如何终止播放呢?

     mPlayer.release();

    mPlayer = null;

    好吧。我承认。这一切都太简单了。android 提供的十分强大的封装。 

     ------

    贴出我封装好的 录音 和播放的 类。

        class SoundRecorder {   

     MediaRecorder mRecorder;

            boolean isRecording;

            public void startRecording() {
                mRecorder = new MediaRecorder();
                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                mRecorder.setOutputFile(newFileName());
                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                try {
                    mRecorder.prepare();
                } catch (IOException e) {
                    Log.e(LOG_TAG, "prepare() failed");
                }
                mRecorder.start();

            }

            public void stopRecording() {
                mRecorder.stop();
                mRecorder.release();
                mRecorder = null;
            }

            public String newFileName() {
                String mFileName = Environment.getExternalStorageDirectory()
                        .getAbsolutePath();

                String s = new SimpleDateFormat("yyyy-MM-dd hhmmss")
                        .format(new Date());
                return mFileName += "/rcd_" + s + ".3gp";
            }
        }

         

          public class SoundPlayer {  

    MediaPlayer mPlayer;


            public void startPlaying(String fileName) {
                mPlayer = new MediaPlayer();
                try {
                    mPlayer.setDataSource(fileName);
                    mPlayer.prepare();
                    mPlayer.start();
                } catch (IOException e) {
                    Log.e(LOG_TAG, "prepare() failed");
                }
            }

            public void stopPlaying() {
                mPlayer.release();
                mPlayer = null;
            }
        }

    最后,提供源代码下载。 

  • 相关阅读:
    Docker
    Oracle-----RAC重启步骤 RAC管理(crs_stat、crsctl、srvctl)
    kubernetes 设备插件
    golang signal.Notify 信号,如何优雅的退出
    golang 通过fsnotify监控文件
    Golang中基础的命令行模块urfave/cli的用法说明
    fatal: unable to access 'xxx': Encountered end of file
    client-go 和 golang 源码中的技巧
    Golang之wait.Until 简单测试用例
    go viper 库
  • 原文地址:https://www.cnblogs.com/vir56k/p/2794226.html
Copyright © 2020-2023  润新知