如何在Android中获取音乐文件(MP3)的采样率和频率?

San*_*ndy 13 android bitrate media-player native-code android-ndk

我正在开发android中的音频播放器.所以我想添加播放歌曲的细节,即艺术家姓名,持续时间,比特率和采样频率.我可以使用获取音乐文件的艺术家姓名和持续时间MediaStore.Audio.Media library.但我无法获得同一文件的比特率和采样频率.那么我怎么能得到相同的?

据我所知,它可以通过使用本机库来完成.但不知道怎么办?所以任何人都可以帮助我吗?

Jak*_*ile 16

您可以通过将文件大小除以音频的长度(例如,从我的库中的随机AAC编码的M4A)来近似它:

File Size: 10.3MB (87013064 bits)
Length: 5:16 (316 Seconds)
Which gives: 87013064 bits / 316 seconds = 273426.147 bits/sec or ~273kbps
Actual Bitrate: 259kbps
Run Code Online (Sandbox Code Playgroud)

由于大多数音频文件具有一组已知的有效比特率级别,因此您可以使用该比特率将比特率调整到适当的级别以进行显示.

  • 当然.录制数字音频时,每秒进行几次压力测量.这是一个样本.对于CD质量的音频,44.1kHz用于采样率.也就是说,每秒采集44,100个样本.经常使用48kHz,特别是在DAT和DV磁带上.比特率是给定时间段所需的带宽量.128kbit意味着有接近16k字节的数据代表1秒的音频.您将展示如何获得比特率,这与采样率完全无关. (4认同)

arc*_*tjn 7

我知道它已经解决但我有更好的方法来获得准确的答案

MediaExtractor mex = new MediaExtractor();
try {
    mex.setDataSource(path);// the adresss location of the sound on sdcard.
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

MediaFormat mf = mex.getTrackFormat(0);

int bitRate = mf.getInteger(MediaFormat.KEY_BIT_RATE);
int sampleRate = mf.getInteger(MediaFormat.KEY_SAMPLE_RATE);
Run Code Online (Sandbox Code Playgroud)