Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Android中使用音频api录制音频?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个版本为2.3.3的LG Android手机.我需要连接耳机插孔中的麦克风,因为我想创建一个读取声音样本的应用程序.

如何以编程方式读取样本?

解决方法

如果您真的想阅读AudioSamples,我建议您使用AudioRecord而不是MediaRecorder,因为它可以让您更好地控制AudioSamples …为此您可以使用以下代码,AudioCapturer是我的包装类,我用它来获取样本AudioRecord object..IAudioReceiver是一个具有处理音频数据的方法的接口.

public class AudioCapturer implements Runnable {

    private AudioRecord audioRecorder = null;
    privatE int bufferSize;
    privatE int samplePerSec = 16000;
    private String LOG_TAG = "AudioCapturer";
    private Thread thread = null;

    private Boolean isRecording;
    private static AudioCapturer audioCapturer;

    private IAudioReceiver iAudioReceiver;

    private AudioCapturer(IAudioReceiver audioReceiver) {
        this.iAudioReceiver = audioReceiver;
    }

    public static AudioCapturer geTinstance(IAudioReceiver audioReceiver) {
        if (audioCapturer == null) {
            audioCapturer = new AudioCapturer(audioReceiver);
        }
        return audioCapturer;
    }

    public void start() {

        bufferSize = AudioRecord.getMinBufferSize(samplePerSec,AudioFormat.CHAnnEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);

        if (bufferSize != AudioRecord.ERROR_BAD_VALUE && bufferSize != AudioRecord.ERROR) {

            audioRecorder = new AudioRecord(MediaRecorder.Audiosource.DEFAULT,this.samplePerSec,AudioFormat.ENCODING_PCM_16BIT,this.bufferSize * 10); // bufferSize
                                                                            // 10x

            if (audioRecorder != null && audioRecorder.getState() == AudioRecord.STATE_INITIALIZED) {
                Log.i(LOG_TAG,"Audio Recorder created");


                audioRecorder.startRecording();
                isRecording = true;
                thread = new Thread(this);
                thread.start();

            } else {
                Log.e(LOG_TAG,"Unable to create AudioRecord instance");
            }

        } else {
            Log.e(LOG_TAG,"Unable to get minimum buffer size");
        }
    }

    public void stop() {
        isRecording = false;
        if (audioRecorder != null) {
            if (audioRecorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {
                // System.out
                // .println("Stopping the recorder inside AudioRecorder");
                audioRecorder.stop();
            }
            if (audioRecorder.getState() == AudioRecord.STATE_INITIALIZED) {
                audioRecorder.release();
            }
        }
    }

    public Boolean isRecording() {
        return (audioRecorder != null) ? (audioRecorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) : false;
    }

    @Override
    public void run() {
        android.os.process.setThreadPriority(android.os.process.THREAD_PRIORITY_URGENT_AUdio);  
        while (isRecording && audioRecorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {
            short[] tempBuf = new short[Constants.FRAME_SIZE / 2];
            audioRecorder.read(tempBuf,tempBuf.length);     
            iAudioReceiver.capturedAudioReceived(tempBuf,falsE);
        }
    }

    /*
     * (non-JavadoC)
     * 
     * @see java.lang.object#finalize()
     */
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("AudioCapturer finalizer");
        if (audioRecorder != null && audioRecorder.getState() == AudioRecord.STATE_INITIALIZED) {
            audioRecorder.stop();
            audioRecorder.release();
        }
        audioRecorder = null;
            iAudioReceiver = null;  
        thread = null;
    }

}

现在你可以在你的程序的Main类中使用这个类的对象,它将开始为你提供音频样本,你可以在你的IAudioReceiver(使用这些样本的类)中处理它们.

如果您仍想使用MediaRecorder,this link对您有用,

大佬总结

以上是大佬教程为你收集整理的如何在Android中使用音频api录制音频?全部内容,希望文章能够帮你解决如何在Android中使用音频api录制音频?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。