PulseAudio ALSAモジュールのフラグメントとフラグメント_サイズの意味は何ですか?

PulseAudio ALSAモジュールのフラグメントとフラグメント_サイズの意味は何ですか?

ブログ投稿のアドバイスに従ってください。パルスオーディオと遅延module-alsa-sink、低レイテンシを確保するために特殊fragmentsおよびパラメータローディングを試しましたfragment_size。しかし、これが正確に何をしているのかはよくわかりません。報告された遅延時間は、pactl list sinksこのパラメーターに入力した値と明確に一致しません。以下は、さまざまな設定をテストするために書いた短いスクリプトです。

pulseaudio &

# unload all sinks
pactl list sinks | grep "Owner Module" | \
    cut -d : -f 2 | \
    while read i; do
        pactl unload-module $i;
    done

# try different settings
patest () {
    pactl load-module module-alsa-sink device=$DEV \
          tsched=no \
          fixed_latency_range=yes \
          fragments=$F fragment_size=$FS > /tmp/modnum.out;
    pactl list sinks | grep Latency;
    pactl unload-module $(cat /tmp/modnum.out)
}
patest_nofix () {
    pactl load-module module-alsa-sink device=$DEV > /tmp/modnum.out;
    pactl list sinks | grep Latency;
    pactl unload-module $(cat /tmp/modnum.out)
}

fragmentsこれで、(F)と(FS)fragment_sizeのさまざまな設定を試すことができます。ハードウェアデバイス「hw:0」の場合、待ち時間は低くなりますが、2つのパラメータにどのように対応するかはわかりません。

F=1; FS=15; DEV=hw:0; patest
#        Latency: 2516 usec, configured 1451 usec
F=1; FS=30; DEV=hw:0; patest
#        Latency: 2484 usec, configured 1451 usec
F=5; FS=15; DEV=hw:0; patest
#        Latency: 2475 usec, configured 1451 usec
F=50; FS=200; DEV=hw:0; patest
#        Latency: 57628 usec, configured 56689 usec

# (default minimum latency:)
DEV=hw:0; patest_nofix 
#        Latency: 1983968 usec, configured 2000000 usec

「dmix」ALSAデバイスの場合は少し高いですが、理由は不明です。

F=1; FS=15; DEV=dmix; patest
#        Latency: 42752 usec, configured 42666 usec

# (default:)
DEV=dmix; patest_nofix
#        Latency: 326596 usec, configured 341333 usec

しかし、hw:0として出力するために独自の「dmix」デバイスを作成すると、

$ cat ~/.asoundrc
...
pcm.hw0mix {
    type dmix
    ipc_key 2498 # unique random number
    slave {
        pcm "hw:0,0"
        channels 2
        rate 48000
    }
}

これにより、待ち時間がはるかに長くなり、0.25秒に固定されているようです。

F=1; FS=15; DEV=hw0mix; patest
#        Latency: 251132 usec, configured 250000 usec
F=50; FS=200; DEV=hw0mix; patest
#        Latency: 251126 usec, configured 250000 usec

# (default:)
DEV=hw0mix; patest_nofix
#        Latency: 356292 usec, configured 375000 usec

パラメータfragmentsfragment_size「設定された遅延」との関係は何ですか?ハードウェア以外のALSAデバイスに対しても、設定された最小レイテンシを低く変更するにはどうすればよいですか?

答え1

セグメント/サイクルの説明については、以下を参照してください。https://www.alsa-project.org/wiki/FramesPeriodsまた見てくださいhttps://juho.tykkala.fi/Pulseaudio-and-latencyPulseaudioチューニング技術について学びます。

Pulseaudioはミキシングも可能なので、dmixと組み合わせて使用​​すると設定が重複する可能性があります。

dmixはALSAプラグインレイヤーを使用しているため、常に少し待ち時間が追加されます。待ち時間をできるだけ低く保つには、hardware:device を直接使用し、アナログ側でソースを混在させることができます。

ただし、正しいシステム構成を使用すると、dmixをpulseaudioの代わりに使用でき、ほとんどの場合、待ち時間を目立たないようにすることができます。 251msは長すぎるため、dmixよりはるかに低くなければなりません。

ツールhttps://github.com/raboof/realtimeconfigquickscan過度の待ち時間を引き起こすシステム構成のすべての側面を特定することが役に立つかもしれません。

関連情報