2

を使用しようとしていますAudioRecordが、録音を正しく初期化できません。私は 2 つのデバイスを持っています。そのうちの 1 つではうまく動作しますが、もう 1 つのデバイスでは例外が発生し続けます。

私のコード:

bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate,channelConfig, audioFormat, bufferSize);

なぜこれが間違っているのか、それを行う適切な方法は何ですか?

4

2 に答える 2

2
    private int[] mSampleRates = new int[] { 8000, 11025, 22050, 44100 };
    int bufferSize;

    AudioRecord audioInput = findAudioRecord();

    public AudioRecord findAudioRecord() {
        for (int rate : mSampleRates) {
            for (short audioFormat : new short[] {
                    AudioFormat.ENCODING_PCM_8BIT,
                    AudioFormat.ENCODING_PCM_16BIT }) {
                for (short channelConfig : new short[] {
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.CHANNEL_IN_STEREO }) {
                    try {
                        Log.d("Mic2", "Attempting rate " + rate
                                + "Hz, bits: " + audioFormat
                                + ", channel: " + channelConfig);
                        bufferSize = AudioRecord.getMinBufferSize(rate,
                                channelConfig, audioFormat);

                        if (RECORDINGDURATION * sampleRate != AudioRecord.ERROR_BAD_VALUE) {
                            // check if we can instantiate and have a
                            // success
                            AudioRecord recorder = new AudioRecord(
                                    AudioSource.DEFAULT, rate,
                                    channelConfig, audioFormat, bufferSize);
                            if (recorder.getState() == AudioRecord.STATE_INITIALIZED)
                                sampleRate = rate;
                            return recorder;
                        }
                    } catch (Exception e) {
                        Log.e(TAG, rate + "Exception, keep trying.", e);
                    }
                }
            }
        }
        return null;
    }

デバイスはおそらく 16 ビット エンコーディングをサポートしていません -> AudioFormat.ENCODING_PCM_16BIT :-)

于 2012-10-26T15:13:12.020 に答える
2

エミュレーターは CHANNEL_CONFIGURATION_STEREO & sampleRate = (11025、16000、22050、および 44100) をサポートしていません。これを正常に実行したい場合は、CHANNEL_CONFIGURATION_MONO & SampleRate =8000 を使用します (1 秒あたり 8000 サンプルのみをサポートします)。

何をすべきかの詳細な説明は次のとおりです。http://developer.android.com/guide/topics/media/audio-capture.html

于 2012-10-26T15:13:28.757 に答える