精华内容
下载资源
问答
  • android录音功能

    2015-04-09 22:55:17
    android录音功能,简单实用,可以方便
  • Android录音功能

    2013-11-18 10:08:16
    Android手机中实现录音和播放录音功能的源码
  • android 录音功能

    2013-09-19 19:09:40
    android 实现录音功能 利用mediarecord 类,可以做为开发语音功能参考! 录音 mediarecord !
  • android录音功能实现

    2016-07-18 18:55:00
    简单的android录音播放
  • android客户端与web服务器端的文件上传与下载源代码,和android录音功能。 HttpDownloader.java:下载文件 FileUtil.java:post方法上传文件 MainActivity.java:录音功能 TestFileActivity.java:测试文件的上传与...
  • android 录音功能报错

    2017-08-16 01:48:51
    * 做安卓的录音功能代码如下: mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setAudioEncoder...
  • Android录音功能实现

    2019-11-23 14:51:20
    实现录音功能: public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R...

    实现录音功能:

    public class MainActivity extends AppCompatActivity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initAudioRecordBtn();
        }
        
        //Mic audio record function
        private static final int PLAY_END = 1;
        private static final int RECORD_END = 2;
        private TextView mRecordTimeTv;
        private Button mStartRecordBtn;
        private Button mPlayBtn;
        private String mFileName = null;// 存储录音文件的路径
    
        private AudioRecord mAudioRecord;
        private volatile boolean mIsRecording = false;
        private AudioFormat.Builder mAudioFormat;
        private AudioAttributes mPlaybackAttributes;
        private boolean mIsPlay;
        private AudioTrack mAudio = null;
        private RecorderHandler mHandler;
    
        private class RecorderHandler extends Handler {
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case PLAY_END:
                        stopPlayBack();
                        mPlayBtn.setText("播放录音");
                        mStartRecordBtn.setEnabled(true);
                        mIsPlay = false;
                        break;
                    case RECORD_END:
                        mRecordTimeTv.setText("");
                        mAudioRecord.stop();
                        mStartRecordBtn.setText("开始录音");
                        mPlayBtn.setEnabled(true);
                        mIsRecording = false;
                        mTimer.cancel();
                        break;
                    default:
                        break;
                }
            }
        }
    
        private CountDownTimer mTimer = new CountDownTimer(30 * 1000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                long time = (30 * 1000 - millisUntilFinished) / 1000;
                mRecordTimeTv.setText(String.format("00:%s", time < 10 ? "0" + time : time));
            }
    
            @Override
            public void onFinish() {
                mHandler.sendEmptyMessage(RECORD_END);
            }
        };
    
        private void initAudioRecordBtn() {
            mRecordTimeTv = findViewById(R.id.audio_record_time);
            mStartRecordBtn = findViewById(R.id.audio_record_start);
            mPlayBtn = findViewById(R.id.audio_record_play);
        }
    
        public String getSDPath() {
            String path = null;
            boolean sdCardExist = Environment.getExternalStorageState()
                    .equals(Environment.MEDIA_MOUNTED);
            if (sdCardExist) {
                path = Environment.getExternalStorageDirectory().getAbsolutePath();
            } else {
    
            }
            return path;
        }
    
        private void setListener() {
            // 开始录音
            mStartRecordBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if (mAudioRecord == null || mAudioRecord.getState() == AudioRecord.STATE_UNINITIALIZED) {
                        return;
                    }
    
                    if (!mIsRecording) {
                        mIsRecording = true;
                        mStartRecordBtn.setText("结束录音");
                        mPlayBtn.setEnabled(false);
                        new Thread() {
                            @Override
                            public void run() {
                                super.run();
                                mTimer.start();
                                writeAudioDataToFile();
                            }
                        }.start();
                    } else {
                        mHandler.sendEmptyMessage(RECORD_END);
                    }
                }
    
            });
    
            // 播放录音
            mPlayBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //play();
                    // return;
                    //   String name = pcm2();
    
                    if (mIsPlay) {
                        stopPlayBack();
                        mPlayBtn.setText("播放录音");
                        mStartRecordBtn.setEnabled(true);
                        mIsPlay = false;
                    } else {
                        mIsPlay = true;
                        mPlayBtn.setText("停止播放");
                        mStartRecordBtn.setEnabled(false);
                        new Thread() {
                            @Override
                            public void run() {
                                super.run();
                                playBackNow();
                            }
                        }.start();
                    }
    
                }
            });
    
        }
    
    
        public void stopPlayBack() {
            if (mAudio != null && mIsPlay && mAudio.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) {
                mAudio.stop();
            }
        }
    
        public void playBackNow() {
            int length = 0;
            Log.d(TAG, " before mAudio track");
    
            mPlaybackAttributes = new AudioAttributes.Builder()
                    // .setUsage(AudioAttributes.USAGE_ASSISTANT)
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    // .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
                    .build();
            mAudioFormat = new AudioFormat.Builder();
    //        mAudioFormat.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO);
            mAudioFormat.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO); //CHANNEL_IN_STEREO
            mAudioFormat.setSampleRate(32000);
            mAudioFormat.setEncoding(AudioFormat.ENCODING_PCM_16BIT);
    
            //  int bufferSize = AudioRecord.getMinBufferSize(64000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
    
            if (mAudio == null) {
                mAudio = new AudioTrack(mPlaybackAttributes, // attributes
                        // AudioManager.STREAM_TTS,
                        //48000, // sample rate
                        mAudioFormat.build(),
                        AudioTrack.getMinBufferSize(32000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 2,
                        AudioTrack.MODE_STREAM,
                        AudioManager.AUDIO_SESSION_ID_GENERATE
                );
            }
            Log.d(TAG, " after mAudio track");
            Log.d(TAG, "bufrer size:" + AudioTrack.getMinBufferSize(32000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT));
    
            FileInputStream fis = null;
            try {
                Log.d(TAG, " get stream in");
    //            fis = new FileInputStream(getSDPath()+"/20190525_035557voice.pcm");
                Log.d(TAG, "PALY - > " + mFileName);
                fis = new FileInputStream(mFileName);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            try {
                length = fis.available();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.d(TAG, "wav file readlen_1:" + length);
            byte buffer[] = new byte[length];
    
            try {
                while (fis.available() > 0) {
                    length = fis.read(buffer);
                    if (length == AudioTrack.ERROR_INVALID_OPERATION || length == AudioTrack.ERROR_BAD_VALUE) {
                        continue;
                    }
                    if (length != 0 && length != -1) {
                        mAudio.play();
                        mAudio.write(buffer, 0, length);
                    }
                    Log.d(TAG, "play length --> " + length);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            mHandler.sendEmptyMessage(PLAY_END);
    
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
        private void setBtnAudioRecord() {
            int bufferSize = AudioRecord.getMinBufferSize(64000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
            final AudioFormat audioFormat = new AudioFormat.Builder()
                    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                    .setSampleRate(64000)
                    .setChannelMask(AudioFormat.CHANNEL_IN_STEREO)
                    .build();
    
            mAudioRecord = new AudioRecord.Builder()
                    .setAudioSource(MediaRecorder.AudioSource.MIC)
                    .setBufferSizeInBytes(bufferSize)
                    .setAudioFormat(audioFormat)
                    .build();
            Log.d(TAG, "record bufferSize=(" + bufferSize + ")");
        }
    
        @Override
        public void onStart() {
            super.onStart();
            mHandler = new RecorderHandler();
    
            Log.d(TAG, "start --");
        }
    
        @Override
        public void onResume() {
            super.onResume();
            if (mAudioRecord == null) {
                setBtnAudioRecord();
            }
            mPlayBtn.setEnabled(false);
            setListener();
            Log.d(TAG, "onResume --");
        }
    
        @Override
        public void onStop() {
            super.onStop();
            Log.d(TAG, "stop --");
    
            if (mTimer != null) {
                mTimer.cancel();
            }
    
            if (mAudioRecord != null && mAudioRecord.getState() == AudioRecord.STATE_INITIALIZED) {
                mAudioRecord.stop();
                mAudioRecord.release();
                mAudioRecord = null;
            }
    
            mStartRecordBtn.setText("开始录音");
            mPlayBtn.setEnabled(true);
            mIsRecording = false;
            mRecordTimeTv.setText("");
    
            if (mAudio != null) {
                if (mAudio.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) {
                    mAudio.stop();
                }
                mAudio.release();
                mAudio = null;
            }
        }
    
        /**
         * write sound file
         */
        private void writeAudioDataToFile() {
            int bytesRecord = 0;
            String filePath = getSDPath() + "/" + new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date()) + "voice.pcm";
            mFileName = filePath;
            File file = new File(filePath);
            if (file.exists()) {
    
            } else {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            int bufferSize = AudioRecord.getMinBufferSize(64000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
            //int bufferSize = AudioRecord.getMinBufferSize(128000, AudioFormat.CHANNEL_IN_STEREO,  AudioFormat.ENCODING_PCM_16BIT);
            Log.d(TAG, "record bufferSize=(" + bufferSize + ")");
            byte[] tempBuffer = new byte[bufferSize];
            OutputStream os = null;
    
            try {
                os = new FileOutputStream(filePath);
                Log.d(TAG, "after recorder create file");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            mAudioRecord.startRecording();
    
            while (mIsRecording) {
                // gets the voice output from microphone to byte format
                bytesRecord = mAudioRecord.read(tempBuffer, 0, bufferSize);
                Log.d(TAG, "record byte=(" + bytesRecord + ")");
                if (bytesRecord == AudioRecord.ERROR_INVALID_OPERATION || bytesRecord == AudioRecord.ERROR_BAD_VALUE) {
                    Log.d(TAG, " Audio record read err");
                }
                if (bytesRecord != 0 && bytesRecord != -1) {
                    try {
                        os.write(splitStereoPcm(tempBuffer), 0, bytesRecord / 2);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    Log.d(TAG, "$$$record byte=0");
                }
            }
    
            Log.d(TAG, "after writer record");
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        private byte[] splitStereoPcm(byte[] data) {
            int monoLength = data.length / 2;
            byte[] pcmData = new byte[monoLength];
            for (int i = 0; i < monoLength; i++) {
                if (i % 2 == 0) {
                    System.arraycopy(data, i * 2, pcmData, i, 2);
                } else {
                    System.arraycopy(data, i * 2, pcmData, i - 1, 2);
                }
            }
            return pcmData;
        }
    }
    
    展开全文
  • Android简单录音功能实现,可直接导入AndroidStudio运行。 没做任何优化只是简单的功能实现。 大家有任何问题可以共同讨论。
  • 但是安装到手表后,启动录音功能几秒钟录音文件就达几百兆,且录音文件不能够正常播放,通过调试信息也看不出有任何的报错。 解决过程: 1、由于在手机跟pad上面运行没有问题,首先想到是手表录音麦克风的参数是不是...

    具体现象:
    最近在做一个APP需要安装在智能手表上,有一个录音的功能,将开发的apk安装在手机和pad上面都能正常使用,录音文件也可以正常播放。但是安装到手表后,启动录音功能几秒钟录音文件就达几百兆,且录音文件不能够正常播放,通过调试信息也看不出有任何的报错。

    解决过程:

    1、由于在手机跟pad上面运行没有问题,首先想到是手表录音麦克风的参数是不是与手机pad的有差异,比如采样率、声道跟编码是不是有特定的要求,然后改参数一个个的调试。最后,,,终于,,,还是没有解决。

    **2、**后面想到,可能不是代码有问题,手表本身录音就有问题,但是手表能够正常的拨打电话,那就说明手表麦克风是可以正常使用的。然后打开手表中的录像功能,果然,提示录音被占用,无法使用录像!
    联系厂商才知道,智能手表中有智能语音助手的功能,麦克风的资源一直被占用了,导致我们自己写的录音功能无法正常使用。最后,更新手表版本(新版本语音助手功能被砍掉了),apk录音正常使用,问题解决!

    总结:
    1、首先检查安装环境对录音中的参数设置是否有要求;
    2、检查麦克风资源是否被占用,尤其是像录音录几秒钟文件就达几百兆甚至达到1G的情况。

    --------如有侵权,联系删除!

    展开全文
  • Android录音功能Android Studio实现

    千次阅读 2016-07-01 15:03:09
    Android官网上给出了MediaRecorder类的用法,录制音频的例子如下: MediaRecorder recorder = new MediaRecorder (); //设置音频资源的来源包括:麦克风,通话上行,通话下行等;程序中设定音频...

    在Android官网上给出了MediaRecorder类的用法,录制音频的例子如下:

    MediaRecorder recorder = new MediaRecorder(); 
    //设置音频资源的来源包括:麦克风,通话上行,通话下行等;程序中设定音频来源为麦克风
    
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    //设置输出文件的格式如3gp、mpeg4等
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    //设置音频编码器,程序中设定音频编码为AMR窄带编码
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    //设置文件输出路径,程序中的PATH_NAME要用实际路径替换掉
     recorder.setOutputFile(PATH_NAME);
    //准备开始,这就在start前,必须调用
     recorder.prepare();
    
     recorder.start();   // Recording is now started
     ...
    //开始后调用,但是如果刚刚开始就停止会抛出异常
     recorder.stop();
    //将MediaRecorder置于空闲状况,如果要重新启动MediaRecorder需要重新配置参数
     recorder.reset();   // You can reuse the object by going back to setAudioSource() step
    //释放MediaRecorder相关资源,如果不再调用MediaRecorder就要把资源释放掉。
    
     recorder.release(); // Now the object cannot be reused
     
    以上是录制一段音频的Android程序,每一句都是必须的。

    展开全文
  • MediaRecorderMediaRecorder集成了录音、编码、压缩等功能,所以使用起来相对比较简单。缺点:支持的格式过少并且无法实时处理音频数据。开始录音package com.example.audiotest; import android.media....

    MediaRecorder

    MediaRecorder集成了录音、编码、压缩等功能,所以使用起来相对比较简单。

    缺点:支持的格式过少并且无法实时处理音频数据。

    开始录音

    package com.example.audiotest;
    
    import android.media.MediaRecorder;
    
    import java.io.File;
    import java.io.IOException;
    
    public class MyAudioRecord {
    
        private MediaRecorder mediaRecorder;
    
        public void start(File saveFile) throws IOException {
    
            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            //设置输出文件类型3gp
            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            //自适应多速率窄带编解码器,唯一的选择。採样率是8kHz,码率在 4.75~12.2kbps之间。不太适合语音之外其他内容
            mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            //输出的文件
            mediaRecorder.setOutputFile(saveFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();//开始录音
        }
    
        public void stop() {
            if (mediaRecorder != null) {
                mediaRecorder.stop();
                mediaRecorder.release();
                mediaRecorder = null;
    
            }
    
        }
    
    }

    传入的start的文件为录音文件,需自定义:

    package com.example.audiotest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.widget.Button;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @author rb
     */
    public class MainActivity extends Activity {
    
        private MyAudioRecord myAudioRecord;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            int id = view.getId();
            switch (id){
                case R.id.start:
                    startAudio();
                    break;
                case R.id.stop:
                    if (myAudioRecord !=null){
                        myAudioRecord.stop();
                    }
                    break;
                default:
                    break;
            }
        }
    
        private void startAudio(){
            if (myAudioRecord != null) {
                myAudioRecord.stop();
                myAudioRecord = null;
            }
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss");
            String filePath;
            filePath = "mnt/sdcard/" + dateFormat.format(new Date()) + ".3gp";
            final File saveFile = new File(filePath);
            myAudioRecord = new MyAudioRecord();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        myAudioRecord.start(saveFile);
    //                    Thread.sleep(time * 1000);
                        //如果想定时,在这里传入时间,然后调用myAudioRecord.stop()
    //                    myAudioRecord.stop();
                    } catch (Exception e) {
                            e.printStackTrace();
                    }
    
                }
            }).start();
        }
    }

    记得添加权限

        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />

    展开全文
  • Android 录音功能直接拿去用

    千次阅读 2019-05-11 16:20:09
    前言 最近项目中需要用到录音功能,借鉴了...先贴个效果图给大家看一下,看看这个录音包的功能 一、实现录音的 Service 这个类可以说是这个包的核心了,如果理解了这个 Service,录音这一块基本就没什么问题了。 ...
  • 1.在onCreate方法中追加动态权限获取 if (Build.VERSION.SDK_INT >= 23) { int REQUEST_CODE_CONTACT = 101;...<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • android录音功能的实现

    千次阅读 2016-03-30 21:52:36
    实现录音的代码如下import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import android.media.MediaRecorder; import android.util.Log;public class ...
  • 提要:需求是开发类似微信发语音的功能,没有语音转文字。网上看了一些代码,不能拿来直接用,部分代码逻辑有问题,所以想把自己的代码贴出来,仅供参考。 功能: a、设置最大录音时长和录音倒计时(为了方便测试...
  • package com.android.audiorecordtest...import android.app.Activity; import android.widget.LinearLayout; import android.os.Bundle; import android.os.Environment; import android.view.ViewGroup; impo...
  • 3、创建MediaRecorder对象,指定文件路径、设置音频源、设置音频格式、设置音频编码,一切就绪就可以准备录音了(mediaRecorder.prepare());最后开始录音mediaRecorder.start()。 4、录音完成的时候将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,367
精华内容 546
关键字:

android录音功能