【发布时间】:2017-06-15 07:52:30
【问题描述】:
我正在运行 Debian OS 的 ARM 电脑上使用“C”语言开发 linux alsa(高级 linux 声音架构)库。我正在尝试录制和播放声音。我的示例项目(一个用于录制,一个用于播放)在for 循环中完成工作。我的意思是,读取或写入缓冲区。这个 for 循环使用的目的是什么?
例如http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_min_8c-example.html,播放声音的官方示例。他们为声音数据创建一个缓冲区并随机填充。没关系,但他们将此缓冲区数组写入到循环 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: %s\n", snd_strerror(frames));
break;
}
if (frames > 0 && frames < (long)sizeof(buffer))
printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames);
}
for (i = 0; i < 10; ++i) {
if ((err = snd_pcm_readi (capture_handle, buffer, buffer_frames)) != buffer_frames) {
fprintf (stderr, "read from audio interface failed (%s)\n",
err, snd_strerror (err));
exit (1);
}
fprintf(stdout, "read %d done\n", i);
}
【问题讨论】: