Saya menganggap kode ini berjalan dalam loop ketat dan dimaksudkan untuk memblokir snd_pcm_writen()
. Tingkat sampel tidak diberikan; Saya berasumsi 48kHz karena semua angka terbagi dengan baik.
Apa yang menurut saya terjadi di sini adalah sebagai berikut:
snd_pcm_write()
tidak menjamin untuk menulis semua bingkai yang disediakan (nilai pengembalian hanya pernah diperiksa untuk kondisi kesalahan). Dilihat dari loggingsnd_pcm_avail()
itu sebenarnya memakanavail_min
atau144
frame pada masing-masing. Ini adalah audio 3ms.- Dengan asumsi audio tidak berjalan pada titik ini, setelah dua kali penulisan, jumlah bingkai dalam buffer sama dengan
start_threshold
- di288
sampel; keluaran audio dimulai - panggilan ke
printf()
blokir, dan sepertinya saya ingatsnd_pcm_avail()
itu harus disinkronkan dengan perangkat keras keluaran audio dan mungkin juga diblokir. Karena Anda sekarang berada 6 md sebelum pemutaran, sangat mungkin buffer mengering selama panggilan ketigasnd_pcm_writen()
Singkatnya, Anda tidak boleh memanggil printf()
pada titik ini, dan Anda mungkin perlu mengkompensasi fakta bahwa snd_pcm_writen()
tidak menghabiskan semua bingkai di pSpeakerBuf
Bagaimana cara menjalankan beberapa perintah latar belakang di bash dalam satu baris?
akses bersamaan ke file linux