栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android 麦克风录音输出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android 麦克风录音输出

添加权限

    
    
    
    

 

一、录音(存文件)输出

1、录音至本地文件

import android.media.MediaRecorder;
import android.util.Log;

import java.io.File;
import java.io.IOException;


public class MicrophoneRecording {
    private static final String TAG = "MicrophoneRecording";
    private MediaRecorder mRecorder;
    private File audioFile;

    public void startRecording() {
        mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        try {
            audioFile = File.createTempFile("recording", ".amr");
            mRecorder.setOutputFile(audioFile.getAbsolutePath());
            mRecorder.prepare();
            Log.d(TAG, "startRecording");
        } catch (IOException e) {
            e.printStackTrace();
        }
        mRecorder.start();

    }

    public String getAudioFile() {
        return this.audioFile.getAbsolutePath();
    }

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

}

2、音源播放器

 

import android.media.MediaPlayer;
import android.util.Log;

import java.io.IOException;


public class AudioSourcePlay {

    private static final String TAG = "AudioSourcePlay";
    private MediaPlayer mPlayer;


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

    public void stopPlaying() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
        Log.d(TAG, "stopPlaying");
    }
}

3、调用

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //开启录音
                startRecording();
            }
        });
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 停止录音
                stopRecording();
            }
        });
        mUpgrade.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 播放
                AudioSourcePlay();
            }
        });




    private void startRecording() {
        mMicrophoneRecording = new MicrophoneRecording();
        mMicrophoneRecording.startRecording();
        Log.d("ModuleService", "openMicrophone: ");
    }

    private void stopRecording(){
        mMicrophoneRecording.stopRecording();
        Log.d("ModuleService", "stopMicrophone: ");
    }

    private void AudioSourcePlay(){
        mAudioSourcePlay = new AudioSourcePlay();
        mAudioSourcePlay.startPlaying(mMicrophoneRecording.getAudioFile());
        Log.d("ModuleService", "playing: ");
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mMicrophoneRecording != null) {
            stopRecording();

            mMicrophoneRecording = null;
        }
        if (mAudioSourcePlay != null){
            mAudioSourcePlay.stopPlaying();
            mAudioSourcePlay = null;
        }

    }

二、实时录音并播放

1、

    // 线程处理数据流
   private  class RecordThread extends Thread{
        static final int frequency = 44100;
        static final int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
        static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

        @Override
        public void run() {
            int recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding)*2;
            int plyBufSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding)*2;
            audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, recBufSize);
            audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, plyBufSize, AudioTrack.MODE_STREAM);
            byte[] recBuf = new byte[recBufSize];
            audioRecord.startRecording();
            audioTrack.play();
            while(true){
                int readLen = audioRecord.read(recBuf, 0, recBufSize);
                audioTrack.write(recBuf, 0, readLen);
            }
        }
    }

2、调用

    private MicrophoneRecording mMicrophoneRecording;
    private AudioSourcePlay mAudioSourcePlay;

    private  AudioRecord audioRecord;
    private  AudioTrack audioTrack;      



 mUpgrade.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 播放
                RecordThread recordThread = new RecordThread();
                recordThread.start();
            }
        });


    @Override
    protected void onDestroy() {
        super.onDestroy();
        audioTrack.stop();
        audioRecord.stop();
    }

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号