MODO BASSのデモ版をWineで動かしてみた

MODO BASSのデモ版があることを最近知ったので、LinuxのWine環境で動作するか確認してみた。

とりあえず動いたので、動画を録ってみた。

www.youtube.com

デモ版は以下からダウンロードできます。

www.ikmultimedia.com

たぶんwineasioドライバー+JACK環境が必要だと思います。 PulseAudioを選択して音を鳴らすと変な音が出ていました。

音はさすがに良いですね。打ち込みでCCとかを駆使すると本物っぽくなると思います。

HDMIをUSB(UVC)に変換するコンバータを買ってみた

HDMIをUSB(UVC = USB Video Class)、つまりウェブカメラのように取り込めるようにするコンバータがあるのを最近知りました。 UVCは標準化されたものなので普通にLinuxVideo4Linuxで使えるだろうからこれは欲しいなと思いました。

最初に購入したのがezcap287というやつで9,000円台で買えました。 しかし、これは初期不良なのか何なのか分かりませんが、ノイズが入りまくる問題がありました。 これでは使いものになりません。

無事、返品できたので今度はI-O DATAのGV-HUVCを中古で買いました。13000円台でした。

こちらは問題なくデジカメ(GH-2)のHDMI出力を取り込むことができました。

以下はffmpegでxvで画面に表示し、それをx11grabでキャプチャしたものです。 比較用にLogicoolのウェブカメラも映しています。

www.youtube.com

GV-HUVCは60fpsで取り込めておりますが、x11grabが30fpsでしかキャプチャできていないです。 まあ、これでも十分使えるレベルです。

ウェブカメラの方は960x720で15fpsしか出ていません。

どちらも動きがあると横線のようなノイズが入りますが、これはどうしようもないのかもしれません。

デジカメの弱点はバッテリーの交換が必要なことです。 ウェブカメラはUSBで給電しているので、ほったらかしでお気軽です。

ffmpegでjackの音声も同時にmkvに入れることができるのですが、これをするとfpsが落ちたり、うまくキャプチャできなくなったりします。 音声は別ファイルに録画して、後でkdenliveなどで手動で同期させてレンダリングするのがよいのではないかと思います。

MIDI Guitar 2をLinuxのWine環境で使ってみた

特に苦労することもなく、すんなりと動いた。

www.youtube.com

MIDI Guitar 2は以下からダウンロードできます。

www.jamorigin.com

評価版ですが、時間制限があるだけで評価するぐらいなら問題なく使えるかと思います。 製品版は1万円ちょいです。

動画を見てもらえれば分かりますが、和音も結構正確に変換してくれます。 ピッチシフトを入れるとちょっと不安定感はあります。

私はギターシンセのBOSS GP-10を持っているので、今すぐには必要がなさそうなのですが、今後買うことがあるかもしれません。

GP-10とかを持っていない方なら買ってみて損はなさそうです。

あと、ベース用のMIDI Bassというのも付いてくるようです。こちらも評価版があります。

www.youtube.com

VOCALOIDみたいなSynthesizer Vの評価版を試してみた

LinuxではWINEを使わなければVOCALOIDやUTAUのようなソフトは動かないのですが、Synthesizer Vというソフトがリリースされ、これがUbuntu 16.04 またはそれ以降 (64 bit)をサポートしていました。

synthesizerv.com

ダウンロードページからsynthv-editor.zipと音源のsynthv-eleanor.7zなどをダウンロードし、解凍したディレクトリsynthv-editorの中に音源を配置(databaseとregistration)すれば準備完了です。

./synthesizer-v-editor を立ち上げると評価版は10秒待てと言われるので待ちます。その後、Continue Evaluationを押すと使える状態になります。

f:id:ohac:20181230104449p:plain

ProjectメニューのVoice Database...を選択し、音源を選択します。

f:id:ohac:20181230104646p:plain

あとはピアノロールエディタに音符と言葉を置いていくだけです。

以下は適当に試してみたサンプルです。(音声のみ)

TRK-01 PLAYというのが無料になっていたのでwineで動くか試してみた

Unwrap your free kick and bass instrument TRK-01 PLAY, treat yourself with a ¥3,180 voucher, and enter our holiday giveaway.

というのをやっていたので、wineの環境で動くかどうかちょっと試してみました。

www.native-instruments.com

ohac.hatenablog.com

Kontakt 6を動かしたときにReaktor 6も動くことは確認していましたが、使い方がよく分からなかったので立ち上げただけでした、

結果的には動いたので、以下スクリーンショットを貼っておきます。 使い方はReaktor 6 Playerで音源をD&Dするだけです。

f:id:ohac:20181215114723p:plain

f:id:ohac:20181215114717p:plain

以下は手順のメモです。

Caddyでプロキシを立てた後、Native Accessを立ち上げるとアップデートのダウンロードが始まりました。 アップデート後は例のバイナリパッチが当てられていないので、ログインできなくなります。

アップデートの度にバイナリパッチを手で当てるのも面倒なので、xdeltaを使用するようにしてみました。

gist.github.com

上記get_xdelta.shで前回のバイナリパッチを作成します。 圧縮なし(-0)、チェックなし(-n)、ブロックサイズ指定(-s=8)にしてみました。

アップデート後に xdelta_patch.sh を動かすとパッチが当てられます。

パッチを当てる箇所のオフセットが変わっていなければそのまま使えますが、今後もこれでいけるかどうかは分かりません。

ssssをgolangに移植してみた

この記事は、Go2 Advent Calendar 2018の9日目の記事です。

qiita.com

以前、ssssを使った秘密分散について書きました。丁度1年ぐらい前ですね。

ohac.hatenablog.com

ssssというのはSSSS.GRIDMANとは全く関係なくて、Shamir's Secret Sharing Schemeのことです。 Shamirというのは人の名前で、RSA暗号のSの人ですね。

で、これを今回Go言語に移植してみました。 というのもこのssssはC言語でコーディングされており、今時の高級言語には移植されていなかったためです。

Go言語ならWindowsやARM用のバイナリを作るのは簡単ですし、最近ではwasmにも変換できるため、 ブラウザ上で動作させるように改造することも容易になります。

ソースコードgithubに置きました。

github.com

とりあえず移植したレベルですので、ライブラリ化やコマンドラインアプリ部分との分離とかはまだやっていません。 git cloneして、go buildすればssssgoというバイナリができますので、以下のような感じで動作させることができます。

ssssgo$ go build

ssssgo$ ./ssssgo -t 3 -n 6 split
Generating shares using a (3,6) scheme with dynamic security level.
Enter the secret, at most 128 ASCII characters: foo bar baz
Using a 88 bit security level.
1-d9bd5efeb34972b41dcb98
2-25c1440f501ee5a1723d81
3-2e14fbbc265d4f36d2ca65
4-bd30c359096f0190188682
5-b6e57cea7f2cab07b87174
6-4a99661b9c7b3c12d78749

ssssgo$ ./ssssgo -t 3 combine
Enter 3 shares separated by newlines:
Share [1/3]: 6-4a99661b9c7b3c12d78749
Share [2/3]: 3-2e14fbbc265d4f36d2ca65
Share [3/3]: 2-25c1440f501ee5a1723d81
Resulting secret: foo bar baz

コマンドライン書き方がちょっとオリジナルとは違うのと、入力文字列が隠れない点が移植しきれていませんが、ちゃんと動いていることが分かります。

今回はAdvent Calenderの記事でもありますので、git log -pを見ながら移植についての感想みたいなものを書こうかと思います。

最初はやはり勢いが大事です。まずは拡張子.cを.goに書き換えて、go fmtが動くところまで持ってきました。 ただし、ややこしそうなところや、最初の目標と考えていたsplit部分以外はひとまずコメントアウトしました。

で、一番の不安要素としてはgmpの部分をどうやって移植すればよいかと考えていました。 mini-gmpを移植しないといけないのかと。

1つ見つけたのは github.com/ncw/gmp というパッケージで、これはlibgmpをgolangから呼べるようにするもののようでした。

github.com

gmpというのは何なのかを調べたところ、大きい整数を扱うための高速なライブラリのようでした。 gmpGNU Multi-Precision Libraryの略だそうです。

GNU Multi-Precision Library - Wikipedia

今回は高速動作は重要ではないですし、整数のライブラリなら他にもあるだろうと調べたところ、普通に標準ライブラリにありました。math/bigというやつで、この中のInt部分です。

big - The Go Programming Language

この時点での移植プランとしては、とりあえずncw/gmpを使って動作するところまで持っていき、その後でmath/bigへ移植しようと考えました。 ncw/gmpはmath/bigと同じようなインターフェイスを持っているため、ncw/gmpで動けば、ほぼそのままmath/bigでも動くだろうし、libgmpの関数とmath/bigでの呼び方の対応を見るにはncw/gmpソースコードを見れば分かりそうだったので、非常にありがたかったです。math/bigへの移行はgmp.Intをbig.Intに書き換えるだけです。

オリジナルの乱数は乱数プールから値を読むような処理がありました。これは最初はmath/randのUint32()を使っていましたが、セキュアでないため後でcrypto/randに置き換えました。(wasm化する場合はこれはJavaScriptのSecureRandomあたりにバインディングされるのではないかと思いますが、調べていません。SecureRandomは古い実装だとMath.randomにfallbackする問題があるらしいですが、wasmが動くような最近のブラウザはたぶん大丈夫なのかもしれません。すんません調べていません。)

ということで、できていないところとしてはメモリのロック処理(mlockall)、uidの処理(seteuid)、secret入力時のecho offがありますが、本質的な部分ではないので今はあまり移植するモチベーションがありません。

まとめ

C言語で書かれているコードをWindowsやRasPiやブラウザで動かしたければまずは拡張子を.goに書き換えることからスタートしてみてはいかがでしょうか。

wineでKontakt 6 Playerを動作させた

以前、Kontakt 5 Playerをwine環境で動作させました。

ohac.hatenablog.com

あれからだいぶ時間も経過しまして、Kontaktは6が最新バージョンとなりました。 割と簡単に動くだろうと思っていたのですが、かなり苦労しました。

ある時期にライセンスやダウンロードの管理がService CenterからNative Accessに変更となり、 これを正常に動作させるために非常に苦労したのです。

Kontakt 5 PlayerとService Centerについては今のところLegacy Softwareからダウンロード可能です。 ただしライセンスの管理はできないかもしれませんし、古いソフトのアップグレードのキーの入手は困難と なってきますので、Native Accessに移行せざるを得ないでしょう。

結果的には無理矢理動かすことができましたので、覚えている範囲でつまづき点をメモしておきます。 また、苦労した点は最後の方に書いておきます。

  • 使用したwineは64bitの3.20。PlayOnLinuxでビルドした。
  • 環境変数は以下のような感じで設定
export PATH=$HOME/.PlayOnLinux/wine/linux-amd64/3.20/bin:$PATH
export WINEPREFIX=$HOME/.wine64a
export WINE=wine64
  • 前回同様winetricksで色々と必要そうなものを追加インストール。winecfgであれこれネイティブ版に切り替えたり戻したりしてみる。
  • インストールは$WINE Native\ Access\ 1.7.3\ Setup\ PC.exeで実行。特に問題なく終了した。
  • cd $WINEPREFIX/drive_c/Program\ Files/Native\ Instruments/Native\ Accessディレクトリを移動。
  • httpsでのアクセスで問題が起きるようなので、以下のCaddyfileでhttp化したプロキシサーバーを立てる。ポートは443だけどhttpで動作する。

Caddyfile · GitHub

  • このままだとNative Access.exeは正規のサーバーにhttpsで接続してしまうので、バイナリにパッチを当てる。
  • 今回はbviでapi.native-instruments.comをapi.native-instruments.cozに1文字変更し、その直後にあるhttpsをhttp+ヌル文字に書き換えた。
$ diff -u <(xxd Native\ Access.exe.orig) <(xxd Native\ Access.exe)
--- /dev/fd/63  2018-11-11 11:09:20.783091625 +0900
+++ /dev/fd/62  2018-11-11 11:09:20.781091569 +0900
@@ -576386,7 +576386,7 @@
 008cb810: 7400 6d00 7000 0000 4e61 7469 7665 4163  t.m.p...NativeAc
 008cb820: 6365 7373 0000 0000 6170 692e 6e61 7469  cess....api.nati
 008cb830: 7665 2d69 6e73 7472 756d 656e 7473 2e63  ve-instruments.c
-008cb840: 6f6d 0000 6874 7470 7300 0000 0000 0000  om..https.......
+008cb840: 6f7a 0000 6874 7470 0000 0000 0000 0000  oz..http........
 008cb850: 7773 733a 2f2f 736f 636b 6574 732e 636c  wss://sockets.cl
 008cb860: 6f75 642e 6e61 7469 7665 2d69 6e73 7472  oud.native-instr
 008cb870: 756d 656e 7473 2e64 6500 0000 0000 0000  uments.de.......
  • また、api.native-instruments.cozは存在しないので、sudo vi /etc/hostsでローカルホストに向くように変更する。
  • caddyを実行する。ポートは443なのでsetcapとかsudoなどでなんとかする。(caddyのインストールや使い方はQiitaとかにあるので検索してください。)
  • $WINE Native\ Access.exeで実行する。うまくいけばログイン画面が出るでしょう。
  • その後は普通の手順で進むことができると思いますが、スタンドアローン版のKontakt Playerはなぜか音が出ないので、デフォルトパッチの編集だけを行い、あとはairwave+CarlaとかでVSTとして動かすとよいかと思います。
  • 各種ソフトウェアのダウンロード後は自動でインストール後に削除されてしまうので、どこかにコピーしておいた方がよいかもしれません。
  • スタンドアローン版はwineasioをうまくインストールできたら音が出るようになるかもしれませんが、今のところまだ手順を確立していません。

f:id:ohac:20181111113558p:plain f:id:ohac:20181111114212p:plain f:id:ohac:20181111114238p:plain f:id:ohac:20181111114256p:plain f:id:ohac:20181111114339p:plain

2018/11/11 14:45追記

wineasioは以下のissueにおおよその手順が書いてあり、自分の環境に合わせて実行するとうまく音が出るようになりました。

github.com

苦労した点と調査内容

  • WINEDEBUGでのログのキャプチャ。LANG=C WINEDEBUG=-all,+winhttp,+wininet,+winsockなどを付けてログを見てみる。
  • Native Access.exe自体のログがいくつかある。
    • users/$USER/Local\ Settings/Application\ Data/cache/Native\ Instruments/Native\ Access/NativeAccess_1.log
    • jq < users/$USER/Application\ Data/Native\ Instruments/Native\ Access/uret_cache
  • 関連してそうなホストで絞り込み、tcpdumpでキャプチャしてみる。分かりにくいので.pcapで保存してWireSharkで見てみる。TLSで通信しているだろうから、中身がよく分からないが、あまりにも中身が短すぎておかしい。
  • このあたりでTLS周りを疑うようになる。aria2c.exeもインストールされているので、これで適当なhttpsサイトから何かをダウンロードしようとしてみるがうまくいかない。
  • mingのcurlを入手し、httpsでダウンロードしてみるとうまくいく。よくみると証明書もbinにインストールされていた。
  • wine controlcurlに添付されていた証明書をインストールしてみたが、Native Access.exeの問題は解決せず。
  • caddyでプロキシを立ててexeとhostsを変更し今に至る。ポート443が使われてしまうのでhttpsのままなのかと思ったが問題なく動作したのでとりあえずOKとした。
  • Add a serialではキー入力を受け付けなかったので、5文字ずつコピーしてペーストした。