我花了一整天的时间在这上面并且让我疯狂
有人知道将mp3解码为简单的16位pcm(波形)文件的简单方法吗?我需要一些我可以随商业计划发货的东西所以我更喜欢.lib
我找到了libmpg123.dll,但我无法弄清楚如何让我的程序在msvc 2010中与dll链接。我知道我需要添加一个引用但是当我点击“添加新引用”时我得到的是带有项目名称和项目目录标题的空对话框,无需单击。我尝试使用lib工具将.dll转换为.lib,但一直抱怨.def文件格式不好。
我尝试构建madplayer,但我不能使用id3tag.h并且没有关于使用libmad的文档或示例我可以找到
Lame看起来太大了
快速解决.lib问题的任何想法都可以链接并完成它
谢谢,史蒂夫
答案 0 :(得分:4)
mpg123没问题。我可以看到你在获取静态库(.lib)方面遇到了麻烦。
有两种获取lib的方法:
通过转换.def文件来使用lib工具。您不需要源,因为二进制包已包含.h和.def文件。我将详细解释:
但请注意,'Framework and References'属性页用于设置对.NET Framework程序集,COM组件或外部项目(MSDN)的引用,在您的情况下,您应该指定其他链接器依赖项您的项目[Configuration Properties =>链接器=>输入=>附加依赖]。
答案 1 :(得分:1)
Olexander的答案很有效,非常感谢你
当你下载mpg123-1.15.1-x86.zip时,我有一件小事要补充
你会看到libmpg123-0.dll(dll)和libmpg123-0.dll.def用于制作.lib的东西,如上所述。最好将名称更改为libmpg123-0.def,否则会查找名为libmpg123-0.dll的dll,这不是很好
除此之外,它很有效。几年前我无法相信这些信息不在互联网上。感谢Olexander并感谢stackoverflow仅供参考,这是一个使用mpg123的简单mp3解码器
#include "mpg123/mpg123.h"
#define INBUFF 16384
#define OUTBUFF 32768
void loadMp3File(const char* filename)
{
mpg123_handle *mh;
unsigned char *buffer;
size_t buffer_size;
size_t done;
int err;
int channels, encoding;
long rate;
mpg123_init();
mh = mpg123_new(NULL, &err);
buffer_size = mpg123_outblock(mh);
buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char));
/* open the file and get the decoding format */
mpg123_open(mh, filename);
mpg123_getformat(mh, &rate, &channels, &encoding);
/* set the output format and open the output device */
int m_bits = mpg123_encsize(encoding);
int m_rate = rate;
int m_channels = channels;
/* decode and play */
for (int totalBtyes = 0 ; mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK ; ) {
totalBtyes += done;
}
/* clean up */
free(buffer);
mpg123_close(mh);
mpg123_delete(mh);
mpg123_exit();
}