Sesli evye kekemeliği


12

Pi'ime raspbian kurdum ve masaüstümden bir Pi'ye tüm sesi aktaracak, hoparlörleri çalıştıracak bir PulseAudio lavabo yapılandırdım.

Bu güzel açıklamayı takip ettim: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124

İlk başta, bu sorunsuz çalışıyor gibi görünüyordu. Bununla birlikte, masaüstünden gönderilen ses, Pi'de sürekli kekeliyor, sanki aralarında sadece birkaç örnek eksik olan sabit tampon altlıkları varmış gibi.

Bütün günü sebebi bulmaya çalıştım, ama boşuna. Temel kurulum:

  • kablolu LAN bağlantısı
  • En son firmware güncellemeleri ile en son raspbian pi (26 Eyl 2013)
  • Her iki tarafta PulseAudio 2.0 (Ubuntu masaüstü)
  • Mplayer, totem, ffplay üzerinden oynatma
  • module-native-protokol-tcp üzerinden ağ iletimi

Ben denedim:

  • Doğrudan Pi'de ses çalmak mükemmel bir şekilde çalışır.
  • Diğer (masaüstü) bilgisayarlara akış iyi çalışıyor.
  • Doğrudan bağlantı ile ses göndermek ($ PULSE_SERVER belirtmek) çok az kekemelik ile oldukça iyi çalışıyor, ancak yine de Problem-2'ye eğilimli (aşağıya bakın)
  • Masaüstü PulseAudio tüneli üzerinden ses gönderme sürekli kekemelik sağlar
  • Artan öncelikler / gerçek zamanlı zamanlama ... yardımcı olmadı
  • Örnekleme hızını 48 kHz'e sabitlemek ... yardımcı olmadı
  • Yeniden örnekleme algoritmasını "önemsiz" olarak ayarlamak ... yardımcı olmadı
  • Varsayılan parçaları / parça boyutunu ayarlamak ... yardımcı olmadı
  • PulseAudio günlüklerinde herhangi bir sorun belirtisi bulamıyorum (oynatmaya başladığım andan itibaren gösteriliyor):

    D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
    D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking
    D: [pulseaudio] sink.c: Suspend cause of sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo is 0x0000, resuming
    I: [alsa-sink] alsa-sink.c: Trying resume...
    I: [alsa-sink] alsa-util.c: cannot disable ALSA period wakeups
    D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 341 ms
    D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples),  period size second (to 16384 samples).
    I: [alsa-sink] alsa-util.c: ALSA period wakeups were not disabled
    D: [alsa-sink] alsa-sink.c: Latency set to 25.00ms
    D: [alsa-sink] alsa-sink.c: hwbuf_unused=60736
    D: [alsa-sink] alsa-sink.c: setting avail_min=15665
    I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 15.00ms
    I: [alsa-sink] alsa-sink.c: Resumed successfully...
    I: [alsa-sink] alsa-sink.c: Starting playback.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo becomes busy.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half.
    D: [alsa-sink] ratelimit.c: 115 events suppressed
    D: [alsa-sink] alsa-sink.c: Wakeup from ALSA!
    ... no more output, but stuttering continues ...
    

Sorun 2: Yukarıda belirtildiği gibi, doğrudan bağlantı ile oldukça iyi bir ses elde edebilirim. Ancak, akış içinde birkaç atlamadan sonra (mplayer kullanarak), PulseAudio sunucusu takılır ve hiç ses çalmaz. Bazen mplayer yeniden başlatılarak yeniden canlandırılabilir. Bazen o kadar kötü takılır ki PulseAudio yeniden başlatılmalıdır. Bazen sadece ses seviyesini değiştirdiğimde bile takılıyor.

PulseAudio belgelerine göre, tünel bağlantılı bir bağlantı üzerinden doğrudan bir bağlantının avantajı, doğrudan bağlantı ile neden iyi ses aldığımı gösteren daha iyi tamponlama kontrolüne sahip olmaktır: http://www.freedesktop.org/wiki/Software / PulseAudio'nun / Belgeler / Kullanıcı / Ağ /

Şimdi fikirlerim kalmadı. Kekemeliğe ve Problem 2'ye ne sebep olabilir? Hata ayıklamanın nasıl yapılacağı hakkında bir fikir de takdir edilecektir.


Sesi doğrudan nasıl çaldınız? Oyunda sorun yaşamadım, ama paplay kekemeleri ve yankıları çok korkunç.
John La Rooy

Mplayer, totem, madplay, ... kullandım ... Ama farklı oyuncuların farklı davrandığı gerçeği, veri arabelleğe almayla ilgili bir yazılım sorunu olduğu tahminimi destekliyor. Bazı oyuncular diğerlerinden daha fazla veriyi gerçek zamanlı olarak ilerletir.
farindk

Sadece sinüs dalgaları oynamakta zorlanıyorum . LAN üzerinden yayın yapmayı denemeden önce bunu çözmem gerekeceğini düşünüyorum.
John La Rooy

Yanıtlar:


6

tsched_buffer_sizeve tsched_buffer_watermarkbenim için çalışmasını sağlayan ayarlardı.

PulseAudio'umu bir sistem örneği olarak çalıştırıyorum, bu yüzden config var /etc/pulse/system.pa. Bunun yerine bir oturum örneği kullanıyorsanız, yapılandırma içinde olacaktır /etc/pulse/default.pa.

Bu varsayılan değerdir:

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal  support)
load-module module-detect
.endif

Bunu bununla değiştirdim: (yani, yorum yaptı)

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
#load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal  support)
#load-module module-detect
.endif

Sonra aşağıdaki satırı ekledim:

load-module module-alsa-card device_id=0 tsched=true tsched_buffer_size=1048576 tsched_buffer_watermark=262144

Bkz. Http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index6h3


İyi bir nokta. Denedim, ama yardımcı olmadı. Çok daha büyük tampon boyutlarında bile. PULSE_SERVER'ı Pi'ye ayarlayarak doğrudan bağlantı üzerinden ses göndermek temiz ses sağlar, ancak yalnızca ses seviyesini değiştirmek bağlantıyı dondurur. Tünel açma yoluyla ses hala kekemeliği sağlar. Benim tahminim, bu gerçekten bir PulseAudio sorunu, çünkü bu büyük arabellek boyutları (4 MB kullandım) ile, bir dosyanın başında sesin önceden çözülmüş olduğunu görmeliyim. Ama öyle değil. Doldurmayı yavaşlatan bir şey olmalı.
farindk

Aynı tür sorunlarla karşılaşmak. Benim özel durumumda, PULSE_SERVER + mplayer bir cazibe gibi çalışırken, PULSE_SERVER + clementine (ki gstreamer kullandığına inanıyorum) korkunç bir şekilde kekeliyor. İkisi arasında neyin farklı olduğu hakkında bir fikrin var mı?
Jonathan Protzenko

@Protzenko: Herhangi bir kaynağa bakmadan tahminim, mplayer'ın PulseAudio bloke olana kadar veriyi itebileceği, gstreamer ise gerçek zamanlı referansla saatli veri gönderebileceğidir. Bu, önceki durumda tamponların çok daha dolu olduğu anlamına gelir ve sonuç olarak daha büyük bir gecikme olur.
farindk

Aynı sorunu görüyorum PULSE_SERVER + ffmpeg para cezası, PULSE_SERVER + mpd panjurlar ve örtük alt parçalar
Reimundo Heluani

3

Ana nokta, kullanmanız gerektiği module-tunnel-sink-new, ancak ahududu pi 1'de kekemesiz ağ sesi elde etmek için birkaç değişiklik yapmanız gerektiğidir.

  1. Ahududu pi üzerinde pulseaudio'yu gerçek zamanlı öncelikle çalıştırın:
pulseaudio --start --high-priority=yes --realtime=yes

Ahududu pi'nize akışı gönderen bilgisayarı belirtmek için gönderici terimini kullanalım .

  1. Set default-fragmentsve default-fragment-size-mseciçinde daemon.confde gönderene bu değerlere:
default-fragments = 8
default-fragment-size-msec = 12
  1. module-tunnel-sink-newBu komutu gönderende kullanarak kullanın (ahududu pi'nizin ana bilgisayar adının RP1 olduğunu ve yerel ağınızda mDNS çalıştığını varsayarsınız. Aksi takdirde, ahududu pi'nizin IP adresini kullanın).
pactl load-module module-tunnel-sink-new server=RP1.local

Bu ayarlarla 54 Mbps hızında çalışan bir kablosuz ağ üzerinden ahududu 1'den kekemesiz ses alıyorum (Kurulumumda, gönderen ethernet kullanıyor ve RP1 wlan kullanıyor). Aslında, hem gönderen hem de ahududu wlan kullanıyor olsa bile , en azından kablosuz ağda başka cihaz yoksa çalışır.


Şimdiye kadar harika çalışıyor. Pi3 (biraz daha yeni bir debian / yazılım ile) için "varsayılan-fragmanlar" ayarları alınacak başka bir şey değiştirmek zorunda buldum. (yani, bir şey ayarlıyor tsched=0, bkz. wiki.archlinux.org/index.php/PulseAudio/… )
rien333

Hala kekemelik yaşıyorsanız, kemer wiki ayrıca rtp akış protokolüne geçmenizi
önerir

1

bu sayfayı kontrol ettin mi?

http://manpages.ubuntu.com/manpages/lucid/man5/pulse-daemon.conf.5.html

VARSAYILAN KIRILMA AYARLARI

   Some hardware drivers  require  the  hardware  playback  buffer  to  be
   subdivided  into  several  fragments.  It  is  possible to change these
   buffer metrics for machines with high  scheduling  latencies.  Not  all
   possible  values  that  may  be  configured  here  are available in all
   hardware. The driver will to find the nearest setting supported. Modern
   drivers that support timer-based scheduling ignore these options.

   default-fragments= The default number of fragments. Defaults to 4.

   default-fragment-size-msec=The  duration of a single fragment. Defaults
   to 25ms (i.e. the total buffer is thus 100ms long).

Evet, denedim, ama yardımcı olmadı. Bahsettiğim gibi, cihazın kendisinde ses çalma iyi çalışıyor. Bunun PulseAudio tünellemesinde bir ağ protokolü problemi olduğunu varsayıyorum. Doğrudan bağlantı protokolü bile iyi çalışır. Şimdi güvenilir ve RPi'yi başka şeyler için kullanan basit bir Bluetooth akış donanımına geçtim.
farindk

1

Kekemelik veya zaman aşımı sorunlarından kurtulmak için bir FW sürüm düşürme işlemini deneyin:

sudo rpi-update eeb2e51c3e08cd5efa4246aa8dc54a09b25ada12

1
UYARI maddelere dikkat edin rpi-updatesisteminize yapabileceği bu şekilde kullanıyoruz.
earthmeLon

En azından bir referans verebilir veya rpi-updatebu şekilde kullanmanın sistemlerimize neler yapabileceğini bize bildirmeye çalışabilirsiniz ...
user11171

Kılavuzu okuduğunuzdan emin olun ve bunun sisteminizi ve olası tehlikeleri nasıl etkilediğini anlamak için biraz araştırma yapın.
earthmeLon

0

Bu sorunun çekirdek sürümüyle ilgili olabileceğini fark ettim. 3.6.11'den 3.12.0'a yükselttikten sonra sürekli olarak bu eksikleri aldım. 3.6.11'e geri dönme sorunu benim için çözdü.


0

Bu sayfayı birkaç kez okudum ... RaspberryPi-pulseaudio-network kombinasyonunun kekemeliğinden de hayal kırıklığına uğradım. Biraz daha araştırdım ve çözümün bir kısmını bulduğum bir sayfa buldum:

=> Default.pa (veya system.pa) öğesinde boşta kalan modülü askıya alma özelliğini devre dışı bırakın.

Bakın kekemelik ortadan kayboldu!

Şimdi tek sorun, bir süre sonra (10 ila 20 saniye) oynatmanın askıda kalması: - /

Herhangi bir öneri?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.