2013-01-18 34 views

回答

4

ALSA不提供混頻器的snd_pcm_prepare()的錯誤消息。如果您需要同時播放多個音頻流,則需要自行將它們混合在一起。

最簡單的方法是將WAV文件解碼爲float樣本,添加它們,並在將它們轉換回整數樣本時剪切它們。

或者,你可以嘗試打開默認音頻設備(和像「HW:0」硬件設備)多次,一次要播放的每個流,並希望DMIX ALSA插件被加載並將提供混合功能。

+0

alsa的混音器工具怎麼樣?我可以用它來混音嗎? –

+0

@LunarMushrooms我在談論將多個音頻流混合在一起,而不是用於管理音量級別的混音器控制實用程序。 –

+0

好的,謝謝澄清。 –

16

您可以配置ALSA的dmix插件以允許多個應用程序共享輸入/輸出設備。

一個例子的配置做,這是以下:

pcm.dmixed { 
    type dmix 
    ipc_key 1024 
    ipc_key_add_uid 0 
    slave.pcm "hw:0,0" 
} 
pcm.dsnooped { 
    type dsnoop 
    ipc_key 1025 
    slave.pcm "hw:0,0" 
} 

pcm.duplex { 
    type asym 
    playback.pcm "dmixed" 
    capture.pcm "dsnooped" 
} 

# Instruct ALSA to use pcm.duplex as the default device 
pcm.!default { 
    type plug 
    slave.pcm "duplex" 
} 
ctl.!default { 
    type hw 
    card 0 
} 

這將執行以下操作:

  • 創建使用dmix插件一個新的設備,它允許多個應用程序共享的輸出流
  • 創建另一個使用dsnoop它爲輸入流做同樣的事情
  • 將這些合併到一個新的duplex裝置將使用asym插件
  • 告訴ALSA使用新duplex設備作爲缺省設備
  • 告訴ALSA使用hw:0來控制默認裝置(命令alsamixer等)
  • 支持輸入和輸出

堅持這在~/.asoundrc/etc/asound.conf,你應該很好去。

欲瞭解更多信息,請參閱http://www.alsa-project.org/main/index.php/Asoundrc#Software_mixing

+2

天才!!!!強尼,你是英雄,是的。非常感謝沒有數百萬。偉大的工作,這是偉大的,我討厭PulseAudio,他們對他們的2013年和PA崩潰感到羞恥,使我們輕鬆。在哪裏Alsa是最好的永遠,只有我有你的腳本這個多輸出問題,其500%的工作。謝謝,保持最佳答案。 – YumYumYum

0

您可以使用此配置也

pcm.dmix_stream 
    { 
     type dmix 
     ipc_key 321456 
     ipc_key_add_uid true 
     slave.pcm "hw:0,0" 
    } 


    pcm.mix_stream 
    { 
     type plug 
     slave.pcm dmix_stream 
    } 

更新它在〜/ .asoundrc或/ etc/asound在。CONF

可以使用命令

對於wav文件

aplay -D mix_stream 「文件名」

對於原始或pcmfile

aplay -D mix_stream -c 「通道」 -r 「rate」-f「format」「filename」

根據音頻文件輸入頻道,速率,格式和文件名的值