是否有C中全双工ALSA连接的示例?我已经读到它受支持,但我看到的所有介绍性示例都记录或播放了一个声音样本,但我想有一个处理程序可以同时为我的VoIP应用程序。
非常感谢您的帮助, 延
答案 0 :(得分:4)
一些名叫艾伦的人发表了这篇很好(但很旧)的教程,Full Duplex ALSA,用C语言编写。
答案 1 :(得分:2)
您提供两个手柄的链接并依次泵送它们。 这里的阿兰代码已被删除和评论。
// the device plughw handle dynamic sample rate and type conversion.
// there are a range of alternate devices defined in your alsa.conf
// try:
// locate alsa.conf
// and check out what devices you have in there
//
// The following device is PLUG:HW:Device:0:Subdevice:0
// Often simply plug, plughw, plughw:0, will have the same effect
//
char *snd_device_in = "plughw:0,0";
char *snd_device_out = "plughw:0,0";
// handle constructs to populate with our links
snd_pcm_t *playback_handle;
snd_pcm_t *capture_handle;
//this is the usual construct... If not fail BLAH
if ((err = snd_pcm_open(&playback_handle, snd_device_out, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
fprintf(stderr, "cannot open output audio device %s: %s\n", snd_device_in, snd_strerror(err));
exit(1);
}
// And now the CAPTURE
if ((err = snd_pcm_open(&capture_handle, snd_device_in, SND_PCM_STREAM_CAPTURE, 0)) < 0) {
fprintf(stderr, "cannot open input audio device %s: %s\n", snd_device_out, snd_strerror(err));
exit(1);
}
然后配置并泵送它们。
戒指mod可以完成这项工作:http://soundprogramming.net/programming_and_apis/creating_a_ring_buffer或者你可以使用上面概述的alans方式。
答案 2 :(得分:2)
这是我对Linux / Unix VoIP项目的第一个要求,我需要了解所有可用的音频设备功能和名称。然后我需要使用这些设备来捕获和播放音频。
为了每个人的帮助,我创建了一个(.so)库和一个示例应用程序,演示了如何在c ++中使用这个库。
我的库的输出就像 -
[root@~]# ./IdeaAudioEngineTest
HDA Intel plughw:0,0
HDA Intel plughw:0,2
USB Audio Device plughw:1,0
该库提供捕获和回放实时音频数据的功能。
IdeaAudio library with Duplex Alsa Audio
中提供了包含文档的完整源代码图书馆来源现已在github.com
打开答案 3 :(得分:0)
另请参阅latency.c
来源的alsa-lib
;在ALSA维基上: