我正在使用AudioTrack
播放.wav音频文件。一切都很好但我现在在初始化AudioTrack
中的STATIC_MODE
对象时硬编码了音频文件的位深度。
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, mChannels,
AudioFormat.ENCODING_PCM_16BIT, dataSize, AudioTrack.MODE_STATIC);
我想以编程方式获取.wav文件的位深度/比特率,然后在AudioTrack
对象中设置编码。我尝试使用MediaExtractor
和MediaFormat
,但它只给出了以下信息:
mediaFormat:{mime=audio/raw, durationUs=10080000, channel-count=1, channel-mask=0, sample-rate=16000}
在MediaFormat
的文档中,它表示KEY_BIT_RATE
仅限编码器。这是否意味着我只能在编码原始PCM位时使用此选项。如果是,那么以编程方式读取比特率/比特深度的其他方法是什么?我已经尝试使用mediainfo
二进制文件在终端上获取同一文件的信息,它为我提供了正确的位深度。
答案 0 :(得分:0)
MediaExtractor mediaExtractor = new MediaExtractor();
try {
mediaExtractor.setDataSource(path);
return mediaExtractor.getTrackFormat(0).getInteger("bit-per-sample");
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:0)
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
int bitDepth;
if (currentapiVersion >= android.os.Build.VERSION_CODES.N){
bitDepth = format.getInteger("pcm-encoding");
} else{
bitDepth = format.getInteger("bit-width");
和android 7.0上面的格式一样
mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), pcm-encoding: int32(2)}
在android 7.0下面像
mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), bit-width: int32(16), what: int32(1869968451)}
https://developer.android.com/reference/android/media/MediaFormat.html#KEY_PCM_ENCODING
答案 2 :(得分:0)
您始终可以查看wav文件标题的第34和35个字节。 See this resource。