0

AudioTrack用来播放 .wav 音频文件。一切都很好,但我现在已经硬编码了音频文件的位深度,同时AudioTrackSTATIC_MODE.

mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, mChannels,
            AudioFormat.ENCODING_PCM_16BIT, dataSize, AudioTrack.MODE_STATIC);

我想以编程方式获取 .wav 文件的位深度/比特率,然后在AudioTrack对象中设置编码。我曾尝试使用MediaExtractorMediaFormat但它只给了我以下信息:

mediaFormat:{mime=audio/raw, durationUs=10080000, channel-count=1, channel-mask=0, sample-rate=16000}

在 的文档中MediaFormat,它说这KEY_BIT_RATE仅编码器。这是否意味着我只能在编码原始 PCM 位时使用此选项。如果是,还有什么其他方式可以以编程方式读取比特率/比特深度?我已经尝试使用mediainfo二进制文件在终端上获取同一文件的信息,它为我提供了正确的位深度。

4

3 回答 3

1

您总是可以查看 wav 文件头的第 34 和第 35 字节。请参阅此资源

于 2019-01-18T19:36:55.097 回答
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

于 2018-04-13T08:20:04.030 回答
0
    MediaExtractor mediaExtractor = new MediaExtractor();
    try {
        mediaExtractor.setDataSource(path);
        return mediaExtractor.getTrackFormat(0).getInteger("bit-per-sample");
    } catch (Exception e) {
        e.printStackTrace();
    }
于 2017-05-26T07:00:24.000 回答