Tag: voip

跨平台声音API

我正在研究开发一个需要实时流式传输音频的应用程序。 我更喜欢使用一些用C或C ++编写的跨平台(windows / linux / BSD)开源库,即使使用相应的操作系统的Sound API编写它仍然是一种选择。 我已经阅读了一些关于各种声音库的内容,包括SFML,SDL和PortAudio。 不可否认,我还没有对FreeBSD和Linux中的Sound进行过充分的研究(这两者之间有多相似?) 主要要求是 从所选麦克风/麦克风获取音频以通过网络发送, 将数据发送到选择的输出设备, 处理声音(过滤,清理噪声,多路复用流等)但这可以在我拥有音频数据后完成,库本身不需要能够执行任何此操作。 具有相当低的延迟 我主要担心的是,这些提到的API似乎主要针对游戏(声音通常从磁盘加载,并且没有太多(如果有的话)录音,而不是通过网络流式传输,录制和播放之间同等重要。 有没有人对这些或其他声音API有任何指示/警告/建议,或者有关长远路径并在相应操作系统的API中实现这一点的优点/缺点? 注意:虽然这个:“要求我们推荐或找到书籍,工具,软件库,教程或其他场外资源的问题都是Stack Overflow的偏离主题”当一个人也认为“as他们倾向于吸引固执己见的答案和垃圾邮件“然后我不认为这个问题应该被关闭。 如上所述寻找这样一个库的人将很难找到任何东西,这个问题的答案几乎总结了所有可用的选项。 因此,这是“通常涵盖……程序员常用的软件工具”; 已接受答案的类别。

压缩PCM数据

我正在使用WinAPI – Wavefunction来创建一个记录麦克风X秒的录制程序。 我在网上搜索了一下,发现PCM数据太大了,通过套接字发送它会有问题…… 如何将其压缩到更小的尺寸? 任何简单/“便宜”的方式? 我也注意到,当我使用Wave API函数声明格式时,我正在使用此代码: WAVEFORMATEX pFormat; pFormat.wFormatTag= WAVE_FORMAT_PCM; // simple, uncompressed format pFormat.nChannels=1; // 1=mono, 2=stereo pFormat.nSamplesPerSec=sampleRate; // 44100 pFormat.nAvgBytesPerSec=sampleRate*2; // = nSamplesPerSec * n.Channels * wBitsPerSample/8 pFormat.nBlockAlign=2; // = n.Channels * wBitsPerSample/8 pFormat.wBitsPerSample=16; // 16 for high quality, 8 for telephone-grade pFormat.cbSize=0; 如您所见, pFormat.wFormatTag= WAVE_FORMAT_PCM; 也许我可以插入而不是WAVE_FORMAT_PCM其他东西,所以它会被立即压缩? 我已经检查了MSDN的其他值,虽然它们在我的Visual Studio中都不适合我… 那我该怎么办? 谢谢!