GNU/Linux >> Belajar Linux >  >> Linux

ALSA:Cara mencegah underrun untuk speaker

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 logging snd_pcm_avail() itu sebenarnya memakan avail_min atau 144 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 - di 288 sampel; keluaran audio dimulai
  • panggilan ke printf() blokir, dan sepertinya saya ingat snd_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 ketiga snd_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


Linux
  1. 3 cara saya mengonfigurasi SSH untuk privasi

  2. Apa yang mendefinisikan pemutar musik open source tingkat atas untuk Linux?

  3. Hening Audio Fade – Dapatkan Tingkat Volume Paling Tenang untuk Bekerja

  1. LosslessCut – Alat Super Cepat untuk Memangkas / Memotong Video &Audio

  2. Ardor – Editor Audio untuk Merekam dan Mencampur Suara

  3. Tracktion 7 – Workstation Audio Digital Berfitur Lengkap untuk Pembuat Musik

  1. SMPlayer – Pemutar Media Gratis untuk Semua Format

  2. Sayonara Player – Pemutar Audio Cepat dan Ringan untuk Linux

  3. pengaturan sysctl untuk beban tinggi dan mencegah DDoS