音频播放库 libZPlay(c++)
最近开发过程中用到了语音播放,查了一下,写一篇总结。
功能很强大的,有一个bass24,不开源但是提供了各个语言的调用接口和例子,因为项目设计不想额外带一个DLL,所以放弃了,于是有了libZPlay这个库。
libZPlay库集成了所有支持格式(mp3, mp2, mp1, ogg, flac, ac3, aac, oga, wav and pcm )的编码解码器。库本身是由WINAPI编写,你无须额外的库,也不需要MFC / .NET的支持,只能在Windows下运行。
库直接对声卡播放音乐,简单容易。仅仅3行代码(创建类,打开文件,开始播放),你就可以播放音乐。
使用所支持的编码器,你也同样可以直接从声卡上录制声音(microphone, line-in, CD, ...)和把录制的声音保存到磁盘。
简单,简单,再简单。。。。。。在你的应用程序中只需3行代码便可播放和录制声音。
一段播放mp3的示例:
/* * libZPlay example * * Play test.mp3 to sound card output. * */ #include <windows.h> #include <stdio.h> #include <conio.h> #include "libzplay.h" using namespace libZPlay; int main(int argc, char **argv) { printf("Playing test.mp3\n\nPress q to end\n\n"); // create class instance using class factory. ZPlay *player = CreateZPlay(); // open file int result = player->OpenFile("test.mp3", sfAutodetect); if(result == 0) { // display error message printf("Error: %s\n", player->GetError()); player->Release(); return 0; } // get song length TStreamInfo info; player->GetStreamInfo(&info); printf("Length: %02u:%02u:%02u:%03u\n\n", info.Length.hms.hour, info.Length.hms.minute, info.Length.hms.second, info.Length.hms.millisecond); // start playing player->Play(); // display position and wait for song end while(1) { // check key press if(kbhit()) { int a = getch(); if(a == 'q' || a == 'Q') break; // end program if Q key is pressed } // get stream status to check if song is still playing TStreamStatus status; player->GetStatus(&status); if(status.fPlay == 0) break; // exit checking loop // get current position TStreamTime pos; player->GetPosition(&pos); // display position printf("Pos: %02u:%02u:%02u:%03u\r", pos.hms.hour, pos.hms.minute, pos.hms.second, pos.hms.millisecond); Sleep(300); // wait 300 ms } // destroy class instance player->Release(); return 0; }