オススメ

排他的にサウンドデバイスを扱う::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...

エレコム ハイレゾDAC EHP-AHR192 をLinuxで活用

USB-DACをLinuxで使う、嘘つきパーフェクトマニュアル

挿すだけで使えるのだからパーフェクトも何もあったもんじゃないです。とはいえ、だめなのはありました。これで自分では4つ目のUSB-DACです。うまく行かないケースも少なくないようなので記事にしました。入門用としてはとてもいいのではないかと思います。
老婆心ながら、うまくいかないUSB-DACに時間を取られても無駄です。どんなに良いDACが搭載されていても、USB回りでこけてしまうものは使わないほうがよいです。

ELECOM CO., LTD. EHP-AHR192

今回導入してみたのは、エレコム http://www.elecom.co.jp/ さんのです。ハイレゾDACをDesktopLinuxで使います。もちろんノートPCでもいいでしょう。メーカーの想定、対象はあくまでスマホですので、ご注意ください。android版とiPhone版があります。
組み合わせによっては、微細なホワイトノイズっぽいものがのるかもしれません。当方では問題ないです。


1.本体 1000円台で入手できるときもあります。投稿時点、今はこんなに安くないですね。同じ形のバッファローでも中身は同じかと思います(たぶん)。運良く安いタイミングで買えました。エレコム直営店でもたまに安価に売っていました。というのは過去の話です。
2.USB変換アダプター 150-400円ぐらい(単なる変換です)が必要。
3.基本スマホ用でandroidならそのまま使います。
4.予算に余裕があれば、ハイレゾ対応ヘッドフォン/イヤホンをゲット
5.(4万キロヘルツなんて聴こえへんのやからどうでもええやんとも思う)
6.どうやら相性問題が大量発生しているのかもしれません。それが安価な理由。
7.ちゃんと動けば音質は良い(悪くない)です。

欠点は、ボリュームがおおざっぱ。やっぱり持ち歩くにはうざったい。家PC用がいいのではないか、と思います。 ただしバッテリ消費が激しいのでPC用途が美味しいかもです。バッテリーのヘタっているスマホの人は出先では悲劇になりかねない心配があるので使わないほうがいいかもしれません。部品も全部Amazonで揃いました。

※試しにamazon fire 7(ほぼ新同) でも使えるので、miniDLNAをブラウズして再生テストをしていいたところ、4時間ぐらいつなだままで、ときたま再生、10曲ぐらいでバッテリー12%。
要因はいろいろありそうですがバッテリ食いであることはたしかそう。また、amazonらしくいつもギリギリの低スペックを狙うfireですが、96k/24bitまでは再生できます。
が、192k/24bitは再生できませんでした(fire純正プレイヤーです。3rdパーティでは再生できます)。
もちろん個人の意見ですが、amazonの端末にコスパ最高、礼賛は間違っていないレビューですが、そもそも遅すぎるのだから安くて当たり前。みごとな商品づくりとは思いますけれど。

amazon fire HD 10(前言に関わらずちょっと気にいってます)でもそのまま使えますね。

メモ::Class2.0 対応の恩恵です。

Class2.0 対応の恩恵です。そこだけみるとMAC OSでも、Windows10の2017年春以降のCreatersUpdateがあたっていれば動くはずと推定できます。Apple用が別売りされてます。

追記::ふつうにWindows10で動作しました。パーフェクト。
事前の学習(趣味なのでこの節飛ばしていいです) 

新規にターミナル(端末)を開きます。CTRL+ALT+T

サウンドデバイス認識(実際はintel でなくAMDチップ)

もともと
cat /proc/asound/modules ↲
では、snd_hda_intel

認識とハイレゾ設定::サウンドデバイスまったくない状態


●サウンドデバイスまったくない状態でHDMI disable手順を踏んでリブートし、かつUSB DACを電源onすると

cat /proc/asound/modules ↲

1 snd_usb_audio

という具合に、USB DACが自動認識されます。他のデバイスはありません


(ダミー出力状態から、サウンドデバイスが認識される、と)。


●サンプルレート、ビット深度の設定 pulseaudio


Linux Hi-Res Audio USB-DACなどの設定」で設定しておいてください。


この設定はいつでもできますから、事前にしておく必要はありません。

デスクトップのUSBに挿します。使います。


micro-USBとふつうのUSB変換アダプタ経由でPCのUSB端子に、USB-DACを挿し込む。150円-300円ぐらいのアダプターを調達してください。
cat /proc/asound/modules ↲
 0 snd_hda_intel
 1 snd_usb_audio

勝ち!! これで音がでるはずです。認識されていない場合は、USBポートを変える、リブートするなどをお試しください。

ubuntu/Mintで認識されて音が出ている状態/Linux Mint18.2 Cinnamon

cat /proc/asound/cards ↲
 0 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xfeb00000 irq 16
 1 [series         ]: USB-Audio - EHP-AHR192 series
                      ELECOM CO., LTD. EHP-AHR192
series at usb-0000:05:00.0-1.3, high speed

https://poor-user.blogspot.jp/search?q=sinks

192k/24bit ハイレゾを再生する。 ビットレートが確認できる。Pulseの場合です。期待どおりの出力です。

pactl list short sinks ↲
0    alsa_output.pci-0000_00_14.2.analog-surround-51    module-alsa-card.c    s32le 6ch 192000Hz    SUSPENDED
1    alsa_output.usb-ELECOM_CO.__LTD._EHP-AHR192_series-01.analog-stereo    module-alsa-card.c    s24le 2ch 192000Hz    RUNNING

ここで音が割れていないか、ノイズがはいらないかなどをおおざっぱに確認します。
そこまでいっておおむねパーフェクト(これから本格セッテイング開始::Pulseを使わないJACKなどを試行していきます)。

JACK関連オススメコンテンツ

gnu grep のススメ、Perl互換オプション::そのgrepでスキルアップ

gnu grep が使える環境なら、素直にgnu grep を使おう

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

PCRE(Perl正規表現互換オプション)

grep -P '検索文字列' ↲

エクスペリメンタルな位置づけも終わっていますので安心です。サブセットかと思っていたら、(否定|肯定)(先読み|後読み)も使えますよ。グッドです。

gnu grepが使えない環境では、pcre2grep/pcregrep がありますが、あんまり使いませんね。

おおむね、grepの -Pオプション(大文字です。小文字にしても怒られるだけなのですぐに気が付きます)でだいじょうぶ。

私の場合、ほとんど日本語処理目的なのですが自分の用途では困ったことがないですね。

Perlのワンライナーの一例

perl -ne "print if /検索文字列/" ファイル ↲

grepの色分け機能などを実装するのはたいへんですから、素直にGNU Grepがよいです。


MACはGNU grepではないらしいので、pcregrep/pcre2grepが良いのではないでしょうか。
私はカジュアルなLinux使いなので、深いことは気にしません。笑) pcre2grepで統一してもいいかもしれません。
方針としては、できるだけ簡素に、学習することなく、空気のように端末を扱うです(努力だけはしたくない)。だから、正規表現はPerl互換の正規表現だけが原則です。プロの方は瞬時に脳みそ切替しながら使うのかもしれませんけれど。

perl 5 互換の正規表現を利用する grep ユーティリティ pcregrepをいれたい場合。

ubuntu/mint

導入する
sudo apt install pcregrep ↲

削除する
sudo apt purge pcregrep ↲
...

きょう現在、当方にはいっているgrep

pcre2grep --version ↲
pcre2grep version 10.21 2016-01-12

pcregrep --version ↲
pcregrep version 8.38 2015-11-23

zpcregrep --version ↲
zgrep (gzip) 1.6
Copyright (C) 2010-2013 Free Software Foundation, Inc.


grep --version ↲
grep (GNU grep) 2.25

Copyright (C) 2016 Free Software Foundation, Inc.


複数行にわたるgrepの例

Perlのワンライナーのほうが楽だよねといわれそう

perlのワンライナーのほうが楽だけど、grepでもちょろいので知っていて損はないという例。

こういうファイル。9行。
cat -n delete.txt
     1 会いたい
     2 藍Ⅰ姶
     3 藍とと藍
     4 藍藍
     5 藍藍青
     6 群青
     7 藍藍
     8 藍と
     9 藍マイ。


マッチした範囲に色。色がなければ無能。
$ grep -Pz  '愛.*(\n|.)*終' delete.txt ↲
会いたい
藍Ⅰ姶
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終
藍マイ。

※zオプションで行単位処理でなくなり、 
(\n|.)で改行またはなんかの1文字にマッチさせる。
perlでいえば、セパレータ変えての/smオプションってことですね。


範囲切り出し::オススメなo オプション、有能
$ grep -Pzo  '愛.*(\n|.)*終' delete.txt ↲
愛と藍
藍藍
藍藍青
群青
藍藍
藍と終

含まれている行を表示
$ pcre2grep -M  '愛.*(\n|.)*終' delete.txt  ↲
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終と

$ pcregrep -M  '愛.*(\n|.)*終' delete.txt  ↲
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終と

マニュアルで詳細は確認してください。

pcre2grepの動作をperlでやるとすれば、範囲を抜き出すかんじ。

perl -nle  'print if /愛/ ... /終/' delete.txt ↲

PCRE2grepとPCREgrepの違い

前者が新しい10系列以降になります。後者はメンテされていますが8系列です。ubuntu標準では8系列です。自分がどうやってpcre2grepをいれているのかは思い出せません。コンパイルしたのでしょうね。

PCREプロジェクトはケンブリッジ大学発祥のようです。
Cf. http://www.pcre.org PCRE - Perl Compatible Regular Expressions

tesseract-ocr OCR on Ubuntu/Linux Mint/Manjaro

manjaro Linux篇

pamacでtesseract-ocr を検索、以下を導入。



以上、導入が完了した状態です。ふたつ選択すればライブラリ絡みなどが必要であれば依存関係で導入してくれます。もちろんターミナルでもよいです。

ubuntu/mint 篇


新規にターミナル(端末)を開きます。CTRL+ALT+T

ubuntu::1行または3行でインストール完了です。

tesseract-ocr 最新をいれてみる場合、4系列α版

#gitに追随 安定版ではありません。 ただし訓練辞書などが最新です。
sudo add-apt-repository ppa:alex-p/tesseract-ocr
sudo apt update

#導入してみる。メンテナーバージョンなら、ここから。上の2行は通常スルーしてください。

sudo apt install tesseract-ocr tesseract-ocr-jpn

日本語と英語対応版として導入されます。

tesseract-ocr 使ってみる。

日英混在。オライリー本のスキャンでテスト
tesseract 画像.jpg 333 -l eng+jpn
#表示してみる。わりといいかんじ。
cat 333.txt

当方の印象としては、3.04 よりは4.0がデフォルトでかなり認識が良いです。日本語訓練辞書も新しいです。GUIが必要な場合は、このテッサラクト(テッセラクト)をエンジンにするフロントエンドがふたつはあったような。インストールを除けばMACでも同じことですね。

⚠ライブラリなどファイル配置がことなるためLinuxとMACではそこに注意。

当方ではだいじなものはここにインストールされました。MACは違うと思う(たぶん)。
/usr/share/tesseract-ocr/4.00/tessdata/

VirtualBox for Linux インストール

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


#16.04 /mint 18 の場合
以下のファイルに1行書き足す。
sudo gedit /etc/apt/sources.list

deb http://download.virtualbox.org/virtualbox/debian xenial contrib


●Terminal / bash


wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install virtualbox-5.1 

Python2用ではなく、Python3のIDLEを導入する

ubuntu16.04.*


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
 sudo apt install idle3 ↲
#起動 3が必要。
idle3 ↲

#以上です。たぶんこれでいいと思います。