2011-11-17 24 views
7

ALSA'yı kullanarak bazı ses verilerini bir PCM cihazına oynatmak istiyorum. Örnek olarak this sample example'u indirip bilgisayarımda çalıştırdım. Şu anda ses kartı kullanan başka bir işlem olmadığında iyi çalışır. diğer bazı süreç ses cihazı kullandığında Ama hiçbir şey çalmıyor (yani şarkılarını çalmaya medya oynatıcı) hata takibi ve gösteriler - ALSA: paylaşılan modda bir PCM cihazı açın

Playback open error: Device or resource busy 

Bu örneğin kaynak koduna ben demek olabilir Looking o snd_pcm_open işlevi 882 satırında bu hatayı atıyor. Başka bir işlem şu anda kullanıyor olduğundan, cihazı meşgul buluyor.

Ayrıca tersi yolu denedim - önce örneği başlattıktan sonra bir şarkı başlatmaya çalıştım. Bu durumda medya oynatıcı boşta kalır, sadece ilerleme çubuğunun yanında “boşta” durur (Banshee'yi kullanıyorum). snd_pcm_open'un aygıt kaynağının münhasır hakkını kazanacağını varsayıyorum, böylece başka hiçbir işlem bunu kullanamaz.

Ama bunu istemiyorum. Özel bir hak gerektirmeden bir ses cihazına ses çalmak istiyorum, böylece PC'deki diğer işlemler ses verilerini çıkarmak için aynı cihazı paylaşabilir.

Bunu nasıl yapabilirim? Bir PCM cihazını nasıl açabilirim, böylece diğer işlemler aynı cihazı paylaşabilir mi?

cevap

3

Birden işlemleri arasında bir cihazı paylaşmak için bir yol bulamadık. .asoundrc yapılandırma dosyasını kullanarak birden çok yürütme akışını birleştirmek için dmix eklentisini kullanmayı denedim, ancak bazı nedenlerle çalışmadı. Ses kartımın default cihazını kullanmaya çalıştım ama bu da işe yaramadı. ALSA posta listesindeki bir öneriye göre, default:CARD=x parametresini snd_pcm_open işlevine aygıt adı parametresi olarak kullanarak varsayılan aygıtı açmaya çalıştım; bu da sistemimde device not found hatasıyla sonuçlanıyor. Görünüşe göre bunu yapmanın bir yolu yoktur (eğer birisi bir yol bulabilirse, lütfen bu cevabı güncelleyin).

ALSA'yı kullanmak yerine, sorunumu çözen bir sonraki PulseAudio kullandım.

1

/dev/sndstat dosyasını kontrol edin (OSS uyumluluk katmanınız etkinse). Sisteminizdeki ALSA cihazlarına karşılık gelen ses cihazlarını listelemelidir. Ayrıca, her bir cihazın özelliklerini almak için/proc/asound/devices komutlarını da kontrol edebilirsiniz. snd_pcm_open için farklı adlar seçerek(): (açılan o "0,0 plughw" var sizin örnekte): Farklı oynatma cihazlara

deneyin erişim

plughw: Bu here dan kart, cihaz. Her ikisi de kart (ID dizesi veya sayısal endeksi), cihaz ve isteğe bağlı olarak erişilecek donanımın subsvice parametrelerine sahiptir.

+0

Hayır, OSS uyumluluk katmanım etkin değil ve gerçekten ona güvenmek istemiyorum. Ayrıca/proc/asound/devices'ı da kontrol ettim ve cihaz listesini orada gördüm (o listeyi programsal olarak alabilirim). Farklı oynatma cihazlarına da erişebilirim. Ama bunların hiçbiri burada gerçekten sorun değil. Paylaşılan modda tek bir cihaz açıp açamayacağımı bilmek istedim. –

1

ALSA ile ilgili sorun, daha sonra varsayılan çıkışa takılı bir karıştırıcı eklentisinin olmamasıydı. ALSA'nın son sürümlerinde, artık varsayılan olarak çıkış yoluna dmix eklentisi eklendiğinden bu gerçekleşmez.

(Sen ~/.asoundrc ile eğer karışıklık kendiniz için paylaşılan ses kartı sorun yeniden, ya da doğrudan donanım fişini kullanılacak uygulamayı anlatarak mikser bypass eğer.JACK gibi bazı uygulamaların, aksi belirtilmediğinde doğrudan donanımı kullanmaya çalışacağını unutmayın.)

PulseAudio ile, ALSA'yı arka uç olarak kullanıyorsunuz, sadece bir mikser (ve bir ton) içeren bir katman eklediniz. muhtemelen bilmek istemediğiniz diğer şeyler). JACK, sizin için tam olarak aynı işi yapardı.

Günümüzde, ALSA'nın dmix eklentisi sizin için bunu yapacaktır, böylece sağladıkları temel olmayan ses sistemi özelliklerine gerçekten ihtiyacınız olana kadar PulseAudios ve JACK'ler gibi katman yazılımlardan kurtulabilirsiniz.

Referans için, bkz. some .asoundrc documentation.