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

发布于 2024-10-19 09:54:44 字数 195 浏览 3 评论 0原文

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

据我所知,这可以通过使用本机库来完成。但不知道怎么办?那么有人可以帮助我吗?

I am developing audio player in android. So i want to add the details of the playing song i.e. Artist Name, Duration, Bit rate and sampling frequency.
I can get Artist Name and duration of a music file by using MediaStore.Audio.Media library. But i am unable to get Bit rate and sampling frequency of the same file. So how can i get the same?

As i know, it can be done by using native library. But don't know how? So anyone can help me on this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

写下不归期 2024-10-26 09:54:44

您可以通过将文件大小除以音频长度(以秒为单位)来估算它,例如,来自我的库中随机 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

由于大多数音频文件都有一组已知的有效比特率级别,因此您可以使用它来步进将比特率调整到适合显示的级别。

You can approximate it by dividing the file size by the length of the audio in seconds, for instance, from a random AAC encoded M4A in my library:

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

Since most audio files have a known set of valid bitrate levels, you can use that to step the bit rate to the appropriate level for display.

〃温暖了心ぐ 2024-10-26 09:54:44

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

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);

I know it's been resolved but i got much better way to get accurate answer

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);
挽你眉间 2024-10-26 09:54:44

MediaMetadataRetriever 提供 METADATA_KEY_DURATION,您可以将其除以比特率的文件大小。

MediaMetadataRetriever offers METADATA_KEY_DURATION which you can divide with the file size for bitrate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文