在linux下怎样用c语言获取MP3时长?最好有个例子!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux下怎样用c语言获取MP3时长?最好有个例子!相关的知识,希望对你有一定的参考价值。

1、主要是要解析MP3格式,计算MP3文件长度,然后根据播放每帧需 26ms,计算出播放时间。文件IO读写,就用fopen\fread系列酒可以。

2、#include <mmsystem.h>//包括多媒体API,标准c语言没有相关接口函数
unsigned char str[256];
sprintf(timebuffer,"status %s position",MusicName);//timebuffer输出缓存区,格式字符串到timebuffer,MusicName为播放歌曲的完整路径
mciSendString(Music,str,256,NULL);//获取时间,单位为毫秒
curtime=atoi(str)/1000;//单位化为秒,后面可以根据需要处理时间
参考技术A 主要是要解析MP3格式,计算MP3文件长度,然后根据播放每帧需 26ms,计算出播放时间。
文件IO读写,就用fopen\fread系列酒可以。
代码请看参考资料:
(如果时间充裕,可以看看mplayer源码,免费的)

参考资料:http://blog.csdn.net/hongjiujing/article/details/2148370

参考技术B 百度id3v2, 我就说这么多了, 剩下靠自己吧

Linux下C/C++动态库在运行时是怎样加载进来的

在linux上,你在ps中说的那种"将动态库作为一个参数传到程序里"的使用方式,是通过dlopen函数将.so加载到当前进程中,并且通过ld.so将.so"链接"进当前进程。这个"链接"过程包括:查找未定义符号在当前进程中的地址、分配数据/代码/bss段内存(数据初始化全局变量、代码段重定位)、执行constructor函数等。之后,可以使用dlsym在已知符号名的情况下通过符号名查找符号对应的地址。这个符号可以是一个全局变量、全局函数等。在你说的C++中,重载的函数也可以理解为全局函数,会有一个属性为weak的符号。该符号的符号名如果不做修改,默认按照System V的C++ API命名规范命名(以保证linux下不同编译器编译出来的.so和.o可以通用)。但如果使用extern "C"修饰之后,变成C的函数名,则无名称修饰,便于使用。

作者:yin jie
链接:https://www.zhihu.com/question/29988788/answer/46352593
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考技术A linux调用库的方式有三种:1.静态链接库2.动态链接库3.动态加载库其中1,2都是在编程时直接调用,在链接时加参数-l进行链接第三种需要在编程时使用dlopen等函数来获取库里面函数的定义,然后进行调用.不过对于没有提供头文件的动态库,只能dlopen等函数来调用 参考技术B 在linux上,你在ps中说的那种"将动态库作为一个参数传到程序里"的使用方式,是通过dlopen函数将.so加载到当前进程中,并且通过ld.so将.so"链接"进当前进程。这个"链接"过程包括:查找未定义符号在当前进程中的地址、分配数据/代码/bss段内存(数据初始化全局变量、代码段重定位)、执行constructor函数等。之后,可以使用dlsym在已知符号名的情况下通过符号名查找符号对应的地址。这个符号可以是一个全局变量、全局函数等。在你说的C++中,重载的函数也可以理解为全局函数,会有一个属性为weak的符号。该符号的符号名如果不做修改,默认按照System V的C++ API命名规范命名(以保证linux下不同编译器编译出来的.so和.o可以通用)。但如果使用extern "C"修饰之后,变成C的函数名,则无名称修饰,便于使用。

以上是关于在linux下怎样用c语言获取MP3时长?最好有个例子!的主要内容,如果未能解决你的问题,请参考以下文章

linux下使用ffmpeg将amr转成mp3

Linux下怎样让光驱随系统启动时自动挂载?最好能有个例子,我是在虚拟机的linux系统操作。

怎样使用C语言列出某个目录下的文件?

请教java如何实现获取一段mp3的总时长

Linux下 有没有批量将 WAV 格式文件转换为 MP3格式文件的工具软件?

怎么获取一段mp3格式的音频的播放时长