1

我正在使用AudioRecord. 目前我使用 44100 作为采样率和 16 位作为AudioFormat.

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

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

    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 位音频格式吗?

谢谢

根据此链接,我们可以使用每个样本 24 位来录制音频。24 Bits Per Sample 使用 Android L,样本分辨率将从 16 位 PCM 增加到 24 位以获得更好的结果。尽管 2013 年发布的许多智能手机都支持 24 位 96khz DAC,但 Android 操作系统始终无法使用它。

4

2 回答 2

1

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

audio_policy.conf 应在您所在的设备上指示兼容的采样率和格式。您可以检查该文件 - 它通常在您的 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 位就可以了。

于 2015-09-04T14:25:55.083 回答
1

简单的答案 - 对于大多数应用程序开发人员 - 不,你不能。

冗长的答案 -

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

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

于 2015-09-04T05:40:59.527 回答