首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取音频wav文件的比特率或位深度

获取音频wav文件的比特率或位深度
EN

Stack Overflow用户
提问于 2015-12-17 17:25:14
回答 3查看 2.3K关注 0票数 0

我正在使用AudioTrack播放一个.wav音频文件。一切都很好,但我现在已经在STATIC_MODE中初始化STATIC_MODE对象时硬编码了音频文件的位深度。

代码语言:javascript
复制
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, mChannels,
            AudioFormat.ENCODING_PCM_16BIT, dataSize, AudioTrack.MODE_STATIC);

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

代码语言:javascript
复制
mediaFormat:{mime=audio/raw, durationUs=10080000, channel-count=1, channel-mask=0, sample-rate=16000}

MediaFormat的文档中,它说KEY_BIT_RATEKEY_BIT_RATE这是否意味着我只能在编码原始PCM位时使用此选项。如果是,还有什么方法可以编程地读取比特率/位深度呢?我已经尝试过使用mediainfo二进制文件获取终端上相同文件的信息,并给出了正确的位深度。

EN

回答 3

Stack Overflow用户

发布于 2019-01-18 19:36:55

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

票数 1
EN

Stack Overflow用户

发布于 2017-05-26 07:00:24

代码语言:javascript
复制
    MediaExtractor mediaExtractor = new MediaExtractor();
    try {
        mediaExtractor.setDataSource(path);
        return mediaExtractor.getTrackFormat(0).getInteger("bit-per-sample");
    } catch (Exception e) {
        e.printStackTrace();
    }
票数 0
EN

Stack Overflow用户

发布于 2018-04-13 08:20:04

代码语言:javascript
复制
        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");

而Android7.0上的格式如下

代码语言:javascript
复制
 mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), pcm-encoding: int32(2)}

在Android7.0下面

代码语言:javascript
复制
mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), bit-width: int32(16), what: int32(1869968451)}

编码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34340670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档