【问题标题】:Audioread & Audioinfo returning differing number of total samples?Audioread 和 Audioinfo 返回不同数量的总样本?
【发布时间】:2019-12-02 17:27:44
【问题描述】:

我在尝试在 MATLAB 中读取信号时遇到了一个小问题。

audioread 函数将音频文件转换为其单独的样本。
audioinfo 函数检查音频文件并返回与信号相关的信息。

代码sn-p如下。

clear all;

%Read in the song
mySong = audioread('IowaFightSong.mp3');
%Get some information about the song
info = audioinfo('IowaFightSong.mp3')

我希望这两个函数具有相同数量的样本,但它们略有不同。

audioread 返回一个长度为 3,043,056 的数组
audioinfo 的 TotalSamples 值为 3,043,582

这 2 个值相差 526 个样本。

当我改为使用 MATLAB 的示例音频文件之一运行代码时

clear all

load handel.mat
audiowrite('handel.wav',y,Fs)

info = audioinfo('handel.wav')

y = audioread('handel.wav');

audioreadaudioinfo 的样本总数相同,均为 73,113。

我想知道是否有人可以解释这两个函数之间总样本的差异?

一个简单的解决方法是

clear all;

%Read in the song
mySong = audioread('IowaFightSong.mp3');
%Get some information about the song
info = audioinfo('IowaFightSong.mp3')

info.TotalSamples = length(mySong)
info.Duration = info.TotalSamples/info.SampleRate

【问题讨论】:

    标签: matlab audio signal-processing


    【解决方案1】:

    audioinfolimitations section 是这样说的:

    对于 Windows 7 或更高版本以及 Linux 平台上的 MP3 和 MPEG-4 AAC 音频文件,audioinfo 报告的样本可能比预期的要少。在 Linux 平台上,这是由于底层 GStreamer 框架的限制。

    limitations sectionaudioread 是这样说的:

    对于 Windows 7 或更高版本以及 Linux 平台上的 MP3、MPEG-4 AAC 和 AVI 音频文件,audioread 读取的样本可能比预期的要少。在 Windows 7 平台上,这是由于底层媒体基础框架的限制。在 Linux 平台上,这是由于底层 GStreamer 框架的限制。如果您需要样本准确的读数,请使用 WAV 或 FLAC 文件。

    基本上,两者都存在 MP3 文件样本报告不准确的问题,而 WAV 文件则不然,这就是 MATLAB 样本音频文件没有问题的原因。如建议的那样,如果准确的样本计数至关重要,您可能应该使用不同的格式。

    【讨论】:

      【解决方案2】:

      WAV(wave riff)文件存储给定数量的音频样本,从 1 到 1。

      mp3 文件不包含音频样本,而是保存有损压缩格式,其中样本不会单独转换为压缩格式,而是以一定数量的块或块的形式。因此 mp3 文件通常会截断或填充填充每个压缩块或块所需的样本数量。播放 mp3 得到的是解压缩后这些块中的数字,因此是向上或向下舍入的数字。 (并包含压缩伪影)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2021-02-16
        • 2020-06-13
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多