微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么ALSA示例使用循环播放/捕获?

我正在运行Debian OS的ARM PC上以“C”语言开发linux alsa(高级linux声音体系结构)库。 我正在尝试录制和播放声音。 为我的目的的示例项目(一个用于录制,另一个用于播放)在for循环中执行该作业。 我的意思是,读或写缓冲区。 这个循环用法的目的是什么?

例如,在http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_min_8c-example.html中 ,播放声音的官方示例。 他们为声音数据创build一个缓冲区并随机填充它。 这是okey,但是他们写这个缓冲区数组来响应16个循环内的for循环。 循环内的循环计数器i没有做任何事情:

for (i = 0; i < 16; i++) { frames = snd_pcm_writei(handle,buffer,sizeof(buffer)); if (frames < 0) frames = snd_pcm_recover(handle,frames,0); if (frames < 0) { printf("snd_pcm_writei Failed: %sn",snd_strerror(frames)); break; } if (frames > 0 && frames < (long)sizeof(buffer)) printf("Short write (expected %li,wrote %li)n",(long)sizeof(buffer),frames); }

与logging样本相同:

for (i = 0; i < 10; ++i) { if ((err = snd_pcm_readi (capture_handle,buffer_frames)) != buffer_frames) { fprintf (stderr,"read from audio interface Failed (%s)n",err,snd_strerror (err)); exit (1); } fprintf(stdout,"read %d donen",i); }

使用ALSA查找进程声音快速

我如何将控件映射到它的设备?

更换pyalsaaudio上的声卡

Linux,C ++audio捕捉(只​​是麦克风)库

Arch Linux中的audio

ALSA:防止扬声器不足的方法

编码WAV文件提前切断

ALSAaudio和YouTube

如何防止扬声器在Android上打开ALSA时popup?

播放创build的audio数据有噪音和定期点击声音

播放示例播放相同的缓冲区十六次,以便获得五秒的噪音,而不是只有三分之一秒。

同样,录音示例使用循环来显示如何录制更长的时间。 (在一个真正的程序中,你会用记录的样本做一些事情,而不是只打印“read x done”。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐