Android Studio 支持的 PCM 编码格式
Android Studio Supported PCM Encoding Formats
我正在尝试使用具有不同采样率和 PCM 编码的 AudioRecord
class 来录制音频,问题是,在构造 AudioRecord
对象并实现 AudioRecorder.getMinBufferSize()
方法使用AudioFormat.ENCODING_PCM_8BIT
或AudioFormat.ENCODING_PCM_FLOAT
,会报不同的错误如:
Unsupported sample encoding. Should be
ENCODING_PCM_8BIT
or ENCODING_PCM_16BIT.
或
E/android.media.AudioRecord: getMinBufferSize(): Invalid audio format.
事实是,我正在 Moto G 第一代 Lollipop 上进行测试,因此根据 Android 开发者文档 AudioFormat.ENCODING_PCM_FLOAT
是受支持的。
显然 AudioRecorder.getMinBufferSize()
只适用于 AudioFormat.ENCODING_PCM_16BIT
.
那么我应该如何知道要在构造函数上实现的 MinBufferSize?
AudioRecord 构造函数:
audioRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, mBufferSize);
AudioRecord 方法:
mBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioRecord
和 AudioTrack
是两个不同的东西。
AudioFormat.ENCODING_PCM_FLOAT
由 AudioTrack
支持,因为 Lollipop
但是 AudioRecord
仅从 Marshmallow
开始支持 AudioFormat.ENCODING_PCM_FLOAT
。
检查http://developer.android.com/reference/android/media/AudioFormat.html。
我正在尝试使用具有不同采样率和 PCM 编码的 AudioRecord
class 来录制音频,问题是,在构造 AudioRecord
对象并实现 AudioRecorder.getMinBufferSize()
方法使用AudioFormat.ENCODING_PCM_8BIT
或AudioFormat.ENCODING_PCM_FLOAT
,会报不同的错误如:
Unsupported sample encoding. Should be
ENCODING_PCM_8BIT
or ENCODING_PCM_16BIT.
或
E/android.media.AudioRecord: getMinBufferSize(): Invalid audio format.
事实是,我正在 Moto G 第一代 Lollipop 上进行测试,因此根据 Android 开发者文档 AudioFormat.ENCODING_PCM_FLOAT
是受支持的。
显然 AudioRecorder.getMinBufferSize()
只适用于 AudioFormat.ENCODING_PCM_16BIT
.
那么我应该如何知道要在构造函数上实现的 MinBufferSize?
AudioRecord 构造函数:
audioRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, mBufferSize);
AudioRecord 方法:
mBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioRecord
和 AudioTrack
是两个不同的东西。
AudioFormat.ENCODING_PCM_FLOAT
由 AudioTrack
支持,因为 Lollipop
但是 AudioRecord
仅从 Marshmallow
开始支持 AudioFormat.ENCODING_PCM_FLOAT
。
检查http://developer.android.com/reference/android/media/AudioFormat.html。