【发布时间】:2020-11-20 07:57:30
【问题描述】:
因此,在 Windows 上,我编写了一个 VOIP 程序,该程序使用 Windows 多媒体系统 (MMSystem) 并以小块(每约 30 毫秒长)记录来自麦克风的 PCM 音频,将这些数据发送给另一个用户,然后播放它到扬声器。
现在,我想使用 ALSA 在 Linux 上制作相同的程序,它似乎不像 MMSystem 那样简单。录音部分很简单,但播放的音频块之间有一些静音间隙。你看,在 MMSystem 中的工作流程很简单:
- 添加缓冲区#1,
- 添加缓冲区#2,
- 播放缓冲区 #1,
- 播放缓冲区 #2,
- 等到缓冲区 #1 完成,
- 添加缓冲区#1,
- 播放缓冲区 #1,
- 等到缓冲区 #2 完成,等等。
但是 ALSA 没有这个“等到缓冲区 #n 完成”,所以我想我可以添加 2000 帧,播放,看看还有多少帧可以播放?例如,如果一个缓冲区是 1000 帧,我可以等到剩下
那么,如何在 ALSA 中实现类似于 MMSystem 的工作流程呢?
【问题讨论】:
-
投票结束,因为 “寻求书籍、工具、软件库等的推荐”.... StackOverflow 致力于帮助解决编程代码问题。您的 Q 可能更适合 Super User,但请阅读他们关于主题问题的帮助部分。并且请先阅读Help On-topic 和Help How-to-ask,然后再在此处发布更多问题。祝你好运。