使用AudioRecord和 AudioTrack实现录音并播放

本文介绍了一款应用,可以设置参数值(频率、编码格式、声道),实现音视频的录制和播放。应用提供了录制功能,支持创建音频记录、启动线程进行数据写入,并在停止录制时将临时文件复制到指定位置,最终删除临时文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载地址:http://download.youkuaiyun.com/source/3148521

此应用可以设置参数值:频率、编码格式、声道。



private void startRecording (){

              
                createAudioRecord();//每次读取设置的参数后再创建
           
                audioRecord.startRecording();
               
                isRecording = true;
               
                recordingThread = new Thread(new Runnable() {
                       
                        @Override
                        public void run() {
                                writeAudioDataToFile();//每次均写入同一文件中
                        }
                },"AudioRecorder Thread");
               
                recordingThread.start();
        }

private void stopRecording (){
                if(null != audioRecord){
                        isRecording = false;
                       
                        audioRecord.stop();
                        audioRecord.release();
                       
                        audioRecord = null;
                        recordingThread = null;
                }
               
                copyWaveFile(getTempFilename(),getFilename());
                deleteTempFile();
        }
AudioTrack播放类

class PCMAudioTrack extends Thread {
           
            protected byte[] m_out_bytes;
           

            final String FILE_PATH = "/sdcard/AudioRecorder/";
            final String FILE_NAME = "session.wav";

            File file;
            FileInputStream in;
           
            public void init() {
                try {       
                    file = new File(FILE_PATH , FILE_NAME);
                    file.createNewFile();           
                    in = new FileInputStream(file);

//                    in.read(temp, 0, length);
                   
                    m_keep_running = true;

                    createAudioTrack();

                    m_out_bytes = new byte[playBufSize];

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            public void free() {
                m_keep_running = false;
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    Log.d("sleep exceptions.../n", "");
                }
            }

            public void run() {
                byte[] bytes_pkg = null;
                audioTrack.play();
                while (m_keep_running) {
                    try {
                        in.read(m_out_bytes);
                        bytes_pkg = m_out_bytes.clone();
                        audioTrack.write(bytes_pkg, 0, bytes_pkg.length);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                audioTrack.stop();
                audioTrack = null;
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值