linux系统获取MP3的专辑封面图片

linux系统获取MP3的专辑封面图片

背景

我们播放的MP3格式的音乐的时候,有的显示专辑封面图片,有的不显示,这是为什么呢?是这样的,我们看到的MP3文件不仅仅包含听到的那些声音,其实作为一个MP3文件它还包含描述这首歌的一些文字信息(标题名、作者、专集名、年代、风格等等)和歌词信息,还有内嵌的专辑封面图片等信息。但是并不是所有的MP3文件制作的时候都内嵌了图片,所以有的MP3文件播放的时候,可以显示专辑封面图片,有的不能显示专辑封面图片。一些音乐播放器有修改歌曲封面图片的功能,这里我们来讲一讲怎么自己编写代码(C语言实现)来提取歌曲封面图片。

MP3文件构成

MP3文件(二进制文件)分为三个部分:ID3V2标签、音频数据和ID3V1标签,其中ID3V2标签位于MP3文件的开头,中间为音频数据,ID3V1标签位于MP3文件的结尾。ID3V1只是包含歌曲名、作者、专集名、日期和歌曲风格等基本信息,而ID3V2标签不但包含ID3V1标签的所有信息,还包含专辑封面图片信息,MP3文件的构成如下图所示。

注:封面图片一般是JPEG格式的图片,也有PNG、BMP格式的文件,本文以JPEG格式的图片来讲解,其他格式的原理也是一样的。

实现原理

对MP3二进制文件进行解析,主要是对ID3V2标签进行解析,取得其中的专辑封面图片的数据,然后将图片数据保存为指定类型的图片(通过指定文件扩展名实现),存储到指

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,可以使用std::chrono库来获取当前时间的毫秒。可以使用以下代码来获取当前时间的毫秒数: ```cpp #include <chrono> int main() { auto now = std::chrono::system_clock::now(); auto ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now); auto value = ms.time_since_epoch().count(); printf("当前时间的毫秒数:%lld\n", value); return 0; } ``` 这段代码使用std::chrono::system_clock::now()函数获取当前时间,然后使用std::chrono::time_point_cast<std::chrono::milliseconds>将时间点转换为毫秒级别的精度。最后,使用time_since_epoch().count()函数获取时间点相对于纪元的毫秒数。 #### 引用[.reference_title] - *1* *2* [Linux c++获取本地毫秒级精确时间](https://blog.csdn.net/weixin_36162883/article/details/113377966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Linux获取系统当前时间(精确到毫秒)](https://blog.csdn.net/weixin_36140400/article/details/113901206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值