2月の活動記録

早くも冬が終わりそうで、基本的に冬型人間のわたしとしてはこのままずっと冬が続いてほしいし皆さんには永遠に春が来ないでほしいと思っているのですが、いかがお過ごしでしょうか。(時候の挨拶)

というわけで2月の活動記録です。

目次

Music Tech Meetup #1

まず2/6に無事開催できたMusic Tech Meetup #1。今さら書くのはかなり遅いのですが、参加してくださった皆さん、その他関係者の皆さんありがとうございました。今月は後半になって勉強会やカンファレンスの類が全滅に近い状態ですが、こちらは結果的にはだいぶギリギリのタイミングで開催できた感じになりました。これもひとえに日頃の行い…! (今ほとんどのイベント運営者を敵に回した気がする)

初開催だったこともあって、公開前には「10人くらいになるかもしれないし50人埋まるかもしれないけど、どんな人数でも対応できるようにしておこう…」くらいの気持ちで開催したのですが、翌日にはwaitlistになってしまうくらいの申込みをいただいてテンションが上がりました。

当日のついったらんどの様子はtogetterでまとめておきました。

togetter.com

また、最初のADC2019振り返りセッションについては動画を公開しました。動画上げる前に一応チェックしなきゃな…となって後回しにしてしまって、いざチェックしてみたら音量とかがイマイチで加工を繰り返すことに…

www.youtube.com

また微分音セッションについては、時間制約のないかたちで再演されている動画が公開されているので、こちらを見てください。これはお二人にセッションをお願いして大正解だったと思っています(自画自賛

www.youtube.com

以下KPT

50人規模の勉強会を自分たちで回すのは初めてだったので、わからないことがそれなりにあったりしました。今回は特に他のスピーカーを探してきてお願いするというタスクがあり、イベント全体の時間と帳尻を合わせたり、内容のバランスをどうするかで悩んだりしました。LTで本編に足りなかった成分がある程度補給できたこともあって、結果的にはとてもバランスがとれて良かったと思っています。可能なら次回もバランスよくいきたいです。

タイムキープ。3セッションにしたので余裕があるつもりだったのですが、逆に全体的にざっくりやっても大丈夫だろうと慢心した結果、あろうことか自分たちのセッション時間が伸びて余裕がなくなるという恥ずかしい事態になっていまい、大いに反省しています…(他の登壇者の皆さんにはご迷惑をおかけしました) 今度平日夜に開催するなら、30分トークx3、5分LTx3、30分くらい懇親会、くらいの流れにしたいと思います。

予算も無い草の根勉強会なので、フードはセルフで…!という方式にしましたが、実際には用意していった15人分くらいのお菓子が切れた時点で終わったようでした。まあこれはやむなし…とはいえお菓子ならまあそんなに高くつかなさそうなので次回もこうするかもしれません。ピザとか注文すると1人3000円とかになっちゃうので、当日なんとかするのもやめました。一方で飲み物はソフトドリンクをArt Teknikaさんにご提供いただけたので大変助かりました。

当日までwaitlistがほとんど解消せず、何件か「自分は参加できそうか?」と訊かれたのですが、当日キャンセルの見込みが全くわからず、会場キャパとしても50人はギリギリという認識だったので(多分合ってる)、無理そう…ゴメンナサイ…という感じで応対していました。結局15人を超える事前処理なしの無断キャンセルがあって、入ろうと思えば全員入れた計算になります。さすがに無断キャンセルを無条件でスルーするのは、入れなかった皆さんには心象が悪いと思うので、無断キャンセル勢の皆さんは次回申し込んでもwaitlistが出来たら直前にこちらからキャンセル処理する処置をとる予定です*1。このサンクションの設計は他の勉強会でも有効な措置なんじゃないかなと思うので公開で書いておきます。

次回も開催したいと思っていますが(セッションをお願いしたい人リストはけっこう溜まっているので…!)、数カ月は先とするつもりです。もともとそのつもりだったのですが、COVID19の流行もあって、今後数カ月はイベントの企画が厳しくなりそうだと思っています。今度は土日祝に半日開催としたいのですが、会場を貸してくださる会社でも外部の人への土日の会場貸出はやっていないことが多く、なかなか難しそう…(!?)

ADCセッションメモ

Music Tech Meetupのセッションに先駆けて、数多のセッション動画を眺めていた時に、ある程度メモ書きを残しておいて公開したほうが有益そうだなと思ったので、見ながらちょいちょいまとめていました。まとめたものはとりあえず demo.codimd.org に公開しています(名前もdemoだしいつまであるのかわからないサービスなので、いずれどこかに移転するかもしれません)。まとめきれなかったものもいくつかあるので、ちょいちょい追加するかもしれません。

勉強会参加/LT発表未遂

今月は自分としては珍しく小咄のネタがいくつかあったので、後半にWebAssembly Nightやshibuya.apkでLT登壇するつもりで登録していたのですが、全てイベント自体がキャンセルとなってしまいました。さらにDroidKaigiの中止と技術書典の中止が重なって、今月は完全に自宅警備員モードということになってしまいました(あれ…平常運転では…)。今回は技術書典もほとんど手伝っていなかったのですが、仕掛かりの作業を停止して積みゲーの消化に勤しんでいました(!?)

現時点ではだいぶ知見が広まったと思いますが、この種の大規模なイベントは安易にキャンセルできるものではなく、実施しても中止しても大損害が生じるので、個人的には税金で運営でもしているんでない限りは中止であれ開催であれ支持する立場です。M3は何とか開催されそうなので、楽しみにしています。本来だったらまさかの技術書典8とかぶって参加できないはずだったので…(!)

もしイベント運営者の事情をきちんと知りたいという人がいたら、DroidKaigiについて運営メンバーの人たちがかなり詳しく語っている動画が公開されているので、見てみると良いでしょう。

www.youtube.com

発表するつもりだったネタは主にjuce_emscriptenまわりやAndroid NDKまわりだったのですが、まあ鮮度が落ちるというほどのこともないので、いずれ内容を最新情報に改めて喋ろうと思っています。

juce_emscriptenでオーディオプラグインをWebAssemblyで動かす

今月はちょいちょいjuce_emscriptenに手を加えて、まずJUCEで一番よく使われているであろうAudio Plug-inのプロジェクトのStandaloneアプリケーションをjuce_emscriptenでも動かせるように手を加えました。最新のmasterに取り込まれています。

これまでは実質的に "GUI Application" しかビルドできなかったので、ごく一部のアプリケーションだけがwasm化できただけのように見えましたが、オーディオプラグインのプロジェクトはgithub等に少なからずあるので、これまでに比べるとだいぶ気軽に楽しめるというか実験の成果が出やすくなったと思います。とりあえず成果をいろいろtwitterに上げていたので引っ張り出しておきます。

RtMidiとjuce_emscriptenにWeb MIDI APIサポートを追加

juce_emscriptenではMIDIサポートが実装されていません。なので、MIDI入力を前提としたオーディオプラグインのStandaloneプロジェクトでは、実行できたとしても音を出す手立てがありません。EmscriptenならWeb MIDI APIを使うことも出来るはずだし、実装はそんなに難しくはないのではないかと思っていました。(まあEmscriptenを使ったことは例によって数日しか無いのですが)

C++クロスプラットフォームMIDIをサポートするのによく使われるのはportmidiやRtMidiですが、これらにもWeb MIDI APIサポートはありません。どうせならいったんRtMidiでWeb MIDI APIをサポートするようにして、それをもとにjuce_emscriptenでWeb MIDI APIサポートを実装するようにすれば、今後のメンテナンスは半分くらいはRtMidiコミュニティに投げられるのではないか(!?)と思って、RtMidi経由で実装しています。

RtMidi単体でemscriptenを活用して動かせるMIDIアプリケーションは何一つ知らないので、juce_emscriptenはいいネタになったと思います。

最終的には繋がるようになったので、仮想ポートを自動生成するxmmkからjuce_emscriptenで動くオーディオプラグインのstandaloneアプリにMIDI入力メッセージを送りつけて、(臨むなら)それをローカルで起動しているfluidsynthにMIDI出力メッセージとして送る、なんてこともできます。(画像は入力のみ)

JUCEオーディオプラグインAndroid上でプラグインとして動かす

1月までの時点でJUCEアプリケーションで自分のAndroidプラグインフレームワークをサポート出来るようになっていたので、今月は逆にJUCEを使ったオーディオプラグインを自分のフレームワークで動作するプラグインとしてビルド出来る仕組みを構築していました。そもそもJUCEはAndroid用にAudio Plug-inプロジェクトをサポートしてこなかったので、そこから手さぐりでJUCE本体には手を入れずにサポートを追加する方法を模索しました。この辺の話は、実装が出来た段階で先日のエントリーでまとめてあります。

JUCEオーディオプラグインプロジェクトはいろいろあるのですが、Androidでも動作する比較的簡単なものとして、とりあえずandesSARAHを移植してあります。関連して、他にもADLplugなどいくつかのオーディオプラグインAndroidで動かしています(自作フレームワーク統合はまだ)。

この辺は、先のjuce_emscriptenのサポートと合わせて、自分のforkとしてビルドすることが多くなりそうなので、いずれWebサイトを作ってまとめておこうと思います。特にwasmビルドはWeb上にデプロイできるわけですし。

emscriptenはさておき、Androidで自前のプラグインフレームワークでJUCEプラグインが動くようになると、こういうことが出来るようになります。

今回はどちらもJUCEプロジェクト、別々のAndroidアプリケーションインスタンスです(まあ先月もLV2プラグインを動かしていたわけで、それも別々のアプリケーションインスタンスですが)。

What's next?

次は…いよいよtracktion_engineあたりを動かしますかね。tracktion_engineが動いたら自作MML環境で作った音楽がAndroid上で再生できる用になる日も近い…?

それと別に、UI統合についてそろそろ真面目に検討しようと思っています。ホスト部分はtracktion_engineが動けばコンセプトとしては十分に目的を達成できていると思うので、足りない部分を継ぎ足していきたいですね。

*1:再申込拒否まではしない