ALSA聲音編程


 

1. ALSA設備驅動將ALSA設備描述分為四層,從上到下為:


 

default

default:0

plughw:0,0

hw:0,0

  不同的層次,對設備的控制權限不同,比如hardware parameters 的period/buffer size 需要在plughw:0,0 和 hw:0,0 這兩層才會作用。

  

2. Hardware Parameters && Software Parameters


 

  對alsa-core設置,叫做Software Parameters,而對audio interface的設置叫做Hardware Parameters。

 

3. XRUN


 

  xrun指的是,聲卡period一到,引發一個中斷,告訴alsa驅動,要填入數據,或讀走數據,但是,問題在於alsa的讀取和寫入操作必須用戶調用 writei和readi才會發生的,它不會去緩存數據。如果上層沒有用戶調用writei和readi,那么就會產生 overrun(錄制時,數據都滿了,還沒被alsa驅動讀走)和underrun(需要數據來播放,alsa驅動卻不寫入數據),統稱為xrun。

這個東西,需要用一些函數來設置,比如snd_pcm_sw_params_set_silence_threshold(),是針對playback 的,就是設置當xxx的情況下,就用silence來寫入hardware buffer。至於xxx情況,以及寫入多少silence,我都不是很清楚,還有,比如xrun到什么情況下,可以停止這個設備等等函數。一般情況下用 alsa驅動的默認的xrun處理策略。

 

if(err == -EPIPE){

	snd_pcm_prepare(handle);
	err = snd_pcm_readi(handle, buf, samples);

	if(err < 0)
		printf("alsa read the pcm data error %s\n", snd_strerror(err));
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM