排他的にサウンドデバイスを扱う::WASAPIっぽい話

WindowsでいうところのWASAPIみたいなDAC利用方法
/ALSA・排他的・あくまで気分的な話(ubuntuだけ) 2020夏改稿

Direct hardware device without any conversions


ともだちに説明するのがめんどくさいので、こういうスクリプトを書けばいいのかなと思って用意してみました。

WindowsでいうところのWASAPIっぽい(夕立(艦隊これくしょん))Linuxでのサウンド・ソースの使い方といってもいいのがこの設定ではないかと思います。

誤解全開で換言すればサウンド資源独り占めモードですね。WASAPI/ASIOと違いアプリケーションの音量コントロールなどに制限がありません。おおざっぱにですよ。完全排他的じゃないので言葉のあやです。あくまで、大雑把にっぽい。きちんと専有させるには、JACKです。

わりと簡便設定なのでオトクだと決めました。困っている場合は、騙されたとおもって一度どうぞ。

Linuxで音楽再生環境を詰めていく. in my case.


まとめるとUSB-DACなどでノイズ、プチ等が気になる場合は
  1. まず、この排他風味を利用 をしてみる。
  2. それでもだめなら、低遅延カーネルを導入する。
  3. それでもだめなら、JACKを導入する。

という3段階で考えるといいと思います。いきなりJACKでもいいでしょう。
それでだめなら、ドライバが悪いか、デバイスが悪いということで素直にあきらめましょう。

次の記事は参考にしてみてください。

BitPerfect ::jack::realTimeConfigQuickScanリアルタイム処理の設定の確認

BitPerfect のために::リアルタイム処理の妨げになっている設定をあぶり出す realTimeConfigQuickScan (Perlスクリプト)は、リアルタイムっぽい処理の妨げになっている設定をあぶり出します。jackに限らずですが。いわゆるBitPerfec...

ノーマルレゾリューション(CD-DA 44.1khz DVD48k)レベルではトラブルことはないと思いますが、問題はですね!! ハイレゾフォーマットです。48k/24bitまではノートラブルでも96k/24bit以上になるとおかしいなんてことがおきます。深入りしても意味はない気がするので、だめな場合は機材を変えたほうがいいかも。

カーネルそのものを変えてみたり、ディストロ自体を最新にしてみるなどはお約束。というのは、ALSAやPulseの設定は散々やりましたが上で述べた1-2-3を試すのがもっとも楽であるというのが私の結論だからです。2年ぐらい無駄にした。笑) CPUが速ければ問題なくなるのかもしれませんね。セレロン並だから。

ついでにいうと効果がまったくなかったのは、アプリの優先度を最優先にしてみるです。これはうまくなかった。CPUパフォーマンス最大固定でも意味はなかった。
このマシンでW10を起動して鳴らしてみると問題ないのでLinuxの中の問題なのでしょうね。私の守備範囲を超えています。

ほんとうにフォーマット通りに再生されているのか

余談です。それではあなたのUSB-DACはほんとうに192k/24bitをサンプリングしていますか?? 実は48k以上をカットして再生しているのではないですか?? どうせ聴こえない音ですが。DACによってはLEDランプで確実に処理レベルがわかるものがありますが、そうでないなら「確信」を持つことはできないのでは?? sinkをそのまま内部録音して、スペクトラムはみることができますね。あるいはS/PDIFで別の機械にを通して別のマシンで録音してスペクトラムをみると確実ですね。

そもそも一般人が192kに対応したマイク録音環境はもってないですよね?? 民放はないけれどNHKにはありますが。いい方法があれば教えてください。ぺこり。特にラズパイで。※執筆時点では高価な代物でしたが、今では安価な中華でもありますね。時代の流れは速い。
また、スマホで。例えばGalaxy A7。デフォルトで192k/24bitであっても、48K以上は全部カットして再生します。スマホだからいいし、どうせ聴こえないのだからそれが正解なのかもしれませんね。
16bitにダウンコンバートしてます。 
余談おわり。

/etc/modprobe.conf USB-Audioを低遅延にする呪文。わりと重要かも。自分には必須!!

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T

$ cat /etc/modprobe.conf ↲

options snd-usb-audio nrpacks=1

デフォルトではない?!と思うのでこの1行だけのファイルを作る。太字大文字にしたのは私の気分です。

sudo gedit /etc/modprobe.conf ↲ でペタ、保存。

http://alsa.opensrc.org/Usb-audio#Tuning_USB_devices_for_minimal_latencies
効果的だと思うので必要に応じて試してみてください。だめなら戻せばいいのです。DACに限らずUSBのDTM機器の場合に有効みたいですよ。

どれを選んだらいいのかわからないとかアプリ毎の選択インターフェイスが違ってめんどくさいという人のために。以下のPerlスクリプトでどうぞ。これでいいかと思います。かたっぱしから試すのも手ですが。笑)

Direct hardware device without any conversions 設定のための事前準備

コマンドを発行してhwではじまる行のいずれかを適宜選びます。

(黄色をそのままコピーしてターミナルで実行します。)
aplay -L | perl -nle 's|^(.*)$|\n$1|g if m/DEV=\d/ ; print' | perl -nle '$/=""; print if /without any/ ' ↲

以下のような出力が得られます。眺めても楽しくないので、さくっと青いところに注目しましょう。

hw:CARD=Generic,DEV=0
    HD-Audio Generic, ALC892 Analog
    Direct hardware device without any conversions
hw:CARD=Generic,DEV=1
    HD-Audio Generic, ALC892 Digital
    Direct hardware device without any conversions
hw:CARD=series,DEV=0
    EHP-AHR192 series, USB Audio
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=0
    HA90USB, USB Audio
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=1
    HA90USB, USB Audio #1
    Direct hardware device without any conversions

コマンド時点、上から順に。
  • 背面ミニジャック・オンボード
  • S/PDIF 光出力角・オンボード
  • エレコム EHP-AHR192のandroid用USB-DAC
  • オーディオテクニカHA90USBのUSB-DAC analog
  • オーディオテクニカHA90USBのUSB-DAC#1 S/PDIF 
ハードウェア的にはどれも (192k/24bit)です。HDMI/Display Portのサウンドのみ無効にしてあります。モニター音声を無毛にしてある。

作業とデバイスが「USB-DACの設定である」と決まっている場合は次で絞り込めます。
aplay -L | perl -nle 's|^(.*)$|\n$1|g if m/DEV=\d/ ; print' | perl -nle '$/=""; print if /without any/ and /USB Audio/' ↲

これ(端末)を開いたまま、アプリの設定をしてみましょう。


HDMI/DisplayPortを除外して、JACK等音質重視再生の場合に設定しそうなデバイスのみ列記する。

少し改訂。
$ aplay -L | perl -nle 's|^(.*)$|\n$1|g if m/DEV=\d/ ; print' | perl -nle '$/=""; /HDMI/ or print if /without any/'

hw:CARD=Generic,DEV=0
    HD-Audio Generic, ALCS1200A Analog
    Direct hardware device without any conversions
hw:CARD=Generic,DEV=1
    HD-Audio Generic, ALCS1200A Digital
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=0
    HA90USB, USB Audio
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=1
    HA90USB, USB Audio #1
    Direct hardware device without any conversions

上から、ライン出力3.5ミリ、SPDIF光、オーディオ・テクニカ ハイレゾDAC
Realtekの4桁型番です。安物DACより4桁型番ならマザーボード搭載のほうがマシですね。AsusROGシリーズです。

現在小生が排他的に設定しているアプリ

mpv ちょっとだけややこしい。以下参照
audacious
deadbeef

アプリ別設定方法 ターミナルでのmpv  

mpvもデフォルトはPulseです。
マニュアルで調べながら設定して以下で動かしています。 1行目だけでいいとは思いますが、学習成果として3行。全体適用ではなく個別ディレクトリ単位のコンテナのみに適用するようにしています。デフォルトにすると使いにくいためです。


audio-device=alsa/hw:CARD=HA90USB,DEV=0 # HA90USB
audio-fallback-to-null=yes #フォールバック、繋ぎ忘れていても再生のフリをする。
audio-exclusive=yes #わがままモード,有能かも?!

16.04LTSですが、mpv/ffmpeg 共にgitです。アグレッシブにオプションが消えたりします。バージョンが違うと無効だったりしますのでご注意ください。

mpv 0.27.0-amended (C) 2000-2017 mpv/MPlayer/mplayer2 projects
 built on Thu Sep 14 07:49:49 UTC 2017
ffmpeg library versions:
   libavutil       55.74.100
   libavcodec      57.105.100
   libavformat     57.82.100
   libswscale      4.7.103
   libavfilter     6.105.100
   libswresample   2.8.100
ffmpeg version: git-2017-09-12-6ce4a63


2020-07-29

mpv git-2020-04-17-a09c769 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
 built on Sun Apr 19 20:30:24 UTC 2020
FFmpeg library versions:
   libavutil       56.42.102
   libavcodec      58.80.100
   libavformat     58.42.100
   libswscale      5.6.101
   libavfilter     7.79.100
   libswresample   3.6.100
FFmpeg version: git-2020-04-18-4457f75

具体例::DeaDBeef 音楽プレイヤー おすすめ

aplay -Lの基礎演習

検証がGUIではかったるいというのであれば次のようにもできます。
https://www.alsa-project.org/main/index.php/Asoundrc

aplay -Dplughw:CARD=HA90USB,DEV=0 test.wav ↲
再生中 WAVE 'test.wav' : Signed 24 bit Little Endian in 3bytes, レート 96000 Hz, ステレオ

aplay -Dhw:CARD=HA90USB,DEV=0 test.wav ↲

※ところで、私は提督ではない。

特に関係深い記事


How to install Real-Time kernel in Manjaro Linux and ubuntu.

Realtime kernel 低遅延カーネルを導入する。 manjaro Linux Real-Time Kernel. manjaroLinuxの場合/リアルタイムカーネル導入になります。主に、jack などの場合に使っています。 DEによる差があるため(説明...

BitPerfect ::jack::realTimeConfigQuickScanリアルタイム処理の設定の確認

BitPerfect のために::リアルタイム処理の妨げになっている設定をあぶり出す realTimeConfigQuickScan (Perlスクリプト)は、リアルタイムっぽい処理の妨げになっている設定をあぶり出します。jackに限らずですが。いわゆるBitPerfec...

Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...