2017-01-30 46 views
2

私は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); 
} 

答えて

2

再生の例では、同じバッファ16回を果たしている代わりに、ループ内ループカウンタiで行わ何もありませんたった1/3秒です。

同様に、録音の例では、ループを使用して、より長い時間録音する方法を示します。 (実際のプログラムでは、 "x完了"を印刷するのではなく、記録されたサンプルを使って何かをするでしょう)

+0

これは完全に理にかなっています。編集と回答の両方に感謝します。 –

関連する問題