0xAA55 发表于 2014-7-14 07:31:06

【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的话就没有任何意义了。

music 发表于 2020-4-30 11:23:42

非常感谢,正好可以学习一下了。
页: [1]
查看完整版本: 【C】C语言写的FLAC文件播放器