[libmpg123强制浮点输出,当我使用整数编码读取mp3时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[libmpg123强制浮点输出,当我使用整数编码读取mp3时相关的知识,希望对你有一定的参考价值。

我使用libsndfile读取音频文件,但无法使用MP3。

所以,我想使用libmp123读取mp3文件。

我很容易找到如何读取“短整数”编码文件,然后将读取的数据转换为浮点数[-1.0 ... 1.0]。

我的问题是:“ libmp123可以像libsndfile一样自动执行此操作吗?”

答案

您看过example program吗?您可以使用mpg123_format_none清除允许的格式/编码对列表,然后使用mpg123_format添加仅包含所需编码的新格式/编码对(例如,MPG123_ENC_FLOAT_32)。

另一答案

它确实对我有用。

我在自己的程序中使用libmp123。

[我希望将mp3数据加载为float格式,但例如以mp3'short int'编码。

int err;
err = mpg123_format_none(m_handle);
std::cout << err << std::endl;
err = mpg123_format(m_handle,m_rate,m_channels, MPG123_ENC_FLOAT_32);
std::cout << err << std::endl;

... 
if (mpg123_read(m_handle,
               (unsigned char*)titi,
               nb_framesToRead*mpg123_encsize(m_encoding),
               &nb_framesRead) != MPG123_OK) {
        std::cerr << mpg123_strerror(m_handle);
}

titi是一个预先分配的浮点表。

m_encoding = 208(SIGNED_16)

总而言之,我希望有一个等同于“ sf_readf_float” http://www.mega-nerd.com/libsndfile/api.html#readf

以上是关于[libmpg123强制浮点输出,当我使用整数编码读取mp3时的主要内容,如果未能解决你的问题,请参考以下文章

将强制转换应用于整数和浮点除法的结果:这里发生了啥?

python中要使一个浮点变为整数需要啥函数强制代换?

如何将浮点值转换为具有精确精度的整数,例如 123.3443 到 1233443?

将两个浮点值存储在一个浮点变量中

从零开始开发标准的s57电子海图第十二篇 编码原则与记录结构(共一百篇)

在编译时强制进行狭窄的隐式强制