【C】C语言写的FLAC文件播放器
本程序借助StreamSound进行流的形式播放声音,然后借助libFLAC进行FLAC文件的解码,把两者结合起来实现了FLAC文件的播放。硬盘太慢的话效果会很差的。
有关FLAC和libFLAC的信息参见此帖:http://www.0xaa55.com/thread-711-1-1.html
有关StreamSound的信息则参见此帖:http://www.0xaa55.com/thread-693-1-1.html
BIN:
SRC:
经过我的精心调试它已经完美支持无缝播放了。只要你的FLAC文件能被快速读取就行(也就是说太慢的硬盘,或者SD卡等设备或者直接播放网络上的文件会很作死。。)
libFLAC的解码流程就是你提供一堆回调函数(比如各种文件操作的回调、取得解码数据的回调、取得元数据的回调等),然后你去控制libFLAC进行一帧一帧地解码。一帧大概四千多字节,视文件而定。
而我的StreamSound的播放流程就是你提供一个填充缓冲区的回调函数,然后不断检测是否需要重新填充数据。当发现需要重新填充数据的时候,你就填充波形数据,它就播放,这就是流的形式的播放(你不断地填充数据,它不断地播放)。
要把这两者结合起来需要好好组织一下它们之间的关系。我的做法就是先初始化StreamSound,这个时候它会不断调用我的回调函数来请求波形声音数据。这个时候我就初始化libFLAC,通过控制它的解码来取得声音数据,然后将声音数据填充到StreamSound的缓冲区里。每次StreamSound请求数据的时候我就让libFLAC解码。最终就实现了FLAC文件的无缝播放。
说起来好像很简单,但是真要实践起来,写一个有价值的代码还是需要花点功夫的。光是写一个DEMO很简单,而要写一个能广泛用于各种用途的代码就需要周全的考虑。如果只是为了写一个DEMO的话就没有任何意义了。 非常感谢,正好可以学习一下了。
页:
[1]