【发布时间】:2015-07-28 13:09:30
【问题描述】:
我目前正在使用 snd_pcm_writei 播放一个声音文件,该文件以前加载到一个短数组(16 位 PCM 格式)中。为了播放这个声音,我创建了一个缓冲区(short*),其中包含一个句点(或片段)。然后,我使用一个 while 循环来调用 snd_pcm_writei 这给了我那一行:
int err = snd_pcm_writei(handle, buffer, frames);
理解它的工作原理很简单,一切正常,我能听到声音。但是,我想尝试使用 mmap 而不是 writei,但我真的不明白。 我面临缺乏文档和明确的例子。 谁能解释 mmap 如何与 alsa 一起工作,以及如何将我的代码转换为使用 mmap 的东西?基本上,我仍然想使用缓冲区播放我的数组中的内容(所以一个短的数组,大小为一个句点)。谢谢。
【问题讨论】:
-
您希望从使用 mmap 中获得什么?
-
第一个原因是我很好奇,我想了解其中的区别,并能够让它发挥作用。我也希望这可以减少延迟(缓冲区稍微短一些),但我不确定会不会是这样......?