安卓5.0无法录制96000Hz的音频?

3

根据Android 5.0L的更新(http://geeknizer.com/audio-improvements-in-android-5-0-l-audiophile/)提到,Android开始支持96000Hz采样率。然而当我在我的Galaxy S6上尝试这样做时:

void checkAvailableSampleRate(){
    for (int rate : new int[] {44100, 48000, 96000}) {  // add the rates you wish to check against
        int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
        if (bufferSize > 0) {
            // buffer size is valid, Sample rate supported
            Log.d(C.LOG_TAG,"Sample rate "+rate+" is supportted");
            // just used for debugging
            AudioRecord temp = new AudioRecord(MediaRecorder.AudioSource.MIC, rate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
            Log.d(C.LOG_TAG,"make audioRecord successfully ");
        }
    }
}

我无法使96000Hz工作......

这是我的输出:

Sample rate 44100 is supportted
Make audioRecord successfully
Sample rate 48000 is supportted
Make audioRecord successfully
Sample rate 96000 is supportted

我的应用在这里崩溃,这意味着当采样率设置为96000Hz时,我可以获得minBuffer但无法创建AudioRecord实例。

以下是错误信息:

java.lang.IllegalArgumentException: 96000Hz不是支持的采样率。

对我来说很奇怪的是,AudioRecord.getMinBufferSize()在96000Hz下工作正常,但是当我尝试创建一个96000Hz的AudioRecord时,应用程序会崩溃。

有人在Android中尝试过录制96000Hz音频吗?

-------------------------------------

这是我的gradle设置更新:

android {
    compileSdkVersion 21
    buildToolsVersion "23.0.1"
    defaultConfig {
        applicationId "edu.umich.cse.echotag"
        minSdkVersion 21
        targetSdkVersion 21
        ndk {
            moduleName "detection"
        }
    } ....

你是否已经为最新版本的API编译了你的代码? - Shotgun Ninja
嗨,Shotgun Ninja,我使用的SDK版本是21。我还在我的问题中更新了Gradle设置。 - Yu-Chih Tung
1个回答

0

操作系统可能支持96k,但硬件也需要支持96k才能使其工作。

getMinBufferSize 可能不是一种检查硬件支持的采样率的稳健方法。请参见此处 我如何找出我的平板电脑支持哪些采样率?

AudioManager 可以查询设备的本机参数。如果您想检查是否支持96k,则可能有用。

        AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
        Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER));
        Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
        Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND));
        Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND));

更多阅读http://geeknizer.com/audio-improvements-in-android-5-0-l-audiophile/

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接