我可以使用 AudioRecord 录制 24/48k 音频吗?

Can I record 24/48k audio using AudioRecord?

我正在使用 AudioRecord 录制音频。目前我使用 44100 作为采样率,16 位作为 AudioFormat

我可以使用 48000 作为采样率和 24 位作为 AudioFormat 吗?

下面是采样率为44100,音频格式为16bit的代码。

    int SAMPLE_RATE = 44100;

    int mBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT);        
    AudioRecord mRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, SAMPLE_RATE ,
            AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, mBufferSize);

    if (AudioRecord.STATE_INITIALIZED == mRecorder.getState()) {
        mRecorder.startRecording();
    }

根据 Developer site,44100Hz 是可用的最高采样率。 我的问题是,我可以使用 48000Hz 和 24 位音频格式吗?

谢谢

根据这个 link 我们可以使用每个样本 24 位来录制音频。 每个样本 24 位 使用 Android L,样本分辨率将从 16 位 PCM 增加到 24 位以获得更好的结果。尽管 2013 年发布的许多智能手机都支持 24bit 96khz DAC,但 Android OS 从未能够使用它。

简单的回答 - 对于大多数应用开发者 - 不,你不能。

冗长的回答 -

  • 如果您正在使用 Android SDK 构建应用程序,那么您不能这样做,因为 SDK 没有为其定义任何常量。

  • 如果您有权访问 Android 的基础源代码,则整个源代码构建。然后您可以检查它们是否支持该采样频率和音频格式,然后您可以通过整个 android 堆栈公开它们并在您的应用程序中使用它。
    这种方法的问题是您无法将您的应用程序发布到任何设备,该设备需要 运行 从同一来源构建的完全相同的图像。这种方法一般适用于在自己的树中开发应用的OEM公司..

当然这取决于您尝试录制的设备?硬件制造商必须在 HAL 中配置很多这样的东西。

audio_policy.confshould 表示您所用设备的兼容采样率和格式。您可以检查该文件 - 它通常位于您的 android 设备上,可能在 system/etc/

示例:

audio_hw_modules {
  primary {
    outputs {
      primary {
        sampling_rates  44100|48000
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL
        flags AUDIO_OUTPUT_FLAG_PRIMARY
      }
    }
    inputs {
      primary {
        sampling_rates 8000|11025|16000|22050|32000|44100|48000
        channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET
      }
    }
  }

在这种特殊情况下,我将无法使用 48 KHz 的 24 位音频,但 16 位就可以了。