2017年10月17日火曜日

mpv player mpv.conf 2年育てた設定ファイル vaapi/vdpau

神々は細部に宿る::AMD RADEON R7 360 にやさしいmpv.conf

mpv player mpv.conf 2.5年育てた設定ファイルを公開してみます。前からしようと思っていたんですが、説明かくのがめんどくさいのでそのままにしておくと3年たっても役にたてそうにないので。よって、以下説明なしでそのまま載せます。あしからず。

intel,nvidia に冷たいんじゃなくて、持ってないだけです。ただRADEONは両方対応していますので。VLCもハードウェアアクセラレーションは使えますし、smplayer もフロントエンドなので使えるわけですが、私はVLCは基本的にデフォルトにしています。マニアックな設定をするのは、mpv だけです。以下、mpv(2017年10月 git)を念頭にしています。

MAC OS X でもほとんど共通でいけると思いますが、実機がないのでわかりません。
  • vdpau/vaapi(intel,nvidia,amd対応)ほんの一部書き換え必要な局面も。
  • 中間フレーム生成(AMD fluid motion video には遠く及ばない)
  • vdpauのしつこいまでのチューニング結果(意味があるとみなしたもののみ掲載)
  • HRTF(頭部伝達関数 Head-Related Transfer Function)対応。サラウンドソース5.1chソース等を2.0ヘッドフォン用にミックスする)も楽しめる無駄さ加減(追加定義要す)
  • しつこいまでのOSD設定、但し自分的には優雅(音声チャネルの状態やフォーマット、コマ落ちなどを監視できるOSD設定が切替できる)
  • その他もりだくさんだが過剰な入れ子にならないように配慮。
  • 特定ファイル群はディレクトリ単位で個別設定で再生するという方針

4kでの描画を基本にしています。これにくわえて、コンテンツ毎の追加mpv.conf を読み込ませて制御しています。そのうち解説でも。AMD RADEON Rなんちゃらの人はそのまま何も考えずに使えると思います。

魂は細部に宿る::mpvの使い方


#プロファイル切替しながら使う
mpv --profile=vdpauRS video.mkv

※前提知識::
  • NVIDIA vdpau
  • Intel vaapi
  • AMD vdpau,vaapi 共に対応
  • GPUが対応していない形式はHWアクセラレーションは働きません(当然)。
    例) RADEON R7 360 は、youtube nativeな VP9はソフトウェアデコードです。
    H.264でも、hi10には対応していません。このあたりはvdpauinfo で確認できます。

#ターミナルでの例
[基本形]
mpv --profile=vdpauRS video.mkv 以下ビデオファイル名青色は省略
[応用]

mpv --profile=vdpau     vdpauでhwdec 
mpv --profile=vdpauRS   vdpauでリサンプル 
mpv --profile=vdpauRSEX vdpauてんこ盛り

mpv --profile=vaapi     vaapiでhwdec
mpv --profile=vaapiRS   vaapiでリサンプル 
mpv --profile=vaapiRSEX vaapiてんこ盛り

mpv --profile=nodec     hwdecなし
mpv --profile=nodecRS   hwdecなしでリサンプル 
mpv --profile=nodecRSEX hwdecなしでてんこ盛り

以下の具体ファイルの1行目のみ書き換えることで任意固定にできます。nodec(ハードウェアデコードなし、つまりソフトウェアデコード)にしています。


#当方の、R7 360に限っていえば、vaapi を使うことはもはやないです。調子がいいのはvdpauなので。1年ほど同一ファイル群で比較してきました。

ターミナルを前提にしているわけではなく、プロファイル切替は右クリックコマンドで拡張するなりすれば、マウスで完全オペレーションできます。自身はそうしています。Zeniyを併用したりもしています。

# ~/.config/mpv/mpv.conf

mpvのVersionでいえば、0.01前までにはほぼ追随していますが漏れ、重複、冗長があります。mpvの開発はとてもアグレッシブでいろいろ変わっていくのでキャッチアップしていくのはけっこう大変です。みていて楽しいですけれど。きちんと整理されてはいませんが膨大な時間をかけて検証した結果なので。同じ道を通るのは時間の無駄ですから。
お気づきの点などがあればぜひ教えてください。

たとえば
intelGPUは、vaapiなので、vdpauのブロックを削除すればいいです。
nvidiaGPUは、vdpauなので、vaapiのブロックを削除すればいいです。
amdGPUは、両方に対応しますので、そのままでいです。
mesaを使わないほうがよい結果を生むことも多いです。CPU負荷は高まりますがいまどきのCPUの方には誤差にしか感じないかと思います。CPUメーターでは違いが確かにでますけれど。

#ハードウェアアクセラレーションのデコードととっても大切なビデオ出力選択
以下の断面ではhwdecが次のようになっています。
hwdec=vdpau-copy
hwdec=vaapi-copy
それを
hwdec=vdpau
hwdec=vaapi

にしてみるなり、試行錯誤してみてください。環境によっては違いがあるかもしれません。

voについて(特に大事です)

vo=gpu
または明示的に、
vo=vdpau
vo=vaapi
のようにします。当方の環境では顕著な差がでます。無指定でもいいかと思います。安定して動作することがだいじなので。

その他voは過去の遺物であったり、画面描画とは別用途であったりしますので描画性能向上目的で試しても仕方ありません。
openglは、gpu という指定に変更になりました。

#mpv.confある日の実物


    profile=nodec #デフォルトはハードウェアデコードなし。
#
#ハードウェアアクセラレーションの分岐
#OSDの連携考慮してこうなった。

[nodec]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【nodec】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_no
    window-scale=1.50
[nodecRS]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【nodecRS】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_no
    profile=_resample
[nodecRSEX]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【nodecRSEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_no
    profile=_resample
    profile=_extra
[vdpau]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vdpau】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vdpau
[vdpauRS]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vdpauRS】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vdpau
    profile=_resample
[vdpauRSEX]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vdpauRSEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vdpau
    profile=_resample
    profile=_extra
[vdpauEX]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vdpauEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vdpau
    profile=_extra
[vdpauRSEXHRTF]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vdpauRSEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vdpau
    profile=_resample
    profile=_extra
    profile=_hrtf
[vaapi]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vaapi】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vaapi
[vaapiRS]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vaapiRS】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vaapi
    profile=_resample
[vaapiRSEX]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vaapiRSEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vaapi
    profile=_resample
    profile=_extra
[vaapiEX]
    osd-msg2='M2${osd-sym-cc}[vo:${current-vo}]【vaapiEX】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} - ${mistimed-frame-count} - ${time-pos} - v${volume}'
    profile=_hwdec_vaapi
    profile=_extra

#
#ハードウェアアクセラレーションの個別設定
#
[_hwdec_vdpau]
    vo=vdpau
    hwdec=vdpau-copy
    vo-vdpau-deint=3 #-4 max 4
    vo-vdpau-hqscaling=1 # vdpauinfo | grep -P 'HIGH QUALITY SCALING.*y' そのレベル!!
    vo-vdpau-denoise=0.00 # -1 1 やりすぎは画質を落とす
    vo-vdpau-sharpen=0.00 #15 #0.10 #0.66 #-1 - 1 やりすぎは画質を落とす
    vo-vdpau-queuetime-fs=100 #50
    vo-vdpau-fps=60.00 # 60.00 つまるところ、デフォ0が一番。?!
    vo-vdpau-force-yuv=yes
[_hwdec_vaapi]
    vo=vaapi
    hwdec=vaapi-copy
    vo-vaapi-scaled-osd=yes #            Flag (default: no)
    vo-vaapi-scaling=fast #nla #hq  #default fast hq nla (default: default) なくてもいい。
[_hwdec_no]
#    vo=vdpau #
    hwdec=no

#
#インターポレーション、リサンプルその他の定義
#

[_resample]
    interpolation=yes #ドライバの出来重要
    video-sync=display-resample  #video-sync=display-resample-vdrop
    scale=oversample
    tscale=oversample
    display-fps=60
[_extra] #実質不要
        scale=ewa_lanczossharp
        cscale=ewa_lanczossoft
        dscale=mitchell
        dither-depth=auto
        correct-downscaling=yes
        sigmoid-upscaling=yes
        deband=yes
        scale-radius=8 #10.0
        cscale-radius=6 #3.0
        cscale-antiring=1
        scale-antiring=1
[_bigCache]
    cache=2048000          #2GB    #cache=1024000          #1GB    #

#
#HRTF(頭部伝達関数 Head-Related Transfer Function)対応
#
[_hrtf]
vd-lavc-threads=4
ad-lavc-downmix=no
af=lavfi=[sofalizer=sofa=/home/ehhen/mpv/sofa/ClubFritz6.sofa:gain=6]

#
#GUIその他
#

[builtin-pseudo-gui]
    terminal=no
    force-window=yes
    idle=once
[pseudo-gui]
    player-operation-mode=pseudo-gui
    idle=once
[default]
    player-operation-mode=pseudo-gui
    idle=once
    terminal=yes
    title='${filename}'
    cache=512000 ###cache=768000            #0.75GB #cache=512000           #0.50GB
    demuxer-readahead-secs=30 #60
    cache-secs=120 #750 #1500        #cache-secs=3000
    cache-seek-min=5000 #1000 #<500kbytes> wait
    msg-time=yes
    msg-module=yes #デフォルト no                          # prepend module name to log messages
    msg-color=yes #デフォルト yes                          # color log messages on terminal
    cursor-autohide=250        #1000 autohide the curser after 1s
    stop-screensaver=yes       #特に設定しなくてもいい。yes 旧バージョンではバグっていた。
    term-osd-bar=yes #デフォルト no                        # display a progress bar on the terminal
    term-playing-msg='' #${estimated-display-fps} / ${container-fps} frame/sec'
    osc=yes  # スクリーンコントロール マウスでだらだらyes。ターミナル本位がどうか?! そのうち確認。忙しい。キーボード操作が排除されるわけではないのでどうでもいい。コンソールをアクティブにしているとキーが違うことに気がついた。そのうち整理する。
#
#OSD しつこい設定
#
    osd-fractions=yes         #Flag (default: no) 分数
    osd-border-size=1         #MAX 10
    osd-duration=5000 #ずっと2500だった    #Integer (0 to 3600000) (default: 1000)# hide the osd after x ms
    osd-scale-by-window=yes #no #yes osd-font-size= と連関する。
    osd-level=1 #2 #通常0?!  1にしてそれをあえて空にするのだ!!      #3デバッグに便利 0123 4段階(osd display) --osd-status-msg on interaction
osd-playing-msg='${filename}\n【vo:${current-vo}】\nhwdec:${hwdec-current}\n\n'
osd-msg3='M3${osd-sym-cc}【vo:${current-vo}】hwdec:${hwdec-current}\n${estimated-display-fps}=(${vsync-ratio}×${container-fps}) - ${frame-drop-count} -  ${mistimed-frame-count}\n${time-pos}- ${=time-pos} - v${volume}\nsync:${total-avsync-change} - delayed=${vo-delayed-frame-count}\n${width}×${height} - ${display-names}\n ${filename}\n ${track-list}\n${video-codec}\n${audio-codec}\n${audio-channels}\n'
    osd-font='源ノ明朝 Heavy' #'源ノ明朝 Medium' #'源ノ明朝 Light'
    osd-font-size=30 #48 64 #72 #36
    osd-color='#FFFFFFFF' #'#FFFFFFFF'           # ARGB format くっきりで。osd-color='#FF000000'
    osd-back-color='#22000230' # 55でもいいか。ffでベタ    '#00FFFFFF' OSD透明カラー
    osd-border-color='#ff000000'    # ARGB format     〃    #本来 '#FF000000'    # ARGB format     〃
    osd-border-size=1.5 # 3-10 いまいち??
    osd-shadow-offset=1 #1             # pixel width for osd text and progress bar
    osd-shadow-color='#FF000000'
    osd-align-y=bottom #bottom #top OSD縦位置
    osd-align-x=right #center  #right
    osd-spacing=0       #デフォルト0 10
    osd-bar-align-y=0          # progress bar y alignment (-1 上, 0 中, 1 下)
    osd-border-size=0.1        # size for osd text and progress bar
    osd-bar-h=0.1              #MAX50   height of osd bar 劇細は美しい。
    osd-bar-w=90               #MAX100  width of 目安バーなので視野にかんたんに入る程度でいい。

 
<500kbytes>#
#オーディオ::設定していますが無指定で基本的にはOKです。

#

    ao=alsa #pulse #alsa #デフォルト(pulse)でいい。#音 #ao=jack #jackにも対応。#    ao=pulse #
    volume-max=200                  # maximum volume in %, everything above 100 results in amplification
    volume=100 #90                       # default volume, 100 = unchanged
    audio-file-auto=fuzzy           # external audio doesn't has to match the file name exactly to autoload
    audio-channels=auto #2.0 #audio-channels=2.1 #
    audio-pitch-correction=yes      # automatically insert scaletempo when playing with higher speed
    af=scaletempo #
    audio-wait-open=2 #あえて遅延させる

#
#
色加減、字幕、再生スピードなど
#
    contrast=3
    brightness=-5 #-2
    saturation=8 #彩度
    gamma=-6 #-6 #10 #16
    sub-visibility=no #字幕
    speed=1.00
    correct-pts=yes        #fpsを動画に合わせる。たぶん不要。
[default]
    force-window=yes #GUI を常時表示
    keep-open=no    # keep the player open when a file's end is reached


#
#その他有能
#
    use-filedir-conf=yes #再生ファイルディレクトリのmpv.conf。とても有能
    pause=no # クリックで再生開始=自動再生しない。自動再生の場合=no/コメントアウト。
    stop-playback-on-init-failure=yes #ほんまかいな!! 壊滅的な場合じゃないかと。
    framedrop=vo #結構落ちる.選択としてはこれが適切!!!!!私の結論
<500kbytes>
#
#スクリーンショット
#
    screenshot-format=png
    screenshot-template=~/Pictures/mpv/%F-%P
#
#youtube 4k/UHDかつPCが速い場合
#
<500kbytes>    hls-bitrate=max    # use max quality for HLS streams
    ytdl-raw-options=format="(bestvideo+bestaudio[height>=?2160]/best)[protocol!=rtmp]" #4K/UHD
#
#その他 主に、1920x1200/16:10用

#

    video-align-y=0.9 #6 #0.8
    panscan=0.6 # 0.4 19:10。#パン w e 意外に便利
#
#
#input.conf篇 続く
#
#
#
# #
#

#
#

e2fsck: Get a newer version of e2fsck!


自分はmakeしましたが、debianパッケージはあるようです。
launchpad では適切なものを見つけられませんでした。
以下は使っていません。

e2fsprogs_1.43.6-1_amd64.deb

北アメリカ
ftp.us.debian.org/debian
http.us.debian.org/debian
ftp.debian.org/debian
ftp.ca.debian.org/debian
ftp.mx.debian.org/debian

当方make, on 16.04LTS 2017-10-17最新ソースから。



e2fsprogs_1.43.6-1_amd64.deb
ダウンロード


オリジナルサイト
https://sourceforge.net/projects/e2fsprogs/?source=typ_redirect
週あたりダウンロード数がすごいですね。
 5.0 Stars (9)
 11,960 Downloads (This Week)
 Last Update: 



2017年10月5日木曜日

AT-HA90USB 過去のレビューを上書き オーディオテクニカ USBヘッドホンアンプ

過去レビューを上書きしてみます。オーディオテクニカ AT-HA90USB

https://www.audio-technica.co.jp/atj/show_model.php?modelId=2324
※NTT-Xで安価販売されているせいか、急激にアクセスが増えてきました。それで若干補筆しました。ぶっちゃけ、親しい友達でかつWindows10ユーザーになら、「安いので買ってみたら」。その他OSなら、「うまくいくといいね」ってかんじでしょうか。たぶんここまでみている人はディレンマに陥っているのかもしれませんね。幸運を!! だめな時はだめ。

Windows10篇::処分をやめました。これは使える。


結論::USBヘッドホンアンプ  AT-HA90USB オーディオテクニカの「今」
僭越ながら、過去のレビューを上書きしたいと思います。書いたひとたちが悪いわけではなくて、OSのサポートの問題がほとんどであって、価格コムやamazonやその他でボロクソな評価です。が、必ずその日付を確認してみてください。悪意があって書かれているわけではないと思います。ただとんでもない勘違いを書かれている方も一部にいらっしゃる気がしますが、それはそっとしておきましょう。


Windows10に限っていえば、少なくとも2017年春のクリエイターズアップデートを適用した状態では、Windows10Pro、Windows10home(共に64BIT版)で、当方では完全に動作するようになっています。手持ちのUSB-DACの中でももっともクリアだと思います。私が適用したのは8月です。適当前はひどかったので箱にいれて保存していたのです。めったにWindowsは起動しないので。現時点(2017/11/06)では次のWindowsレベルまでアップデートをあてた状態でテストしてみました。良好でした。

ちょっとした経緯::お蔵入りを再開封してみて

(略)その後別のUSB-DACを買ってみたのでテストがてら再開封したところ、おそらくWindows10では最高の結果が得られれていることに気がついたわけです。
もともと、希望小売価格 ¥45,000(税抜)です。HA40USB、AT-HA70USB より高価で、後年リリースされた製品で、サンプリングレートなども上です。良いオペアンプなども使っているようですね(NJR社製オペアンプ(MUSES))。だたいろいろ問題があったがそれは過去のものであると当方では思います。

さて話は戻ります。

AT-HA90USBとPCを接続していない状態で、サポートで提供されているdriverを導入します。これできちんとはいるのですが、念のためdriverがどう組み込まれているか絵で示します。

Linux(ubuntu/mint)では、USB Audio Class 2.0 で動作していると思われます。それでUSB Audio Class 2.0対応を果たしたWindows10では専用driverは不要なのでは??と考えたのですが、USBAudioClass2.sys(うろ覚え::Linux上で書いています)で動作していません。違います。このマイクロソフトdriverが先につかむと動きません。なんとなく笑えるところ。

当方の環境における結論からいえば、HA90USB.SYSは必須(2012年)です。また、計4つのマイクロソフトの関連driverが組み込まれていると思いますが日付は2017/07/27だったと思います。

カジュアルユーザーな当方としてはいちおう高級機にあたるDACなので、お蔵入りしている方はぜひ繋いでみてください。うまくいくかもしれませんね。もったいないです。


流通在庫はあるようですが、生産中止ですし、正式にはWindows8.1までの対応です。
ユーザーは誰も悪くなかった。driver提供と改定というメーカーがすべきちゃんとした努力を怠った。結果、「オーディオテクニカは最初から壊れているものを売るな」とか声がでるのも不思議ではないし猜疑心が生まれるのも仕方ない。結果、妙な情報も含めて流通したみたいなことかと、あくまで私見ですが。

余談::この製品のことではありませんが、サポートできないのなら 商品企画から断罪されるべきかなと思います。ODM先のコントロールができないのなら、メーカーとはいえない。単なる輸入販売業は、個人でもできる。品質管理は壊れたものを売ることではないのです。ま、いいか。

Linux篇とMAC OSX

MACはありませんのでわかりません。お持ちの方がいれば教えてくださいませ。(USB Audio Class 2.0で動作するんじゃないかと思うんですが)

Linuxは無論サポート外です。ノーマルCD-DA/44.1khz、問題ないです。(ubuntu17.10 mint 16.04LTS)


ハイレゾソースに関してはあまりうまくないです。
まともに聴こえるっぽい方法を研究結果として示しておきます。
jack除外です。しても無駄だったので。

  • alsa で排他的っぽい使い方をする。このブログを検索
  • audaciousまたはDeadbeef両方で、resample して、48k/24bit相当に落とす。


ほかによい、または最適な方法があればぜひとも教えてください。私は「ない!!」と結論づけました。手持ちでは、このDAC以外96kDAC/192kDAC/48KDACがありますが、全てまともです。99.8%はLinux上なので、けっきょく別のDAC、かな、と。笑)



2017年9月20日水曜日

排他的にサウンドデバイスを使う::カンタンな設定の準備

WindowsでいうところのWASAPIみたいなDAC利用方法/ALSA・排他的


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

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

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

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


まとめるとUSB-DACなどでノイズ、プチ等が気になる場合は

  1. まず、この排他利用 をしてみる。
  2. それでもだめなら低遅延カーネルを導入する。
  3. それでもだめなら、jackを導入する。

という3段階で考えるといいと思います。その次はドライバが悪いか、デバイスが悪いということであきらめましょう。ノーマルレゾリューション(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にはありますが。いい方法があれば教えてください。ぺこり。特にラズパイで。

余談おわり。

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

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

$ 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スクリプトでどうぞ。これでいいかと思います。かたっぱしから試すのも手ですが。笑)


#次のコマンドを発行して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/'

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

#現在小生が排他的に設定しているアプリ
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

具体例::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

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

2017年9月15日金曜日

エレコム ハイレゾDACをLinuxで使う

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

嘘つき!! 挿すだけで使えるのだから、パーフェクトも何もあったもんじゃないです。とはいえ、だめなのはありました。これで自分では4つ目のUSB-DACです。

今回導入してみたのは、エレコム http://www.elecom.co.jp/ さんの写真と本体です。ハイレゾDACをDesktopLinuxで使います。もちろんノートPCでもいいでしょう。

1.本体 1100円ぐらい(定価の5%ぐらいで投げ売り中)
2.USB変換アダプター 150-300円ぐらい(PCとこれを接続)が必要。
3.基本スマホ用でandroidならそのまま使います。
4.予算に余裕があれば、ハイレゾ対応ヘッドフォン/イヤホンをゲット
5.(4万キロヘルツなんて聴こえへんのやからどうでもええやん)
6.どうやら相性問題が大量発生しているのかもしれません。それが安価な理由。
7.ちゃんと動けば音質は良い(悪くない)です。

欠点は、ボリュームがおおざっぱ。やっぱり持ち歩くにはうざったい。家PC用がいいのではないか、と思います。 ただしバッテリ消費が激しいのでPC用途が美味しいです。バッテリーのヘタっているスマホの人は使わないほうがいいかも。

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

メモ::

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

追記::ふつうにW10で動作しました。パーフェクト。

事前の学習(趣味なのでこの節飛ばしていいです)

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
もともと
cat /proc/asound/modules
では、snd_hda_intel
#認識とハイレゾ設定::サウンドデバイスまったくない状態で
●サウンドデバイスまったくない状態でHDMI disable手順を踏んでリブートし、かつUSB DACを電源onすると

cat /proc/asound/modules

1 snd_usb_audio


という具合に、USB DACが自動認識されます。他のデバイスはありません
(ダミー出力状態から、サウンドデバイスが認識される、と)。

●サンプルレート、ビット深度の設定 
Linux Hi-Res Audio USB-DACなどの設定」で設定しておいてください。
この設定はいつでもできますから、事前にしておく必要はありません。
また、pulseaudio用です。

USBに挿します。使います。


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

勝ち!!

#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を使わない)。
#


2017年9月11日月曜日

gnu grep のススメ、Perl互換オプションのススメ::あえて2017年に叫ぶ

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

2017年9月9日土曜日

tesseract-ocr OCR on Ubuntu/Linux Mint

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

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/

2017年9月6日水曜日

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

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 
 

2017年9月2日土曜日

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

ubuntu16.04.*


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

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

2017年8月15日火曜日

ATOM の日本語入力が変=確定前の文字が見えない。1.19はだめ。

確定前の文字が見えないという不具合

http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial/main amd64 atom amd64 1.19.2-1~webupd8~1 [94.9 MB] 23時43分 2017/08/21

治りました。

以下、記録のために残します。


8月8日公開の1.19かな。

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

深く考えずに前のバージョン1.18 に戻しましょう。
次を実行。たぶんこれでOK。AMD64。

$ sudo apt purge atom #まずatomを削除しておく。


$ wget https://launchpad.net/~webupd8team/+archive/ubuntu/atom/+files/atom_1.18.0-1~webupd8~0_amd64.deb && sudo dpkg -i atom_1.18.0-1~webupd8~0_amd64.deb

#しばらくこれATOMのアップデートは無視する運用にしておきましょう。Windowsでも同じみたいですよ。


たぶん、cjkvの人たちは全滅。
事前の7月下旬にバグリポートがあがっていますね。いつか治るのかな??

PPAで入れているのなら、PPAを無効にしておくとよいです。

/etc/apt/..../webupd8team-atom-xenial.list

# deb http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial main
# deb-src http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial main


コメントアウトしておけば、新版に気づきようがないので更新されません。

2017年7月9日日曜日

wine 2.0 stabale インストール

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

#mint18.2では6行です。2分程度で完結します。

wget -nc https://dl.winehq.org/wine-builds/Release.key
sudo apt-key add Release.key
 

sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ xenial main'
 

sudo apt-get update
sudo apt-get install --install-recommends winehq-stable

WineHQの通りです。mint18.2に導入してみました。

https://wiki.winehq.org/Ubuntu 

Launchapad のWine PPAはもう廃棄されます。
利用しないようにしましょう。

2017年6月20日火曜日

A2DP Bluetooth headphone のスムースなシンク切り替え

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

#スムースなシンク切り替え器の使い方

~/bin に、以下のテキストをスクリプトとして保存。1行だけオレンジを書き換える。

多数BTヘッドフォンを保有している場合は、ヘッドフォン毎にスクリプトを作ると管理が楽ちん。たとえば、 ~/bin/sonyMDRxxx とか、ELECOMxxx とか。MACを書き換えるのを忘れないでください。


利用タイミング

BTヘッドフォンの電源をいれてだいたい10秒後ぐらい。2秒ぐらいでもいいけれど。


使い方:
  • ターミナルで、スクリプト名を叩く。
  • ファイルマネージャーでクリックする。
  • 右クリックメニューに割り当てる。(おまけ実例後半)

お好きなように。

備考:なぜ必要か
GUIのサウンドでは表示はデジタルのままでも、実際はBTに切り替わっているというバグなんかが当方の環境では起きるので、 マウス操作するよりコマンドで確実に! という方針なのです。見た目ではわからない。Cinnamonです。最新版でも同様。Blueberryっていまいちなのかな?!

特に困ってない人は何もしなくてもいいのです。

#bt_smooth_sink(do name as you like it.)

#! /bin/bash
#@ A2DP 接続をほぼ確実にする。SINK切り替え限定の簡易版。Zish
# 接続+SINK切り替え版からのサブセットで抜き出しました。
#2012-2017
#
#書き換え   ↓ your own a2dp headphone, you must rewrite below line !!
A2DPMAC=1A:A5:C6:D7:F2:CC
#A2DPMAC=2nd
#
#
#
#
BTSINKS=${A2DPMAC//:/_}

#接続そのものが難儀な場合は次を有効にしたほうがよい。

    bt-device --connect $A2DPMAC




#echo ②デフォルトシンクを $A2DPMAC Bluetooth に
    pactl list short sinks | grep $BTSINKS | perl -pe 's/^(\d.*?)\tbluez_.*$/pacmd set-default-sink $1/' | sh
#echo ③ BluetoothプロファイルをA2DPに切り替える
    #pactl set-card-profile bluez_card.$BTSINKS off
    pactl set-card-profile bluez_card.$BTSINKS a2dp_sink
    pactl set-sink-volume  bluez_sink.$BTSINKS 115%
#echo ④ pactl set-default-sink bluez_sink.$BTSINKS 前後関係チェック
    pactl set-default-sink bluez_sink.$BTSINKS



#echo check bluez_sink="$BTSINKS"
if  pactl list short sinks | grep -E 'bluez_sink' ; then
#    echo ⦿ ブルートゥース A2DP + Hi-Fi 接続済み ⦿
#    pactl list short sinks | grep bluez_sink | grep -P --color=auto '(hdmi)|(analog)|(iec\d*)|(bluez_sink)|\s(\d\d\d\d.*?)(?=Hz)|surround.*?\d\s|RUNNING|\s\d(?=ch)|(?!=s)(\d\d)(?=le)'
    #無論、BTSINK限定なので無効であればA2DPから音出しできない。A2DP接続前提。定位チェックではないです
    echo "女性の声で「左、右、真ん中」. A2DP(ヘッドフォン)から聞こえればたぶん成功。"
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Left.wav
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Right.wav
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Center.wav
else
    echo "bluez_sink $BTSINKS ' がありません。BT/A2DP $BTSINKS は接続されていません。"
fi
echo EXIT


exit
Zish
A2DP 接続を確実にする。SINK切り替え簡易版(サブセット)。


#おまけ::Cinnamon/nemoアクションの右クリックメニューの実例:サブセットじゃないほう。

[Nemo Action]
Name=サウンド出力切替 Bluetooth SONY
Comment=sinks SONY


Exec=bash -c "sinks sony ; cinnamon-settings sound ;"
#Exec=bash -c "sonymdr ;"
Icon-Name=deadbeef
Selection=none
Extensions=none
EscapeSpaces=true
Quote=double
Active=true

2017年6月12日月曜日

Zsh :: Zsh_ hitory convert to UTF-8 Zshで最も嫌いなポイントが解決しました。


自分にとってのZshの最大の弱点は、ヒストリーファイルが取り扱いにくいことでした。アスキー以外の文字列がアレなので。日本語のファイル名がアレでコレでソレ。

以下で、それが解決できます。
使い方:新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
zshhist.py を ~/bin にコピー、実行属性も。
#ヘルプ
zshhist.py を ~/bin にコピーします。実行属性もつけるといいです。 
zshhist.py -h
#引数は2つ シンプル

     export         export zsh history file to UTF-8 text.
     import         transform UTF-8 text to zsh history format.

出力結果を > でファイル(エディタで編集)にするなり、パイプでコマンド処理するなりするといいと思います。

エディターより、編集したいパターンをPerl/awkなどのテキスト処理に強いコマンドで処理したほうが再利用もあるだろうし合理的かとも思います。

#例示1)エクスポートする。utf-8形式で日本語の文字化けのない扱いやすいファイルにする

zshhist.py  export

ががーと .zsh_history の"変な文字"になった日本語が綺麗になります。

#UTF-8にして、エディターで開いて(必要なら編集保存)
この作業している最中は、bashに切り替えておいたほうがいいかも。履歴が変わっていく。

例示1) utf-8形式で日本語の文字化けのない扱いやすいファイルにする。


zshhist.py export > /tmp/zsh_utf-8.txt && atom /tmp/zsh_utf-8.txt

次いで、import してみればいいかと。
オリジナルヒストリーファイルは事前保存しておいてください。


例示2) export した日本語ファイル名などの入ったファイルをエディターなりperl なりで編集したとする。編集後ファイルを書き戻してヒストリーとして使う。インポートする。


例示2) export した日本語ファイル名などの入ったファイルをエディターなりperl なりで編集したとする。例示1のコマンド形式。

編集後ファイル: zsh_utf-8_20170617_1835.txt

zsh形式にする。
zshhist.py import < zsh_utf-8_20170617_1835.txt > .zsh_history.new (Z)

このNewを既存の .zsh_history をバックアップの上、上書きする。

 

例示3) bash からの移行、あるいは、bash と zsh のヒストリーをマージする。bashからzshへの移行にも使えるし、両方使っていてたまにマージしたい場合も有能。




bash to zsh のハードルはZshのUTF-8問題だけなので、それさえクリアできれば自力であとの処理はできる人は大半だと思いますが、git に限らずbash to zsh は多数ありますが、以下に示すツールがいいかと。



流れはこれだけ。
Bash history to Zsh history  = zsh 形式のbash_history (B)と
上の(Z)をマージすればいいです。マージしたものをzsh形式にします。しました。

手順
1) utf-8の(B)+(Z)を作る (BZが完成)
2) (BZ)を.zsh ヒストリ形式にコンバート

zshhist.py import < (BZ).txt > .zsh_history (BZ_hitory)

3) この(BZ_hitory=いつものzshヒストリーです。日本語バケバケです。それがOK。読めたらおかしいのです) を本番の ~/.zsh_history に上書きして完成。


バックアップは事前にとってください。


生ソース:gist(github)のリンクが自動で貼られるはずです。この埋め込みしたのはじめてなので。





このツールを使えば、bash のヒストリーを一括編集加工して、Zshにもっていったりが楽ですね。英語だけに限ればZsh-Bash間のツールは多く見つかりました。ここのところ(日本語などの部分)が難しかったんです。はい。

Emacsな方は「Emacs で Zsh の ヒストリファイルを閲覧・編集する」が参考になると思います。





2017年6月6日火曜日

perl モジュールの導入。ubuntu mint のインストール候補

どうも壊れかけなのか、Synaptic/パッケージマネジャーの反応が悪いので検索がうまくいきません。 あるはずのものが出てこない。

そこで、cpanコマンドでなんかうまくいかず、ソースをもってきて、makeしたら最後にコケる。
cpanコマンドでは時々いれているので不思議です。
いらっとしたので、リストを取得していれてみました。 Term::UI; なんですけどね。
なんでだろう。cpanで説明を読んで試してみたくなったら、aptでリストにないか調べて、コマンドで導入するというのがめんどうがなくていいです。


手順は次の通りです。慣れるとカンタンなはずです。
  1. いれたいモジュールを思いつく。誰かの頁の紹介や、CPAN、perlmonkなどで。
  2. apt list でインストール候補に存在しないか調べてみる。
    著名PerlModuleは全部あると思っていい(と思います)。
  3. あれば、apt install で導入する。

    なければcpanコマンドかソース落としてきてmake。


debian/ubuntuのメンテナーが選んでいる候補なら安心して使える気がしますので、あまり使われてなさそうなのには私のような素人は手を出さないほうがいいのかもしれません。ただ、場合によってはパッケージングのアップデートが年単位で遅れることもありますので、その時は自力ですね。

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
#試しに打ってみる。  55318行でした。
apt list
#perl モジュールのリストを調べる。
apt list | grep -oP '^lib..*?-..*?-perl'

3228(パッケージ)モジュール。このマッチパターンで提供されているものとします。違うことはないでしょうが。
#数え方
apt list | grep -oP '^lib..*?-..*?-perl' | wc
#utf8-all という名前を知っているのでそれをいれます。
#インストールコマンド文字列を生成する。 納得したらぺったんして実行。
apt list | grep -oP '^lib..*?-..*?-perl' | grep utf8-all | perl -pe 's|^|sudo apt install |'

#インストールまで実行する。 (sudo に付き注意)
apt list | grep -oP '^lib..*?-..*?-perl' | grep utf8-all | perl -pe 's|^|sudo apt install |' sh

sudo apt install libutf8-all-perl

ちなみに上で書いているTerm::UIはこれです。
sudo apt install libterm-ui-perl
#

bash history を使いやすく。ctrl-r の改善ツール



ちょっと試せていませんが、こういうツールがあるようですよ。
頁をみるだけならただなので、どうぞ。

New utility to overclock Radeons for Linux

こういうツールを見つけました。GPUオーバークロックのためのツールです。

https://github.com/matszpk/amdcovc

make は通りましたが、当方ではエラーで動かない様子。

#AMDから入手するファイル展開(AMD ADL SDK)と以下の開発ファイルがmakeのために当方では必要でした。
 sudo apt install opencl-headers
 sudo apt install libpci-dev
#makefileも修正が必要です。
#ADLSDKDIR = /home/mat/docs/src/ADL_SDK9
ADLSDKDIR = /home/ehhen/Downloads/git/amdcovc/ADL_SDK_V10.2
#SDKは、V10.2も SDK9も通りました。

2017年6月5日月曜日

Perl 「Wide character in print」 エラーに即時対応する。

理由/原因には興味はないので必要ならググってもらうとして、

Ubuntuなどで ja_jp.UTF8 など(SHIFT_JISじゃあるまいに)を使っているのに発生して、Cpanモジュールなどが原因の場合、自分のスクリプトを書き換えずに、モジュールの方を書き換えています。

エラーでは行数が表示されますが、それは無視。当該hoge.pmに


#以下を追記
use utf8::all;



#libutf8-all-perl のインストールが必要です。
#sudo apt install libutf8-all-perl


自分の場合はこれでうまく対処できなかったことはありません。とても重宝しています。
別言すれば、エンコードだのデコードだのはばからしいので考えたくもないのでした。
とても便利なのでもっと知ってほしいです。Printするだけならエラーを無視という手も通じる場合がありますが、日本語を含む名前のファイルを自動生成するスクリプトなどの場合はとんでもないひどい文字化けだったりしますから、この呪文一行で解決するなら安いものです。


以前はご多分にもれず私もエンコードだの、デコードだのUTF8フラグを除去するだの、ばからしいコードを書いていました。こんな非生産的な行為をみんなやっているんだろうか? とふと疑問になって、CPANでUTF-8という文字列で検索できるモジュールを全部(ほんとうに全部)試してたどり着きました。

それはそうと、Python3でも小物を作るのですが、Unicode文字が自在に使えて便利ですよね(その意味で最高!!)。Perlでもこのモジュールlibutf8-all-perlを組み込むと変数に日本語が使えます。使っています。

my 章
my 節
my 項

みたいにです。 3年前ぐらいにubuntuのインストール候補になった気がします。

2017年5月24日水曜日

bash便利帳

自分に便利なワンライナーの雛形

ダミーテキストを作ったりする場合

同じ内容のテキストファイルを1000行作る。for文。
for i in {1..1000}  ; do echo こんにちは。>>こんにちは2.txt ;done

{}内がブレース展開される。結果1000回こんにちはする。
#zshでは、単一コマンドの場合、do/doneを省略できる。
for i in {1..1000}  ; echo こんにちは。>>こんにちは2.txt

#複数の動画ファイルの幅を調べる
mediainfo *.mp4 | grep Width |cat width.txt | perl -pe 's/^.*\: //,s/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}' | sort | uniq
mediainfo では4桁の場合、空白が入る「1_920」ので、それ[ ]を削除しています。


#再生する動画ファイルの横幅を調べて、変数に格納する。シェルスクリプト内で使うと便利かも。
PIXELS=`mediainfo "$1" | grep Width |perl -pe 's/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}'`
echo "Width $PIXELS pixels."

たとえば昔のビデオカメラ映像は小さいので、思い切り拡大して再生する。画質がよくなるわけではありませんけれど、幅に応じて拡大サイズを指定すると便利です。

case "$PIXELS" in

        320 )
        mpv --window-scale=6.0 "$1"
        ;;
        1920 )
        mpv "$1"
        ;;
        *)
        mpv --window-scale=1.0 "$1"
        ;;
esac

--window-scale=6.0 は、mpvのオプションです。キーボードでもできます。マウスでもできますが、ちょっと確認するだけなら操作は少ないほうがいいですよね。

大型4k所持者も少しづつ増えてきたので、 FHDは、
mpv --window-scale=1.5 "$1"


にしておいて、クリックで全画面に移行させるというのもいいかもしれません。
#


#
#
#

Sは、suffixのS ものぐさzsh: 実行コマンドを入力せずにファイル名単独でアプリと共に実行する。

Zshで可能で、Bashでできないシリーズ

#説明

% file.flac (enter)

とすると、mpvが起動すると楽といえば楽かもしれないという設定。
言い換えると、拡張子判別実行ですね。 どうなんでしょう?!
設定してから何年もたちますが当方の利用頻度は低いですね。bashが基本なので。

% *.mkv

以下の設定をするとmkv拡張子ファイルがmpvに割り当てているため自動実行されます。便利といえば便利か。

mpv --hwdec=auto --  *.mkv と等価。


以下bashのお話。

bashではこの芸当はできませんので、そこがあれ。bash ならふつうにグロブ展開させるのは同じですが、「mpv 」と入力する必要がありますよね。スペース含めると4文字打鍵。先頭に戻る必要がありますし、5文字打鍵か。

$ mpv *.mkv

mpvで起動する場合は、bash内蔵bindで モデファイラー-m に次のような割当を行っています。これはこれで便利。意味は、カーソル位置がどこにあろうが先頭に移動してmpv以下の文字列で実行する、です。マクロですね。

    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう。

    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-m"' #alt-m
余談:たぶんこう書いても同じです。
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \n"' #alt-m
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-j"' #alt-m

かなり長い文字列がOKみたいです。 mpvは今profile選択をメインにしていますけれど、全部1キー操作に置き換えることもできそう。効率的かはどうかとして。

余談すぎる余談。

ファンクションキーに割りあてる場合。完全1キー。こういう雛形を作成したので、少しづつ何かを割り当てていっています。覚えきれないけれど。笑) .inputrc よりこのほうが自分には調整しやすいかもです。zshのbindkey を並列して眺めつつできるだけ共通化しようと考えているんです。

#f5 f6 f7 f8 雛形
    bind '"\e[15~":"F5"' #F5 にキー割り当て
    bind '"\e[17~":"F6"' #F6 にキー割り当て
    bind '"\e[18~":"F7"' #F7 にキー割り当て
    bind '"\e[19~":"F8"' #F8 にキー割り当て

#接尾辞エイリアス suffixの -s
#拡張子判別実行
#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

以下のその1を .zshrc  末尾にでもぺったんして、試してみてください。その2は機械的にPerl で作成しただけなので、まったく触っていませんので、編集しながらお試しください。


#その1 触ってみて採用:雛形 
#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

# 引数込で指定もできた。コマンドの妥当性ではなくてどういう書式なのか確かめたということです。

alias -s  mkv="mpv --hwdec=auto -- "
alias -s  mp4="mpv --profile=opengl-hq --hwdec=vdpau -- "
alias -s m2ts="mpv
--hwdec=vaapi -- "
alias -s   ts="mpv --fps=60 -- "
alias -s  wmv=mpv
alias -s  avi=xdg-open

alias -s flac=mpv
alias -s  wav=mpv
alias -s  mp3=mpv
alias -s  ogg=mpv
alias -s  tta=mpv
alias -s  ape=mpv
alias -s  tak=mpv

alias -s  txt=atom
alias -s conf=atom
alias -s  rc=code

#alias -s pl=code 

#実行権限付与したかもしれないテキストは分岐させるか、関連づけないほうがいいですよね。たぶん。
#alias -s plx=code
#alias -s sh=code
#alias -s bash=code

#その2 ががーと生成してみた。すべて未検証
# 拡張子自動判別実行 てきとー::右側にタブいれるとエラーになる。

alias -s  Z=xdg-open
alias -s  gz=xdg-open
alias -s  bz2="bzip2 -cd %C|"
alias -s  deb=xdg-open
alias -s  rpm="rpm2cpio %C|cpio -tv" -f "%a %x %u %g %s %m %d %y %f"
alias -s  7z=xdg-open
alias -s  rar=xdg-open
alias -s  jpg=xviewer
alias -s  JPG=xviewer
alias -s  jpeg=xviewer
alias -s  png=xviewer
alias -s  PNG=xviewer
alias -s  gif=xviewer
alias -s  GIF=xviewer
alias -s  bmp=xviewer
alias -s  BMP=xviewer
alias -s  mpg=mpv
alias -s  wmv=mpv
alias -s  WMV=mpv
alias -s  avi=mpv
alias -s  mp4=mpv
alias -s  m4v=mpv
alias -s  mkv=mpv
alias -s  mov=mpv
alias -s  mpeg=mpv
alias -s  ts=mpv
alias -s  3gp=mpv
alias -s  mp3=mpv
alias -s  m4a=mpv
alias -s  ogg=mpv
alias -s  wma=mpv
alias -s  iso=cvlc
alias -s  flac=mpv
alias -s  wav=mpv
alias -s  tak="paplay -v"
alias -s  tta="paplay -v"
alias -s  ape="paplay -v"
alias -s  cue=audacious
#

2017年5月23日火曜日

シェルスクリプト1行便利帳(うつけ者用)


1行「定型文」 =1行制御構造の活用


横着かつ勉強好きでもないので、1行で押し込めるマイ「定型文」をけっこう使います。エディターの行編集で便利だからですが。1行なので書き足すだけ。複数行は使いにくい。
スクリプトのエレガンス度合いの問題ではなくて、簡便にしたいだけですね。不要になれば行削除できるわけで。
プログラマーではない自分にはあっています。マニュアルを読まない独学素人なので、根本的に何かが違うのかもしれません。ただきちんと間に合っているので悪くはないと思います。


ホーム~でうっかり実行しないようにする「オレンジ行」。ホームには.bashrcが必ずあるので。

#!/bin/bash
#@ Rename(J).pm によるリネーム
#~なら何もしないで終了。
if ls -a | grep -E '.bashrc' ; then exit ; fi

renameall -v
zenity --info \
--text="Rename(J).pm によるリネームが終わりました。\n対象:\n$PWD"

exit

ZiSH

オレンジ行は、.bashrc があれば何もしないで終わる、です。pwdでみてもいいんですがこれのほうが自分にはあってる。もっとかんたんに書けるのなら乗り換えたいです。ファイル存在を確認するより、このgrep を使うパターンひとつのみ覚えると応用がかなりきいてすんごく捗るのでこうしています。(プロの方からはその不真面目な発想を笑われそうですが) もっとも、.ICEauthority の存在をみたほうがいいのかも――とこだわっても仕方がないですね、たぶん。

ついでに、何をしているかを説明すると、

0)ホームにいるなら(.bashrcがあれば)何もしないで終わる。
1)ファイルリネームルールを悉皆適用する(renameall自作コマンド)
2)処理が終わったよダイアログをzenityで出す。マウスクリックで終わり。数分かかる場合があるので実行したことを忘れていたりする(笑)。

このスクリプトをmate/cinnamon で右クリックメニュー実行にしています。ターミナルでは叩きません。 マウス操作では特にうっかり実行してしまうので。あはは。

オレンジ行は単純。grepの返り値でマッチしたらexit。すんごくかんたんな分岐ですが自分のスクリプト中では活用度が高いです。

右クリックメニュー作成について 「右クリックメニューの拡張 scripts nemo caja」

#
#
#
#
#
#
#

2017年5月22日月曜日

利用中シェルに応じてコマンドを使い分ける。bash or zsh

zshとbashを同時並べつつカスタマイズしている最中に便利なコマンドであり、その雛形です。
  • zsh/bashでプロンプトの形や色などで変えていても間違えることがある。
  • キーバインドの統一カスタマイズ作業をしている最中はとりわけ混乱する。
  • 実はかなり間違えている。年に10回以上は:笑)
ので

以下をぺったんして、(当方はシェル関数はbash/zsh 共通のrcファイルにしています。共通で動かない関数は原則使いません。メンテがめんどうだからです。意識は高くないです。~/.bash_functions.rc にzsh/bash共通利用関数を書いています)
以下の実使用中の雛形では、bashrc または zshrc と打てば、rcファイルへの変更が反映されます。shrc というコマンド名もないはずなので、そういうので統一してもいいでしょう。

余談ですが、このパターンを利用して ~.keybindings というキーバインディング設定rcを.zshrc/.bashrcから読み込ませています。
#bash単独ならもちろん不要。
#@ シェル関数定義
#

    function bashrc () {
        #bashrc/zshrc で rc をシェルに応じて再読込。カレントシェル判別。
        CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`

        case $CURRENT_SHELL in
            BASH_VERSION )
              source ~/.bashrc && echo 更新完了 source ~/.bashrc ;;
            ZSH_VERSION  )
              source ~/.zshrc  && echo 更新完了 source ~/.zshrc  ;;
            *)
                echo not zsh , not bash  ;;
        esac
    }
    alias zshrc=bashrc
#zshrc としても、bashrcとしても、同じ。

# BASH_VERSION='4.3.46(1)-release'
# ZSH_VERSION=5.1.1
# csh / tcsh / fish (^fish_)などは使いませんのでこれで充足しています。

#~/.bashrc .zshrc

 if [ -f ~/.keybindings ];         then  .  ~/.keybindings    ; fi

#~/.keybindings

CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`
case $CURRENT_SHELL in

ZSH_VERSION  ) 
#ZSHはここから定義。
    bindkey "\e[3;2~" kill-word  #bash/zsh 共通
    bindkey '^x^e' edit-command-line #FC と等価 bash 標準アサインと統一した。
      ;;

BASH_VERSION )  #BASHはここから定義。

#■ ALT-シリーズ
    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう

;;
esac
#.inputrc に設定するよりこっちのほうが自分は楽。

青色の行でシェル名が変数に格納できますので、bashならほげ、zshなら、ふげというシンプルなcase分岐ができています。(カレントシェルに応じて)同じようなことをしたいけれどコマンド名が微妙に違うってケースは、シェル内蔵コマンド bind(bash)/bindkey(zsh)などでもありますよね。

zsh/bashに特化していますので、
grep で、a=アスキー限定、o=一致部分切り出し、P= Perl互換正規表現
としています。これで、ZSH_VERSION という文字列がCURRENT_SHEL格納できるわけです。
~/binなどにはこの分岐を使った他のツールもおいています。

余談。grep の -Pオプションは、なんだかんだいっても便利です。Perl互換の正規表現だけ覚えていればいいのでGNUツールのみしか使わないって人にはうってつけかも。職業的なプログラマー、SEなどであれば様々なUnix環境に対応したいと思うのでしょうが、自分は関係ないので。そういえば、このオプションでなんとかなっているので、pcregrep/pcre2grep は使いませんね。以前はエクスペリメンタルだった気がしますが、今はカジュアルに使っていいのではないかと。


zshは素晴らしすぎ便利すぎです。だから人間があほになりそう!!とbashを使うんですが、zshもいいよな、と。10年位こんなことを繰り返しています。あはは。もっとインテリジェント、エレガントな解法があれば乗り換えますので、ご教授ください。

#~/.profile mint18.1の .profile(ログインシェルで読み込まれる?!)では次のように書かれていました。さっき気がつきました。


# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi


2017年5月13日土曜日

nemo, nautilus などでサムネイルが表示されない場合

とりあえず、以下を一旦削除して入れ直したら、きれいに治った。(という現象)です。 ubuntu 16.04/mint 18.1 Cinnamon

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

2017年4月23日日曜日

非常事態、パッケージ管理システムのDBが壊れた場合

ハッシュサム不適合な事態に陥った場合などです。

次のコマンドで復旧していましたし、できますが。

年に数回でるようならメモリー不良を疑ったほうがいいかと。
必ず memtest で検査しましょう。
Windowsのメモリーテストはなぜか甘い。
通過したからといってだいじょうぶではありません。

        sudo rm -r /var/lib/apt/lists
        sudo mkdir /var/lib/apt/lists /var/lib/apt/lists/partial
        sleep 2
        sudo apt update


2017年4月20日木曜日

AMD RADEONドライバのできに我慢しきれず。

16.04LTS でのAMD RADEONドライバのできに我慢しきれず。――( [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] )です。――PPAの開発版/Dailyにしました。遅延、コマ落ち、ブロックノイズなどの再生不良に耐えきれなかったからです。


当方では著しい改善が見られています。だけれども非推奨ですね。朝と夕方でぜんぜん質が異なったりしますので、追いかけるのも大変なのです。日に2度は降ってきます。



なぜ入れてみたのか?! ですが、17.04ではとても円滑な動画再生と気がついたからです。
これまでPPA、それもドライバ関係は更新しないように、かなり我慢したのですが、改善がなくそれが16.04LTSの方針だと思う?!と仕方ありません。

LTSの意味が自分の中で消失した瞬間でした。

とはいえ、カーネルでも大差がでたりします。4.8、4.10、4.11などもテストで使っていますが以下が最も安定して速い組み合わせみたいです。CinnamonよりもMATEのほうが不具合が少ないですね。このように独自に調べることが多くて大変。


たぶん次の手順でいれたかと思います。


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
sudo add-apt-repository ppa:oibaf/graphics-drivers
#
sudo apt update
sudo apt upgrade
#当方で安定しているカーネルとDesktop Environment
System:    Host: phantom Kernel: 4.4.0-78-generic x86_64 (64 bit)
Desktop: Cinnamon 3.4.1
Distro: Linux Mint 18.2 Sonya

安定している方はいれないほうがよいと思います。FHDレベルで使っていたら気がつかなかったと思いますが、4Kにしちゃうと遅延だのが目立つわけで、「RADEON最低だな(半分いいがかり、半分は正しい)」。

ppa:oibaf/graphics-drivers ですが、特にmesaで処理が違うようです。FHDにして描画するとまったく気がつかない遅延でも、4K(+Resample 60FPS + vdpau/vaapi)にするとはっきりわかります。そして、ときどき完璧になるのです。ひどい出来の場合は12時間前のドライバをローカルに保存していますので、ざくっと書き戻しています。


現在は改善されていますがW10のプロプライエタリドライバでも春になるまでは遅延していましたので、オープンソースのLinuxドライバの場合はじっくり待つって姿勢が大事なのかもしれません。


自分としてはとてもハッピーです。この水準でLTSなのか?? パーソナル利用については、LTSにこだわる必要がそんなにないのかなとも考えてしまいました。


※追記 2017年5月15日


5/11のupdate以降、動画再生が非常に円滑になりました。4KでのVDPAU遅延コマ落ちが激減しました。グラフィックボードの買い替えも視野においていたのですがそのまま行こうかと思います。


全角数字を半角数字に変換 perl/perl6

全角数字を半角数字にPerlで変換する。3例


たぶんこういうことかな、と。以下フォントによっては判別不能かもしれません。置換前は全角、置換後は半角の数字が指定してあります。

CTRL+ALT+T

#perl5 tr で単純に
perl5 -pe 'tr|[0-9]|[0-9]|'
#perl5 y オプション::sed互換なので歴史的というべきか。
perl5 -pe 'y|[0-9]|[0-9]|'
#perl6では、yオプションは廃止、trのみになる。
perl6 -pe 'tr|[0..9]|[0..9]|'

なれば、trを利用した書き方だけ覚えればいいのではないか。perl6では各種範囲指定も「..」と現代風に切り替わっていくみたいですね。


おまけ:全角数字とメタキャラクター


perl6はデフォルトでは、\dに日本語の全角数字がマッチする。このデフォルトが便利なのか便利でないのかはまだわからない。 「壱」「捌」といったものには流石にマッチしない。さて、うまい利用法はないものか。

ワンライナーであれば6と5を気分と用途に合わせて使い分ければいいのでよい利用方法がそのうち浮かぶかもしれない。 闇雲に置き換えても言葉の意味が正式名から俗称にかわる可能性もあるので行政文書などでは考えた上で使うべきですね。

行政に限らず、第二次を第2次と表記替えしたら、リジェクトされるケースもありますね。

例)perl6で全角数字を食わせてみる。

全角であっても数字はアンダースコアに置き換えるというワンライナー。
echo 5壱7 | perl6 -pe 's:g|\d|_|'

というデフォルト挙動は覚えておかないととんでもないことが起きるかもしれませんね。
抑止などは公式サイトをご覧ください。