PIANO IN C,sdl 声音问题

Posted

技术标签:

【中文标题】PIANO IN C,sdl 声音问题【英文标题】:PIANO IN C, issue with sdl sound 【发布时间】:2017-06-09 07:25:11 【问题描述】:

我不想在 C(1999) 中构建自己的钢琴,但是(声音)输出存在一些问题。 该程序检测预置键,以及它们被按下的时间...... 如果按下某个键,它会启动一个新的thread(phthread),它应该播放指定的 wav 文件,如果不再按下该键,线程将被终止。SDL 在 main() 中加载,音频设备在 main to 中打开(作为全局)。 但问题是,即使声音线程终止,SDL 也会继续播放。

所以我想要什么: 一次最多可以播放 8 个声音的声音函数,“正在播放”(不要将完整的文件加载到 thr 缓冲区并开始播放),可以全局初始化

对不起我的语言:(

Programm 适用于 Arch Linux 系统,但全平台(Unix、OSX、Ms Windows)会更好。

【问题讨论】:

【参考方案1】:

即使您可能认为您的线程正在播放声音,但您不应该这样想。您的线程使 SDL 开始播放该声音,因此如果您终止线程,则没有任何东西可以停止播放该声音。

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

按下一个键时,在下一个空闲频道开始播放声音。 跟踪这对(键、通道) 如果键被释放,查找 (key, channel) 对并使用该特定通道作为参数调用 Mix_HaltChannel

【讨论】:

【参考方案2】:

编辑:

已经找到了: Mix_Volume(频道,音量)

【讨论】:

以上是关于PIANO IN C,sdl 声音问题的主要内容,如果未能解决你的问题,请参考以下文章

SDL_Mixer 声音问题

SDL 基准声音

如何像 SDL_Mixer 那样播放多种声音,但在 SDL2 中是原生的?

SDL_Mixer 设置声音位置

ncurses + SLD2 和 SDL2_Mixer:尝试播放 mp3 时没有声音

c++ SDL_mixer 错误,Mix_LoadWAV_RW with NULL src