7月の作業記録

ひさしぶりに半ば自分用メモであるところの作業記録を書くわけですが、ここ1ヶ月強の成果を振り返ると、びっくりするくらい何もない…! どうしてこうなった…?と冷静に振り返ってみると、(6月にも書いたのですが)自分のメイン開発マシンであったところのHP Spectre x360のキーボードとタッチパッドが使えなくなる故障がひどくて、先月修理から返ってきてから今度は4回目の修理に出しています。修理から返ってくると正常動作するのに、1週間かそこらでまたすぐ反応しなくなる…の繰り返しで、これが半年弱前からずっと続いているせいで生産性ガタ落ちだったわけですね。(最初の頃はFF7Rとかいろいろゲームで時間をつぶししていたのですが、さすがに飽きました…)

MSI Prestige 15に乗り換え

そんなわけで、さすがにこれ以上泥沼の状態でHP製品を使い続けるのは無理…ということで、否応なく新しいPC環境にしました。今はノートPCだけ持ってふらふら旅に出ながら作業する状況にもならないので、多少重くてもいいだろうと思ってMSIのゲーミング…とはいえなさそうな15.6インチノートPCです。

それでWindowsパーティションは極小化して(完全に消すとメインマシン引退した後でWindowsマシンにするときに入れ直しが面倒なので残します)、Ubuntu 20.04を入れて使っているのですが、今のところトラブルとは完全に無縁で、こんなに安定しているのか…となっています。ただ海外のフォーラムでは指紋認証が使えないみたいな報告もあったので、自分が使っていなくてハマっていないだけ、という可能性はあります。

HP Spectreで使っていたときはOSのアップグレードまわりでおかしくなっていたのか、jackdが使えなくなっていたのですが、MSI環境の方では問題なく動いています。この辺はLinux kernel 5.40.xあたりでいろいろ変更が加えられている部分で、ちょいちょいリグレッションが修正されたりしていたので(わたしもバグレポートしていたのでlaunchpadから「おれもおれも」みたいなコメントをちょいちょい受け取りました)、どうしても困ったらクリーンインストールすると解決する問題かもしれません。

せっかくニューマシンしかも重量級(?)のやつに乗り換えるというので、32GB RAMにしたので、Android Studio 4.2 Canaryのインスタンスが3つくらい立ち上がっても問題なく動作しています。これはMacでは生じない問題なのですが、LinuxではAndroid Studioインスタンスを複数起動できるので(クライアント/サービスの開発ではそのほうが嬉しい)、その分メモリ消費も大きくて困っていました。

一方でタッチスクリーンでなくなったのは、明らかにAndroid UIのテスト体験体験が悪化しているので、本当に改善したくなったらAirBarでも付けてみようかな…とか考えています。あとhome/endが無い(fn必須の)キーボードのレイアウトが完全に好みではないのもしんどいですね(これはHPがベストだと思っている)。とはいえPageUp/PageDownが独立しているだけ他の数多のベンダーよりはずっと良いです。あとバッテリーが弱くなって重量も1.3倍くらいになったのですが(これはHP Spectreが良すぎたという話もある)、冒頭にも書いたとおり持ち歩く機会も減っていますしね。次に買い換える頃にはコロナも収束していてほしいところです(フラグ…?)。

COSCUP 2020のセッション

8/2にリモートでやってきました。スライドはspeakerdeckにおいてあります。

speakerdeck.com

上記のようにメイン作業環境が破滅的な状況だったので、音楽作業用のMacでも最低限の開発ができるようにコードを整理しつつ、リモートセッションが可能になるように環境を構築したりしていました。blackholeでオーディオルーティングしたり、OBS Virtual Cameraをセットアップしたり…(ちょうどこれが可能になった頃に始めたのでラッキーでした)。

配信のやり方がわかってきたので、そのうちオンライン勉強会を開催しても良いかもしれないですね。

スライドの準備とマシントラブルへの対応のせいで、開発そのものはすっかり停滞してしまいました。(Macでできるのはせいぜい既存コードのメンテナンス程度だったので…)

「LV2オーディオプラグイン開発者ガイド」限定公開と査読のおねがい

6月くらいからちょいちょい作業を始めていたのですが、M3 2020秋とたぶん技術書典9に新刊を出すことにしました(技術書典9は参加未確定なので予定)。先日80ページくらいの初稿をすべて書き終えたところです。わたしは締切がなくても執筆作業を始められる人種なんだ…(!)

内容はLinuxデスクトップで普及している(と今なら言えそうな)Lv2オーディオプラグインに関する包括的な開発本です。開発本ですが、たぶん誰もがLV2の「使い方」のレベルで躓くと思うので、そこからケアしています。最新のオーディオプラグイン開発のトレンドなども言及しつつ(たとえばリアルタイムマルチスレッディングの話題とか)、公式のLV2 Bookよりは読み物っぽく書いているところがあります。あと公式のリファレンスは書いてる人も認めているくらい読みにくいので、この本くらいの粒度の解説本が有用だと思っています。

個人的には仕様書をじっくり眺めているうちに不備を見つけてLV2仕様にコントリビュートするというところまでは読んだので、一応それなりにきちんと掘り下げたと思っています(…!?)

これは毎回悩むところなのですが、今回もリポジトリを全部公開にするかどうかしばらく考えました。LV2は情報源が少ないので(情報源の多い原稿をかいたことがあっただろうか…?)、公開しておいたほうが世のためだという気持ちはあるのですが、今回はいちおう紙版を印刷して同人印刷所に生き延びてほしいという気持ちがあるので、昨年のシーケンサーエンジン本と同様、紙版が捌けて一定期間を経るまでは公開しない従来型のモデルで頒布することにしました。サンプル章のフリー公開などである程度公共に資することにしようと思います。

ただ、一方で事前に興味のある人に(もしいたら)読んでもらって何かおかしいことなどがあったら紙に刷る前に指摘をいただいたほうが生産的なので、今は期間限定で公開してあります。もし何かヘンだなと思うようなことがあったらぜひgithub issueで教えてください。9月には非公開に戻すと思いますが、参加いただいた方には引き続きアクセスしていただけるようにします。

https://github.com/atsushieno/lv2-developers-guide/github.com

ちなみにシーケンサーエンジン本はごくたまにTwitterとかに出すたびに数冊売れるので(宣伝だらけになると自分でもうざいのでかなり絞っています)、紙版はそのうちなくなると思います…なくなるといいなあ。

xamaritans.booth.pm

OPNplug(JUCE)とayumi(-lv2)のAndroid

7月にはJUCEが6.0になってLinux VST3も使えるようになったので、これはtracktion_engineもアップグレードすればホストもいける…!ということで去年作っていたaugeneをアップグレードしてVST3でJUCE音源をまたいじるようになりました。

それで、デスクトップで使えてAndroidにも移植できて自分でもそれなりに使えそうな音源ということで、とりあえずADLplugに含まれるOPNplugをAndroidプラグイン化しました(OPNなら自作音色のストックがいくつかあるのです)。ただ音色バンクのフォーマットがよくわからないものなので、MMLで書いていたようなのを直接書けるようにならんもんか…と思っていたらOPN2BankEditorというアプリで変換できることが分かったので、ちょっとだけ開発に協力したりしていました。

それから気づいたのですが、FM音源はOPNplugで再現できたとしても、OPNplugにはSSG音源に相当するものが存在しません。OPNが含まれていたYM-2203にはAY-3-8910というSSG音源が載っていたのですが、これを再現するプラグインが見当たらないのです(少なくともLinuxで動作できるようなものは)。

エミュレーターはいくつかあったので、とりあえず簡単そうなayumiというエミュレーターをベースにayumi-lv2というLV2プラグインを作ってみたのですが、SSG音源にどんな生パラメーターを与えればいいのかまだよくわかっていないのでちゃんとした音が出るかはまだ確認していません(音は出ますが)。サンプル作っておいてほしみ…! LV2プラグインの作りはsfizzなどを参考にしつつシンプルなMIDIトランスレーターにしたので、LV2プラグインのリファレンスコードとしても悪くないと思います…音が意図通りに出ていることさえわかれば(!)

自作LV2プラグインAndroid移植は死ぬほど簡単でした(LV2ヘッダファイルの参照だけ面倒ですが、これはaap-lv2の他のプロジェクトの使い回しで十分なので)。ホストとプラグインを別々にデバッグできるのも状況次第では便利です。HPマシンで開発していたときはjackd依存のホストが全滅でAndroidでしかデバッグできませんでしたし(!?)。

sfizzのAndroid assets対応(進行中)

最近手を出して泥沼化しているのがsfizzのsfzファイルをローカルファイルではなくassetからロードできるようにする変更なのですが、割としんどいやつで今も実のところホントに続けるのかどうかわからないレベルです。sfizz単体ならまだ何とかなるかもしれないのですが、libsndfileにも手を加えてassetをロードできるようにするとなると途端に煩雑になるので…(そもそもlibsndfileはaap-lv2ではビルドしないバイナリ参照だし)。

これに拘っているといつまでも先に進めないので、たぶんwebから落としたやつをローカルファイルでロードするようになると思います。ただこれもAndroid11からはかなりしんどいので、進むも戻るも地獄みたいな感じです。まあ何とかなると思いたい…(?)

8月の予定

8月は、当初の予定ではLV2本の執筆に費やされる予定だったのですが、だいたい終わってしまったので、M3に向けて創作環境を再整備しようと思います。いいかげんMMLコンパイラMIDI仮想キーボードを作り変えないと…。そんなわけでオーディオプラグインからは離れそうな気がします。まあそう言いながら今週もほとんどsfizzのコードをいじって時間が溶けていたりしますが…! ではまた来月(?)