【问题标题】:How to calculate number of samples from length of audio file?如何从音频文件的长度计算样本数?
【发布时间】:2011-02-04 07:41:51
【问题描述】:

给定一个持续时间为 10s 的音频文件,我如何找出 2s 和 8s 之间的样本数?

【问题讨论】:

    标签: ios audio sampling


    【解决方案1】:

    如果是 LPCM(例如未压缩),则使用采样率。

    在伪代码中:

    double sampleRate = audioFile.getSampleRate();
    // you may also need to account for channel count here
    size_t sampleCount = sampleRate * (8-2);
    

    -- 其中(8-2)代表“2s和8s之间”

    【讨论】:

    • 有时您必须知道所有通道的样本数。例如,如果您正在执行交错渲染或使用后备缓冲区来减少文件 i/o。这很简单:size_t sampleCount = sampleRate * (8-2) * audioFile.getChannelCount();
    • 谢谢!究竟什么是减少文件 i/o 的后备缓冲区..对不起,但我是音频新手..也请查看 stackoverflow.com/questions/4896472/… 以了解相关问题
    • 不客气。后备缓冲区是存储在内存中的中间或辅助音频样本缓冲区(数组)的术语。例如:如果您正在处理不适当的音频或减少磁盘 i/o,您将使用一个。在你问之前;) - “处理不当”是用于渲染(例如过滤或应用效果)到输入缓冲区以外的缓冲区的术语。用处理过的样本数据覆盖输入数据称为就地处理。如果您正在录制音频,则每个写入请求需要写入超过 64 个样本,您将使用更大的内存缓冲区(续)
    • 并在缓冲区填满后写入 2MB。否则,对磁盘的写入将很频繁且相对较慢(除非您用于编写的 api 已经为您优化了该方面并使用了缓冲区)。
    • 好的。再次感谢一吨! :) 64 个样本(每个 8 位)将产生 512 位。 2MB有什么意义?我知道只有在整个 2MB 缓冲区填满后,您才会写入磁盘。关于您之前的评论,利用后备缓冲区减少文件 i/o 意味着我们同时考虑所有通道,然后分别写入磁盘而不是每个通道。我理解正确了吗?
    【解决方案2】:

    您可以为此目的使用音频播放器的持续时间属性..

    duration 属性给出了音频播放器当前对象(即当前正在播放的文件)的持续时间

    那么你可以将所有的音频文件一个一个地提供给播放器,并检查它们的持续时间并执行所需的操作......

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2013-07-08
      • 2011-07-09
      • 2012-03-24
      • 2012-11-13
      • 2016-06-19
      • 1970-01-01
      相关资源
      最近更新 更多