c++ libmpg123读取整数编码mp3时强制浮点输出

iszxjhcz  于 2022-12-05  发布在  其他
关注(0)|答案(3)|浏览(166)

我使用libsndfile读取音频文件,但MP3不可用。
所以,我想用libmp 123来读取mp3文件。
我很容易就找到了如何读取一个“short int”编码文件,然后将读取的数据转换为浮点数[-1.0..1.0]。
我的问题是:“libmp 123可以像libsndfile一样自动执行此操作吗?”

8i9zcol2

8i9zcol21#

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

mi7gmzs6

mi7gmzs62#

对我有用。
我在自己的程序中使用libmp123。
我希望将mp3数据作为浮点数加载,但要使用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_编码= 208(已签名_16)
总而言之,我希望有一个等同于“sf_readf_float”的http://www.mega-nerd.com/libsndfile/api.html#readf

watbbzwu

watbbzwu3#

这对我很有效:

int ret;
  mpg123_handle *m = mpg123_new(NULL, &ret);
  mpg123_param(m, MPG123_ADD_FLAGS, MPG123_FORCE_FLOAT, 0.);

相关问题