【发布时间】:2016-04-28 06:33:25
【问题描述】:
我是 ALSA 的新手,我已经设法在 SND_PCM_ACCESS_RW_INTERLEAVED 模式下播放 PCM 声音。我的问题是我无法找到一种方法使该模式对我正在尝试做的事情有用。 (如果有人能告诉我如何,我会很高兴阅读)。我一直在阅读这种 MMAP 模式,但要找到它的简单示例并不容易。我想知道这是否是我需要的以及如何实现它。
我想做的是让我的小游戏(一个简单的太空射击)在我射击或被射击时立即播放声音。如果敌人在播放另一种声音时射击,声音应根据需要叠加并饱和,但不应中断任何声音事件。换句话说,我需要能够编辑即将播放的字节。
在我尝试 MMAP 的无用尝试中(实际上并不知道它在实践中是如何工作的;只是遵循模糊的理论说明),我设置了与 SND_PCM_ACCESS_RW_INTERLEAVED 类似的所有内容,但将其更改为 SND_PCM_ACCESS_MMAP_INTERLEAVED。然后我调用 snd_pcm_avail_update,它似乎工作并返回大量可用帧。之后,我调用 snd_pcm_mmap_begin,传递参数,之前用合理的数字(例如 10)填充“帧”。该函数失败并返回错误代码 -77。我一直没能找到那是什么意思。区域数组保持不变。
这个错误是什么意思?我在哪里可以获得错误列表?我怎样才能克服它?有没有一个简单的好例子来说明如何使用 MMAP(或其他东西)来执行或多或少类似于我正在尝试做的事情?
感谢您的帮助:)
【问题讨论】: