C语言钢琴,发出sdl声音

C语言钢琴,发出sdl声音,c,audio,sdl,C,Audio,Sdl,我不想用C1999来制造我自己的钢琴,但声音输出有一些问题。 程序检测存在的键,以及它们被按下的时间。。。 如果按下某个键,它将启动一个新的threadphthread,该线程将播放指定的wav文件,如果不再按下该键,线程将被终止。 SDL加载到main中,音频设备在main中打开为global。 但问题是,即使声音线程终止,SDL也会继续播放 所以我想要的是: 一个声音功能,一次最多可以播放8个声音,现场播放,不将完整文件加载到thr缓冲区并开始播放,可以全局初始化 对不起我的语言: Prog

我不想用C1999来制造我自己的钢琴,但声音输出有一些问题。 程序检测存在的键,以及它们被按下的时间。。。 如果按下某个键,它将启动一个新的threadphthread,该线程将播放指定的wav文件,如果不再按下该键,线程将被终止。 SDL加载到main中,音频设备在main中打开为global。 但问题是,即使声音线程终止,SDL也会继续播放

所以我想要的是: 一个声音功能,一次最多可以播放8个声音,现场播放,不将完整文件加载到thr缓冲区并开始播放,可以全局初始化

对不起我的语言:


Programm适用于Arch Linux系统,但所有平台的Unix、OSX和Ms Windows都会更好。

即使您认为您的线程正在播放声音,也不应该这样想。你的线程让SDL开始播放那个声音,所以如果你杀死了你的线程,就没有什么可以停止播放那个声音了

实际上,您根本不需要线程:

按下一个键后,在下一个空闲频道开始播放声音。 跟踪这对密钥,通道 如果密钥被释放,请查找密钥、通道对,并使用该特定通道作为参数调用Mix_HaltChannel。 编辑:

已经找到了: 混合体积通道,体积