2019年の仕事振り返り

仕事と言っても無職だけどな…!

2019年は、1年半前に始まった大無職時代をどのように生きるか、という問題に立ち向かった長い1年でした(こう書くと物は言いようっぽい)。音楽ソフトウェア開発者として、何もなかった頃の1年前と比べると、割といろいろ勉強できたと思います。

1-2月 音楽制作環境(特にDAW)に慣れる

3/2に幻想音楽祭という音楽同人イベントがあり、第1回っぽいし初参加するにはちょうど良さそうな規模だったので、一度まじめに音楽制作というやつに取り組んでみてもいいかな〜と気軽に応募したのが通っていたため、昨年末から今年の最初の2ヶ月はそのために費やされました。

今でもそうといえばそうなのですが、特段「創作したい」という意識があるわけではなくて、自分の作っているMMLコンパイラ中心の制作環境がどこまでプロダクションで使えるのか試しておきたかったですし、自分の実用に耐えるレベルになる、というところまでは作り込んでおきたい、そうでないとこのアプローチを推奨することはできない、と考えていました(います)。

また完成品を作るにはどこかの時点でDAWを使わないといけないはずなので、DAWの使い方もちゃんと覚えよう、というhigh意識で進めていました。使っているDAWはこの時点でTracktion Waveformだったわけですが*1、この使い方は実際だいぶ勉強できていい経験になったと思います。

それまでほぼ創作活動は行っていなかったので、さすがにフルタイム無職とはいえ2ヶ月で完成度の高い作品を作り上げるのは無理がある、とわかっていたので、まずは過去作品を掘り出して使える部分を使いまわしながら2,3曲でっち上げたミニアルバムを出して、あとは技術書典4の時に書いたMMLコンパイラの本を展示・公開してブースの体裁を整えよう、と思いました。

「昔作っていた」を使い回すために、昔書いたMMLを自分のコンパイラMML文法に書き直す作業から始めたのですが(MMLはツールごとに文法が全然違う、インド・ヨーロッパ語族の言語みたいなもんです)、さすがにコンパイラ自身についてバグフィックスなどすることはあまり無く*2、どちらかといえばビジュアルMIDIプレイヤーでのコンパイルから再生を自動化するワークフローや、仮想MIDIキーボードへのMMLサポート組み込みといった、周辺ツールの改造がだいぶ進みました。

MMLでの打ち込みにはRoland SC-8820を使っていたのですが、これをやりこんでも最終的なプロダクションには使えないだろう、Waveform上でVST/AUに置き換えて完成させる必要があるだろう、とは思っていました。JUCEで作られているWaveformはLinux環境でもほぼ問題なく動きますが、VSTプラグインはほぼ全滅でWaveform付属のCollectiveくらいしか無かったので、最終的にはMacを調達してKontaktなどに置き換えました。

WaveformのMIDIインポート機能には拍子とテンポまわりにバグがあって、変拍子だらけの曲を作っていた自分としては致命傷だったのですが、対応が難しそうだったので、データ形式XMLだったのをいいことに、WaveformのデータモデルのライブラリをC#作って自前でMIDIインポートも自作して乗り切りました。

これが割と良い経験になったのでした。それまでWaveformにどんな機能があってどんな内容のデータが楽曲データとして保存されているのか、そもそもオーディオプラグインにどんな機能があるものなのか、全然わかっていなかったんですね。モデルの情報は特に無くて、Waveformの楽曲データから全て推測で作成したのですが(まあいざとなればtracktion_engineはOSSで公開されていますし)、十分にいろいろな情報が含まれていたので、Waveformのデータモデルを扱う機能は概ね把握できたと思っています。

3-5月 オーディオプラグインまわりをいじり始める

幻想音楽祭のための創作活動が終わって一息ついたのですが、2月にAndroid QのAPIが初登場して、人手不足だったXamarin.Androidチームから新APIバインディングを作る仕事を請負でやってくれないかみたいな話を内々に相談されていたのでそれを片付けたり(結局2日でほぼ終わってしまったので無償で)、去年公式リポジトリに投げてアップデート対応が必要だったFluidsynthのAndroidサポートにOboe(低レイテンシーオーディオ)対応なども追加したりと、いろいろ雑務(?)をこなして過ごしていました。

その一方で、DAWを使った制作プロセスの反省も含めて、もう少しオーディオプラグインをこちら側に近づけて、最初の打ち込み過程からMMLで直接いじりたいと思うようになりました。最初から作り込まずにベタ打ちで続けてもやる気出ないですし、2回作り込むの二度手間ですし(しかも最初に作り込んだのが邪魔になる)。今使われているDAWは作り込むのに向いていないんですよね。

楽曲再生エンジンだけならtracktion_engineが使えるわけですが、再生部分などはどうなっているのか相変わらずブラックボックスだったので、まずオーディオプラグインがどんなものでどこまでできるのか、今度は開発者としての視点で、VST3とJUCEを中心にいろいろ機能を調べるようになりました(特にJUCEはAUにも対応しているので)。Waveformのデータモデルから、オーディオプラグインでどんなことが実現できるのかはある程度見えていたので、良い動機づけになりました。

ただVST3はJUCEでサポートされておらず、最低限ホストを動かすためのパッチまで作ったりしましたが、進展が見られず、自分で進めたところでROLIの開発者と作業がかぶって無駄になるし、これじゃ良くても次のADC2019の頃まで出なさそうだなと踏んで、LV2をいじり始めるようになりました。LV2をいじったところで楽器が出てくるわけではないのですが、調べものとしては悪くなかったと思います。この辺の成果はひとつ10月に同人誌として結実しました。

6-8月 無職を失う

この頃は無職の意識高いツイートに腐心していたのですが(ツイッターはやってません)、

からの…

特段隠すつもりはあんまりなくてリアルではペラペラしゃべっているのですが、音楽系ソフトウェアのベンチャーで手伝いを始めて、最初3か月くらいしたら公知にするか…という感じでした。7月に始めて3か月くらい実験的に契約の予定だったのですが、ひと月でもうフルタイム社員にしちゃえという流れになりました。「ちょっと早くないかな…こっちは事前通告でいつでも辞められるけど会社側はそうもいかないし、3か月くらい試せば…?」などと言っていたのですが、実際3ヶ月で無職に戻ることにしたので(主に「自分で作りたいやつ」を作れる時間が全然とれなかったため)、結局謎のままで終わったのでした。

仕事は主にJUCEを使ったデスクトップアプリの開発で、C++開発者が求められていたのですが、5年くらいのキャリアが求められているところにC++キャリア0年での入社でしたが(!)、C++自体がわからなくてハマったのは最初の数週間くらいで、後はまあ言語で困ることは特に無かったです。JUCEは概ねモダンC++の世界なので、言語的なつまづきポイントは少なかったと思います(そういうものか…?)。まあもともと.NET開発者だった時もP/Invokeしまくってたし…

会社自体は面白いものを開発していてこの方面ではニュースバリューもあると思うので、気が向いたら年始に何か書くと思います。辞めてからもまだ手伝ったりしているし(謎)

JUCEをがっつり触れたのは良かったし本家にパッチを書いて送れる程度には分かってきたので、今後も機会があるたびに使える部分を使っていこうと思っています。

9-10月 M3に追われる

M3に初めてサークル参加しました。本当はこの時までにもう1枚CDとして新作を作るつもりだったのですが、わたしの仕事を始めるムーブが本当に良くなくて、当選してから創作するための時間が全く取れず(好きな時に創作できることはもちろん無く)、結局5月頃に少し書き出していたDAWのエンジン部分に関するテキストに手を加えてシーケンサーエンジンを支える技術として同人誌頒布と春先の新譜(!)の2本でサークルとしての体裁を整えることになりました(MML本も見本としては置きました)。

次回は技術書典8と日程まるかぶりなのと、開発しておきたいものがあってそっちに注力していたら当日までに創作する時間をとれる気がしないのとあって、申し込んでいません。ただM3で何も出来なかったというダメージが大きく、それが仕事を辞めた大きな要因のひとつです。別にただのフルタイム労働であって長時間労働させられていたということは全然無いのですが、それで時間が取られすぎるということは労働すること自体が問題だったということでしょう。もちろんいずれ労働しないと食っていけなくなるわけですが、自由なうちは自由にします。

11月 ADC2019〜原点回帰

11月半ばまではフルタイムで仕事していたので特段なにもしていなかったのですが、下旬にADC2019に行ってきました。2018の時は、無職になってまだ3ヶ月くらいの新人の頃だったので、どんなカンファレンスなのかもあまりわかっていなかったのですが、今回はそれなりに勝手を知っていたこともあって、かなりエンジョイ勢でした。今年はオーディオプラグインまわりでいろいろ遊んでいたので、SteinbergのブースでVST3の話を質問したり、NIのブースでKontaktの質問したり、AppleのブースでAUの仕組みを教えてもらったり…といった感じでした。あとGoogleのオーディオチームと1on1で話せるというので、Androidで自分が作っているものを見せてじっくり相談してきました。ROLIの人ともLinuxサポートまわりの話ができたし、収穫はいろいろありました。ADCの話は来年何かしらの発表の場を設ける予定です。

12月になってもまだ実は仕事が続いていて、週2日だけ手伝っていたのですが、それもひと区切りついたので、最近ようやく5月頃の状態に戻って自分のソフトウェアの開発に本腰を入れられる状態です。11月下旬から12月はAndroid同人誌の原稿やらアドベント カレンダー用の調査執筆が多発して、あんまり進められなかったので、これからだ…!という気持ちで年末を迎えています。

2020年は…?

2020年をどう過ごすのか、自分でもまだわかっていません。今個人で作っているソフトウェア次第ですが、どこかしらに所属して開発するかもしれないし、そうでなければ自分で何とかするかもしれません。ある程度は自由な時間を確保したいので、他によほど面白いものでも無い限り、フルタイムで無関係な仕事をすることは無いと思います。まずは有職中にほとんど進展が無かったプロジェクト(こんな感じ)を進めるところからですね…

f:id:atsushieno:20191230004611p:plain

とりあえずはかなり柔軟に時間を使える予定で、自分のプロジェクトもフルタイムで進める必要があるわけではないので、適当に面白そうな仕事の話とかあったら相談してください〜

*1:ちなみにライセンスだけはFL StudioだのCubaseだのも無駄にいろいろ持っていたりして…

*2:ただlanguage serverまわりはvscode自体の更新に伴う問題が多く、創作上のメリットが皆無だったのでほぼ放棄することになりました