私はDebian OSを実行するARM PCの "C"言語のlinux alsa(先進Linuxサウンドアーキテクチャ)ライブラリに取り組んでいます。私は音を録音して再生しようとしています。私の目的のためのサンプルプロジェクト(録音と再生のためのもの)は、for
ループの中で仕事をします。つまり、バッファを読み書きします。ループ使用の目的は何ですか?ALSAの例で再生/キャプチャにループを使用するのはなぜですか?
たとえば、http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_min_8c-example.htmlでは、サウンドを再生する公式の例です。彼らは、サウンドデータのバッファを作成し、それをランダムに埋めます。これはokeyですが、このバッファ配列をサウンドデバイスのバッファに書き込んで、for
ループ内に16回ループします。
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);
}
同じrecording sampleとして:あなたは、ノイズの5秒を取得するよう
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);
}
これは完全に理にかなっています。編集と回答の両方に感謝します。 –