c++读取MP3文件专辑图片、歌手名等ID3v2信息

本文介绍了如何使用C++和libzplay库来读取MP3文件的ID3v2标签,包括专辑图片和歌手信息。通过创建一个HTTP服务器,JavaScript调用该服务来获取信息。libzplay是一个功能强大的音频处理库,支持多种音频格式,并提供了将二进制图片数据转化为Base64字符串的功能。示例代码展示了实现过程,并提到了在Windows应用中直接显示位图的方法。
摘要由CSDN通过智能技术生成

        之前用javascript做了一个本地音乐播放器(javascript不依赖库开发windows应用程序_sdxjwkq01的博客-CSDN博客_js开发windows应用程序),最近想加个显示MP3内嵌图片和专辑信息的功能,一开始找了一个JavaScript的库,id3.js,可惜不支持IE9,只能选择用c++读取,先用c++实现一个http服务器,服务器负责解析MP3文件并返回歌ID3V2信息,JavaScript先用wscript.shell启动服务器,再通过get方法请求返回相应页面到iframe里,或者可以用ajax。

        这次c++的实现用到了libzplay.dll这个库,功能非常强大,可以播放MP3,flac等众多音频,还可以提取相关专辑信息,相关功能它的头文件解释的很明白。

libzplay官方下载地址https://sourceforge.net/projects/libzplay/files/2.02/libzplay-2.02-sdk.7z/download,里面包含dll文件,a文件,lib文件等,还有相应的帮助文档。

下面是libzplay.h头文件里的一段,dll里定义的结构体这里面也可以看到它的结构

virtual int __stdcall SetSettings(TSettingID nSettingID, int nValue) = 0;
virtual int __stdcall GetSettings(TSettingID nSettingID) = 0;
virtual int __stdcall GetVersion() = 0;
virtual char * __stdcall GetError() = 0;	
virtual wchar_t * __stdcall GetErrorW() = 0;
virtual TStreamFormat __stdcall GetFileFormat(const char *pchFileName) = 0;	
virtual TStreamFormat __stdcall GetFileFormatW(const wchar_t *pchFileName) = 0;
virtual int __stdcall EnumerateWaveOut() = 0;
virtual int __stdcall GetWaveOutInfo(unsigned int nIndex, TWaveOutInfo *pWaveOutInfo) = 0;
virtual int __stdcall GetWaveOutInfoW(unsigned int nIndex, TWaveOutInfoW *pWaveOutInfo) = 0;
virtual int __stdcall SetWaveOutDevice(unsigned int nIndex) = 0;
virtual int __stdcall OpenFile(const char *sFileName, TStreamFormat nFormat)= 0;	
virtual int __stdcall OpenFileW(const wchar_t *sFileName, TStreamFormat nFormat)= 0;		
virtual int __stdcall AddFile(const char *sFileName, TStreamFormat nFormat)= 0;
virtual int __stdcall AddFileW(const wchar_t *sFileName, TStreamFormat nFormat)= 0;
virtual int __stdcall OpenStream(int fBuffered, int fDynamic, const void *sMemStream, unsigned int nStreamSize, TStreamFormat nFormat) = 0;
virtual int __stdcall PushDataToStream(const void *sMemNewData, unsigned int nNewDataize) = 0;
virtual int __stdcall IsStreamDataFree(const void *sMemNewData) = 0;
virtual void __stdcall GetDynamicStreamLoad(TStreamLoadInfo *pStreamLoadInfo) = 0;
virtual void __stdcall GetStreamInfo(TStreamInfo *pInfo) = 0;
virtual void __stdcall GetStreamInfoW(TStreamInfoW *pInfo) = 0;
virtual int __stdcall Close() = 0;
virtual int __stdcall Play() = 0;
virtual int __stdcall PlayLoop(TTimeFormat fFormatStartTime, TStreamTime *pStartTime, TTimeFormat fFormatEndTime, TStreamTime *pEndTime, unsigned int nNumOfCycles, unsigned int fContinuePlaying) = 0;
virtual int __stdcall Seek(TTimeFormat fFormat, TStreamTime *pTime, TSeekMethod nMoveMethod) = 0;
virtual int __stdcall ReverseMode(int fEnable) = 0;
virtual int __stdcall Stop() = 0;
virtual int __stdcall Pause() = 0;
virtual int __stdcall Resume() = 0;
virtual void __stdcall GetPosition(TStreamTime *pTime) = 0;
virtual int __stdcall SetMasterVolume(unsigned int nLeftVolume, unsigned int nRightVolume) = 0;
virtual int __stdcall SetPlayerVolume(unsigned int nLeftVolume, unsigned int nRightVolume) = 0;
virtual void __stdcall GetMasterVolume(unsigned int *pnLeftVolume, unsigned int *pnRightVolume) = 0;
virtual void __stdcall GetPlayerVolume(unsigned int *pnLeftVolume,unsigned int *pnRightVolume) = 0;
virtual int __stdcall GetBitrate(int fAverage) = 0;
virtual void __stdcall GetStatus(TStreamStatus *pStatus) = 0;
virtual int __stdcall MixChannels(int fEnable, unsigned int nLeftPercent, unsigned int nRightPercent) = 0;
virtual void __stdcall GetVUData(unsigned int *pnLeftChannel, unsigned int *pnRightChannel) = 0;
virtual int __stdcall SlideVolume(int fFormatStart, TStreamTime *pTimeStart, unsigned int nStartVolumeLeft, unsigned int nStartVolumeRight, int fFormatEnd, TStreamTime *pTimeEnd, unsigned int nEndVolumeLeft,unsigned int nEndVolumeRight) = 0;
virtual int __stdcall EnableEqualizer(int fEnable) = 0;
virtual int __stdcall SetEqualizerPoints(int *pnFreqPoint, int nNumOfPoints) = 0;
virtual int __stdcall GetEqualizerPoints(int *pnFreqPoint, int nFreqPointNumber) = 0;
virtual int __stdcall SetEqualizerParam(int nPreAmpGain, int *pnBandGain,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值