【问题标题】:How to get Sampling rate and frequency of music file (MP3) in android?如何在android中获取音乐文件(MP3)的采样率和频率?
【发布时间】:2011-07-05 15:14:01
【问题描述】:

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

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

【问题讨论】:

  • 我认为要计算频率,您必须进行快速傅里叶变换 (FFT)。
  • FFT 会给出实际声音的频率分布,而不是采样率,不是吗?

标签: android media-player android-ndk native-code bitrate


【解决方案1】:

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

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

【讨论】:

  • 谢谢 Jake,我可以使用上面的公式得到比特率。频率呢?
  • 这更难,因为采样率很难从其他信息中得出。几乎所有 CD 之后的消费类音频都使用 44.1KHz 采样,因此可以假设是安全的,或者干脆不显示它,因为它对许多用户影响不大。
  • hello-jni 示例应用似乎做了一些与您需要做的非常相似的事情,即从本机代码获取一个简单的值返回到托管代码。我会检查一下。 developer.android.com/sdk/ndk/overview.html#samples 好像有教程在mobile.tutsplus.com/tutorials/android/ndk-tutorial
  • 这些可以向您展示如何跨越托管/本机鸿沟进行通信,但要找到您需要调用的实际代码以获取您需要在文档中搜索的信息。这些在网上不可用,而且我没有安装 NDK,所以我无法帮助你。我强烈建议忽略采样率信息,因为几乎没有人关心它,而且几乎所有音频文件都处于相同的速率。你会得到一个非常糟糕的努力:从中获得回报。
  • 当然。录制数字音频时,每秒会进行几次压力测量。这是一个样本。对于 CD 质量的音频,44.1kHz 用于采样率。也就是说,每秒采集 44,100 个样本。 48kHz 也经常使用,尤其是在 DAT 和 DV 磁带上。比特率是给定时间段所需的带宽量。 128kbit 意味着有接近 16kbytes 的数据代表 1 秒的音频。您将展示如何获得比特率,这与采样率绝对无关
【解决方案2】:

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

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

【讨论】:

  • 这绝对应该是公认的答案。 :-)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多