Ubuntu 18.04 トラックボールでホイールスクロールを模擬

会社で使っているマウスのホイールの調子が悪くなってきました。 ホイールは比較的早く壊れるので、できればこれに頼らないようにしていきたいものです。

家で使っているのはELECOM EX-Gというトラックボールなのですが、せっかくでかいボールが付いているので、 このボールでホイールのエミュレーションをするように設定してみました。

/usr/share/X11/xorg.conf.d に 80-elecom-trackball.conf という名前で以下のような内容のファイルを作りました。

Section "InputClass"
        Identifier "Wheel Emulation"
        MatchProduct "ELECOM ELECOM TrackBall Mouse"
        Driver "evdev"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "8"
        Option "Emulate3Buttons" "true"
EndSection

MatchProductの部分はxinputコマンドで出てきた名前を使います。 8と書かれているところはBack, ForwardボタンのBackに相当する部分です。 xevで押してみると確認できます。

元々Back, Forwardボタンは使っていなかったので、しばらくはこれで使ってみようかと思います。

追記1:

Backボタンとしても機能してしまっていたので、以下の設定で中クリック扱いにするようにしました。

        Option "EmulateWheelButton" "8"
        Option "ButtonMapping" "1 2 3 4 5 6 7 2 2"

EmulateWheelButtonはマッピング前の数値を使うようなので、注意が必要です。

ついでにBlenderの操作でForward(中クリック)を押しながら視点の移動ができるようになりました。

追記2:

ホイールのティルト左右でBack, Forwardができるようにしました。

        Option "ButtonMapping" "1 2 3 4 5 8 9 2 2"

DSLでMIDI変換スクリプトが書けるLV2プラグインを作成した

作りました。

f:id:ohac:20180917180640p:plain

github.com

これまではプログラマブルMIDI情報の変換にはmididingsとかQmidirouteを使っていましたが、LV2プラグインで欲しいなと思っていました。

スタックマシンなら簡単に実装できるかなと思い、作ってみたところなんとか作成することができました。

命令はすべてASCIIで表現可能なため、Carlaで保存されたXMLを直接編集することで内容を変更することが可能です。 独自の設定GUIは今のところありません。

命令はbrainf*ckの元となったFALSEをベースにしていますが、かなり別物になっています。 そのまま書くと訳が分かりませんので、別の言語(RubyPythonなど)で生成するようにした方がよいかと思います。

スクリプトの例として以下のようなものを作成しております。

5度上のノートを追加するやつ

Tx8*7-<3N%R%C\7+\

ノートオフを無視するやつ

C%%x/8-3Z%R%%%%

ベロシティを少し上げるやつ

$x8*7-<5Z%7+R%%x8*1-

MIDI CHを1増やすやつ

@1+@@

nanoPAD2の8つのパッドにそれぞれの音程をセットするやつ

\$4h-7N%%5h\R%$5h-7N%%4h\R%$6h-7N%%3i\R%$7h-7N%%2i\R%$8h-7N%%1i\R%$9h-7N%%0i\R%$ah-7N%%fh\R%$bh-7N%%eh\R%$ch-7N%%dh\R%$dh-7N%%ch\R%$eh-7N%%bh\R%$fh-7N%%ah\R%$0i-7N%%9h\R%$1i-7N%%8h\R%$2i-7N%%7h\R%$3i-7N%%6h\R%\

最後のは訳が分かりませんが、ジェネレータ側のdrum_pad.rbを見ていただければなんとなく分かるかと思います。

命令についての解説が全くないので、ぼちぼち書いていこうかと思っています。

WineでDrumMic'a!(KONTAKT Player 5)を動かしてみた

サンプラーと言えばNIのKONTAKTが有名です。 サードパーティの音源も多数あり、Linuxユーザーにとっては非常にうらやましく思うソフトの1つです。 サードパーティの音源は謎の可逆圧縮がかかっておる訳ですが、これはFLACでもALACでもなく、 独自の秘密のフォーマットであり、バイナリの変換ツール単体も提供されておらず、オープンな思想からは大きく外れております。

文句ばっかり言ってても始まらないのでLinuxのWineで動かす方法を探っておりました。

以前、KONTAKT Player 5を動作させたことはあったのですが、それからPCも変わり、いろいろとバージョンも変わってしまい、 手順も忘れていたので改めて環境構築に取り組んでみました。

以前はアクティベーションのソフトが動かなかったのですが、海外サイトでいろいろ調べていると最近のWineでは問題が解決してそうな感じだったのでモチベーションが上がりました。

アクティベーションがもし動くなら、ゼンハイザーがマイクの宣伝用に無償で提供しているドラム音源、DrumMic'a!をインストールし、アクティベートできればKONTAKTのクロスグレードが安く入手できます。 セールのときはさらに半額になったりすることもあるようです。今はKONTAKT 6が控えているのでしばらくセールはないかもしれませんが。

で、結果から言うと動きました。

f:id:ohac:20180909092843p:plain

f:id:ohac:20180909092854p:plain

手順はちょっと整理できていないので、とりあえず苦労した点やコツを箇条書きにしておきます。

  • wineはgitのやつからビルドしていたが結局うまくいかず、PlayOnLinuxでビルドしたやつでうまくいった。
    • PlayOnLinuxはうまく動かないところがあるが、wineの管理だけはちゃんと動いていた。
  • 環境変数のPATH, WINEPREFIX, WINEをちゃんとセットする。(WINEはwine64を指定)
  • フォントが文字化けというか豆腐になるのを調べるにはps axでプロセスIDを調べてlsof -pでfontsをgrepする。
    • フォントを別のファイルに置き換えたり、消したりすると直ったり、原因の切り分けができたりする。
  • winetricksで色々とインストールする。
  • winehqのサイトで動かした人のコツを調べる。
  • winetricks msvcp140=native は重要。
  • winetricks win7 も重要っぽい。
  • msvcp140などのdllのサイズが小さくなってしまい、winetricksでいろいろやっても戻らないことがあった。
    • 別環境のWINEPREFIXを作成し、そこで入手できるパターンを探す。
    • うまくいったときのDLLを保存しておいた方がよい。今回はたまたま別環境にあったのでそれを使って上書きした。
    • winehqのサイトではDLLをあるサイトからダウンロードした人もいるが、この方法は危険だと思う。
  • sudo mount -t udf -r Kontakt_Factory_Selection.iso cdr -o unhide みたいな感じでマウントする必要あり。
  • 今のところKONTAKTスタンドアローンでは音が出ていない。AirWaveを使ってCarlaのVSTとして読み込むと音が出た。
    • AirWaveは本家ではなく、rodlie/airwaveのバージョンを使う。READMEとその変更内容(git log -p)をよく読むこと。
  • DrumMicA.zipのダウンロードは時間がかかる。
    • sha256sumは 2a8a6a5b5d480b1eb9ef25ec7830e6ead89cf9b6a7fe1d90c95a4399d24e11f9 だった。
  • DrumMicA.zipはunzipコマンドでエラーが出るので7z xで展開する。DrumMicA Setup PC.exeを実行する。

あと、Sample Tank 3のメモもついでに書いておきます。

  • SampleTank_3_3.7.zipの中のInstall SampleTank.exeをインストールする。
  • Program\ Files\ (x86)/IK\ Multimedia/Authorization\ Manager/Authorization\ Manager.exe でアクティベートする。
  • SampleTank_3_Sound_Content_Part_1.zipから_8.zipまでを展開し、それぞれインストーラを実行する。

それとKORGのM1とWAVESTATIONのメモも。

  • 文字化けしてアクティベーションの画面がよく分からないときは手順のPDFを見ながら操作する。
  • wine64でインストールしてもAirWaveでは32bit扱いになり、Carlaでホスティングできない。調査中。32bitのwine環境の方がよいのかも?
  • スタンドアローンでは一応動いているが、レイテンシを考えるとwineasioを頑張って入れる必要がある。
    • 前はそうしたが、手順をまた調べる必要がありそう。

2018/11/11追記: 続きを書きました。

ohac.hatenablog.com

Pianoteq 6 PROのインストールメモ

Linuxをサポートしている珍しい貴重な音源、Pianoteq 6 PROをインストールしたときのメモです。

まず、Pianoteqのサイトに行き、サインインします。

www.pianoteq.com

User areaのDownloadsからLinux, v6.2.2, 32-bit/64-bitをダウンロード。 拡張子は7z。 (なんかOrganteq Alphaというのもダウンロードできるぞ。なんだこれ。)

適当なところで展開して、スタンドアローン版の実行ファイルamd64/Pianoteq 6を実行。

以下のような画面が表示される。

f:id:ohac:20180904125909p:plain

ボタンを押すと以下のような画面となる。

f:id:ohac:20180904130133p:plain

Registered productsに表示されているコードを入力し、Quick Activationを押す。

f:id:ohac:20180904130157p:plain

こんな感じの画面が出れば成功。

f:id:ohac:20180904130413p:plain

設定せよ、と指示があるので以下のようにJACKを指定してみる。 MIDIキーボード(AKAI LPK25)を接続して、それを選択。

f:id:ohac:20180904131152p:plain

なんか画面がでかいので設定でTinyに変更してみた。

f:id:ohac:20180904130707p:plain

JACKで接続。MIDIは接続しなくてもいいみたい。

f:id:ohac:20180904131347p:plain

無事、音が鳴った。

VST/LV2の場合はCarlaで.soを読み込ませるとよい。

f:id:ohac:20180904132932p:plain

f:id:ohac:20180904132945p:plain

f:id:ohac:20180904132958p:plain

f:id:ohac:20180904133009p:plain

こんな感じ。 GUIを出すと...

f:id:ohac:20180904133034p:plain

はみ出て見えない...

Linuxで再生されている音を録音する方法色々

Windowsはよく知りませんが、Linuxでは簡単に再生されている音を録音することができます。

方法1. parecコマンドを使う

$ parec > rec.raw

f:id:ohac:20180902105944p:plain

こんな感じでpavucontrolからどれを録音するか選択できます。

この例ではNull出力を使っています。

~/.config/pulse/default.paで以下のように指定すればNull出力が使えるようになります。

load-module module-null-sink

これならオーディオインターフェイスがなくてもいけますね。

あと、録音用のNull出力を別系統にしたい場合は以下のようにして名前を変えてやれば増やすことが可能です。

load-module module-null-sink sink_name=parec sink_properties="device.description=Null2"

動的にやるなら以下のコマンドで。

$ pactl load-module module-null-sink sink_name=parec sink_properties="device.description=Null2"

f:id:ohac:20180902110622p:plain

方法2. PulseAudio+ffmpegを使う

$ ffmpeg -f pulse -i default -y rec.flac

f:id:ohac:20180902110823p:plain

ffmpegなので好きな形式にエンコードすることができます。 PulseAudioありでビルドされている必要がありますが、Debianパッケージならありになっています。

方法3. JACK+timemachineを使う

JACKを開始後、timemachineを起動。

$ timemachine

f:id:ohac:20180902111338p:plain

f:id:ohac:20180902111348p:plain

PulseAudio JACK Sinkの出力をtimemachineに接続。 あとはボタンを押せばRAWで録音開始となります。 ファイル名は現在日時をベースとしたものになります。

これも録音用を別系統にしたければ別名のJACK Sinkを作成すればよいです。

$ pactl load-module module-jack-sink client_name=pulse2

f:id:ohac:20180902111858p:plain

f:id:ohac:20180902111910p:plain

方法4. JACK+ffmpegを使う

方法3とほぼ同じですが、timemachineではなくffmpegを使う方法。

$ ffmpeg -f jack -i ffmpeg -y `date +%Y%m%d_%H%M%S`.flac

ファイル名はなんでもいいですが、ここではdateコマンドで現在日時を使うようにしています。

PanasonicのカメラとのWiFi通信

PanasonicのLUMIX GシリーズのミラーレスカメラGX8を購入しました。 WiFi通信が使えるカメラは初めてなのでいろいろと実験してみました。

ここ数年のPanasonicのカメラはHTTPで接続すると/cam.cgiで色々と制御できるようなっているということが分かりました。

export host=192.168.54.1
curl -v "http://${host}/cam.cgi?mode=getstate"

ただ、この状態に持ってくるにはどうやら通信先のソフトをカメラ側に認識してもらう必要があるようです。

私はPanasonic純正のAndroidアプリImage Appをインストールしてカメラを同じアクセスポイントに接続することでこのあたりはパスしました。

このへんは試していないので省略しますが、:60606/xxxxxxxxxxxx/Server0/ddd/cam.cgi?mode=accctrl&type=req_acc&/cam.cgi?mode=setsetting&type=device_name&の2つを適切なパラメータで呼ぶ必要があるようです。詳しくはGitHub内を"cam.cgi"でコード検索してみてください。

カメラ側でWi-Fi機能、履歴から接続するを選びAPに接続すると「スマートフォンのアプリを立ち上げていない場合は、立ち上げてください」と表示されるので、ここで1回だけcam.cgiのgetstateを送って認識させます。IPはDHCPなので事前になんとかして調べておいてください。本体のIPアドレス表示機能がありますが、接続しないと表示されないので使えないです。私はとりあえず一度だけImage Appを立ち上げてIPを確認しましたが、もうちょっとよい方法が欲しいところです。arpingとかを使えばいいのかな。

追記: とりあえず以下のようなスクリプトpingを打つことにしてみました。

seq 200 254 | xargs -P32 -i ping -c1 -W 1 192.168.24.{} | grep icmp_

/cam.cgi?mode=startstream&value=49152みたいなコマンドを送るとvalueで指定したUDPポートにMotionJPEGっぽいデータが送られてきます。 これをffplayで再生できるとの情報もありましたが、私の環境ではだめでした。netcatで受信後にffplayやmplayerで再生することはできました。 どうもパケットを解析してffd8からffd9までのJPEG部分だけを取り出して保存していく必要があるようです。このあたりも検索すればいろいろと出てきます。

ただ、なぜか動画の上部しか表示されませんでした。動画の大きさは/cam.cgi?mode=setsetting&type=liveviewsize&value=qvgaで変えられたので、QVGAで同じようにしてみたところ、うまく再生できました。

大きさはVGAQVGAの2択のようです。フレームレートもあまり期待できないようなので、リモート制御するとき以外はあまり使うことはなさそうです。

で、肝心のファイルのダウンロードはどうするのか調べたところ、ダウンロード自体はhttp://${host}:50001/DO${id}.${ext}のような形式のようですが、既知のidを使ってもうまくダウンロードできませんでした。

その後、UPnPでいろいろとしないといけないことが分かってきました。どうやらUPnPでファイル一覧にアクセスしてからでないとダウンロードできないようです。あと拡張子はなんでもよさそうです。jpgやmp4などを指定しておけばよいでしょう。

UPnPの処理は長くなるので以下のGistを見てください。

gist.github.com

:60606/Server0/CDS_controlをPOSTしているところがそれです。

結果がXMLで得られたらあとはそれを解析するだけです。

ここまでくればお好みのスクリプトで調理してあげればよいです。この例ではxml2を使っており、事前にsudo apt install xml2しておく必要があります。

あとはtmp.xmlを見ればなんとなく分かるかと思いますが、/Result/DIDL-Lite/item/@id=がIDで/Result/DIDL-Lite/item/upnp:class=がファイルの種類です。

ダウンロードは先程のhttp://${host}:50001/DO${id}.${ext}となります。

PanasonicのカメラはAPIの仕様が公開されていないため苦労しましたが、先人のハックのおかげでここまでできるようになりました。 GH4やGH5とかでもたぶんいけるのではないでしょうか。

WiFiでのダウンロードよりもSDカードやUSBマスストレージを使う方が速いですが、お手軽にダウンロードスクリプトを走らせてしばらく放置しておけばよいので使える場面はあるかと思います。

Ubuntu 18.04.1 LTSでDTM - Carlaのインストール

今回はCarlaのインストールです。

Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats.

CarlaはLV2やVST, LADSPA, DSSIプラグインのホストアプリです。 あと、SF2やSFZ, GIGといったサウンドフォント/サンプラーデータのファイルが扱えます。

個人的にはSF2やGIGは自分で作ることはありませんが、SFZは自分で編集したりします。 特にドラム音源についてはDrumGizmoやHydrogen、DrMrといった専用のものはあまり使わずにSFZ化して使うようになりました。

GUIの見た目はこんな感じです。(CLIもありますが。)

f:id:ohac:20180728133536p:plain

と、スクリーンショットを取ってみて気付きましたが、SF2やSFZが扱えない...。 これについては後述します。

LV2などのプラグインは普通に使えます。Add Pluginを押して、上部から検索して追加します。 以下はeqを検索した結果です。

f:id:ohac:20180728133813p:plain

さて、ビルドについてですが、まず以下のリポジトリをgit cloneします。

github.com

あとはmakeしてsudo make installするだけなのですが、/usr/localに自分でビルドしたffmpegがインストールされているため、うまくビルドできませんでした。

以下のようにパッチをあててビルドが通るようになりましたが、あとでffmpeg側のビルド方法を変更して対処できることが分かりました。 一応メモしておきます。

Carla$ git diff
diff --git a/source/Makefile.mk b/source/Makefile.mk
index d24e8c13..c6ec9e12 100644
--- a/source/Makefile.mk
+++ b/source/Makefile.mk
@@ -209,7 +209,7 @@ HAVE_PULSEAUDIO   = $(shell pkg-config --exists libpulse-simple && echo true)
 endif
 endif
 
-HAVE_FFMPEG       = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
+#HAVE_FFMPEG       = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
 HAVE_FLUIDSYNTH   = $(shell pkg-config --exists fluidsynth && echo true)
 HAVE_LIBLO        = $(shell pkg-config --exists liblo && echo true)
 HAVE_LINUXSAMPLER = $(shell pkg-config --atleast-version=1.0.0.svn41 linuxsampler && echo true)

ffmpeg側は以下のようにビルドすることで上記パッチは不要となります。

ffmpeg$ ./configure --enable-libjack --enable-shared --enable-pic --enable-libx264 --enable-gpl

make, sudo make install後、Carla側をmake cleanしてやりなおせばOKです。

で動かしてみたところ、VSTやLV2などはちゃんと動くのですが、先程も書いたようにSF2/SFZ/GIGが動きません。

調べてみたところ、外部ライブラリが必要だということが分かりました。

まずSF2についてはfluidsynthが必要となります。 以下のようにインストール。

sudo apt install libfluidsynth-dev fluidsynth

make featuresを実行すればどれが有効になっているか分かります。

make features

ビルドしなおして、CarlaのGUICLIでFluidR3_GM.sf2を読み込んでみます。

carla-single sf2 /usr/share/sounds/sf2/FluidR3_GM.sf2 

問題なければJACK側に表示されます。

次にSFZ/GIGですが、linuxsamplerをインストールする必要があります。

The Linux Sampler Project

linuxsamplerのライセンスはちょっと変わっているので、aptではインストールできません。 ここでは時前でビルドしてみました。

ビルドするにはbisonが必要なので以下のようにしてインストールします。

sudo apt install bison

サイトから以下の3つのtarボールをダウンロードします。

  • libgig-4.1.0.tar.bz2
  • liblscp-0.5.8.tar.gz
  • linuxsampler-2.1.0.tar.bz2

libgig, liblscp, linuxsamplerの順に以下を実行しインストールする。

./configure
make -j8
sudo make install

Carlaをビルドしなおして、CarlaのGUICLIで何かSFZやGIGを読み込んでみます。

SFZのサンプルとして自作音源を紹介しておきます。

https://sound.sighash.info/

SFZでインターネットを検索すると他にもたくさん音源がヒットすると思います。 多すぎるため、品質のよいものを探すのに苦労しますが。

SFZはどこかのKONTAKなんちゃらと違ってオープンなフォーマットなので、生データがあれば自作することが可能です。 個人的にはDrumDropsのデータを購入してSFZ化してドラム音源として使っています。

www.drumdrops.com

あとSF2はaptからいくつかインストールできるようです。 どんな音源なのか聴いていませんが、ためしにインストールしておくとよいかもしれません。

sudo apt install timgm6mb-soundfont opl3-soundfont fluid-soundfont-gs musescore-general-soundfont