昨今は世界中で新型コロナウイルス感染症ことCOVID-19による暗い話題が継続しています。
そんな中、電子楽器業界ではアメリカのMOOG*1、日本のKORG*2、ドイツのNative Instruments*3、フランスのArturia*4といった各国の企業が期間限定で一部の自社製品を無料公開しています。何故電子楽器メーカーが?と思うかもしれませんが、例えばKORGのニュースリリースより引用すると、多様な場面で自粛が求められる環境下で「音楽的な方法で人々の心に楽しみを与える」ことを目的としていることが解ります。他社も同じような理由です。
世界中で学校、職場、イベントなどが休止、自粛が要請されている状況下で多数の人々が自宅での活動を余儀なくされています。何か音楽的な方法で人々の心に楽しみを与えることができないかと思い、コルグは iOSアプリ iKaossilator for iOS を3月31日まで、 Androidアプリ Kaossilator for Android を3月20日まで無料とすることにいたしました。
医療・医薬・衛生関連産業でもなければ、直接的にCOVID-19との戦いに貢献するのは難しい*5でしょうけれど、電子楽器業界のように間接的に貢献することはできるわけです。
自分も何かできないかと考え、シンセサイザーを作ろう。と思ったので作ってみました。
※COVID-19の情報を探しているうちに、このページにたどり着いてしまった方には申し訳ありませんが、本投稿はCOVID-19関連のデータを取り扱っていますが、全く医療目的ではありません。
着想
日々、各国や各自治体のCOVID-19の患者数(症例数)が報じられています。中国のように封じ込めに成功した(ように思われている)地域もあれば、イタリアをはじめとするおもにヨーロッパ各国のように指数関数的に増えている地域もあります。そして、東京も患者数の大幅な増加が報じられ、外出自粛が要請されるに至っています。
東京と言えば、以下のサイトで複数のデータが公開・可視化されていることが有名です。
都内の最新感染動向 | 東京都 新型コロナウイルス感染症対策サイト
このグラフの元データは東京都福祉保健局の以下のページでオープンデータとしてCC BY 4.0で公開されています。そして、CSVフォーマットですので、ソフトウェアで簡単に取り扱えます*6。
東京都 新型コロナウイルス陽性患者発表詳細 - データセット - 東京都オープンデータカタログサイト
というわけで、このデータを転用してシンセサイザーを作ってみることにします。需要があるかは不明ですが、当ページに掲載しているオーディオファイルもCC BY 4.0として公開します。
基本的な考え方
日本感染症学会によればCOVID-19の潜伏期間は1~14日で平均5.8日だそうです。
新型コロナウイルス感染症(COVID-19 infection)|症状からアプローチするインバウンド感染症への対応~東京2020大会にむけて~ - 感染症クイック・リファレンス|日本感染症学会
そこで、5.8日以上で切りのいい数字として1週間(7日間)毎に可聴化することにしてみます。
まず、以下のようなデータを先述の東京都福祉保健局のオープンデータを集計して用意します。
日 | 新規患者数 |
---|---|
N | a |
N+1 | b |
N+2 | c |
N+3 | d |
N+4 | e |
N+5 | f |
N+6 | g |
そして、加算合成方式のシンセサイザー*7のパラメータとしてこのデータを転用します。
加算合成方式とはオルガンのドローバーと同様の考え方で、複数の周波数の音を合成して、最終的な出音を得ます。
ここでは、基準となる周波数の整数倍音の成分の強さに、前述の日別の新規患者数(a~g)を転用することにします。
例えば、A=440Hz(ドレミファソラシドのラの音)の音を作るとして、以下のようになります。
周波数 | 音の強さ |
---|---|
440Hz | a |
880Hz | b |
1320Hz | c |
1760Hz | d |
2200Hz | e |
2640Hz | f |
3080Hz | g |
すなわち、新規患者数が減っていれば、高次倍音成分が減って基音に近い成分がメインの丸い感じの音になるイメージです。
蛇足ながら、普通の楽器音の倍音成分は、基音(この例では440Hzの音)より強くありません。すなわち、a > b, a > c, a > d, a > e, a > f, a > gです。が、現在は新規患者数が増加傾向にあるため、a < b < c < d < e < f < gのようなデータが殆どとなってしまいますので、各周波数成分の音の強さのマッピングを下表のように逆順にした方が自然な音になりそうなことが予想できます。
周波数 | 音の強さ |
---|---|
440Hz | g |
880Hz | f |
1320Hz | e |
1760Hz | d |
2200Hz | c |
2640Hz | b |
3080Hz | a |
実装
残念ながら私はVSTiのようなものを作るスキルは持ち合わせていないので、CLIでWAVEファイルを出力するプログラムを作ります。
- 事前にSQLite3のDBにCSVをロードしておく
- 日別に患者数をサマリしておく
- Cで実装したプログラム(シンセサイザー)がSQLite3のDBにクエリ発行し、N日~N+6日の新規患者数を各倍音成分の強さとして波形合成し正規化してWAVEファイル出力
- N日の指定はコマンドライン引数から取得する
- シェルスクリプトで複数日分のパラメータを与えてシンセサイザープログラムを起動し、複数日の波形を自動生成する
といった感じで、作ってみました*8。
例えば、3月12日(からの1週間)のデータで合成された音は以下になります。
発展
上に掲載したように、生成された音は何秒経っても変化しません(倍音成分が同じ)ので、聞いても特に面白くありません(多くはオルガンっぽい音)。
そこで、複数日の出力を高速に繋ぎ合わせれば倍音成分が経時的に変化(実際は患者数の変化)するため、シンセサイザーらしい音になるのではと考えました*9。
で、単純にN日の波形の末尾にN+1日の波形を足して、さらにN+2日の波形を足しての繰り返しを行ってみたところ、日の切り替わりタイミングでクリックノイズ(プチプチ音)が発生して使い物になりませんでした。考えてみれば、出力した各日のWAVEファイル末尾は必ずしも0クロスポイントではないので、そりゃそうだと。
これを解消するためには、単純に末尾に波形を付け足すのではなく、各波形をクロスフェードさせればクリックノイズは出ないはずだと考え、クロスフェード時間を変えつつ試行してみたところいい感じになりました。KORG WAVESTATIONっぽいというか、Waldorf THE WAVE*10っぽい雰囲気しませんか?3/1~3/21(からの1週間)のデータを転用して生成した波形をクロスフェードさせつつ並べたものが以下になります。
このWAVE SEQUENCE的な音はどこを切り取ってもAの音ですから、切り刻むなり、スタートポイントを変更するなりすれば、多様な音色を作れます。そしてサンプラーに放り込めば音階を付けて演奏することができますし、サンプラーのEGでAmpやFilterに経時的変化を加えれば、一般のシンセサイザーと同様のことができます。すなわちオシレーターがちょっと特殊なシンセサイザーという認識で扱えます。というわけで、いくつか音色を作って、サクッとループを作ってみた例が以下になります。鳴っている音は全て今回生成した波形だけを利用したものです*11。
その他
東京都だけではなく、世界各国の状況が判る同様のデータソースを探してみたところ、EUのオープンデータがありました*12。
https://data.europa.eu/euodp/en/data/dataset/covid-19-coronavirus-data/resource/260bbbde-2316-40eb-aec3-7cd7bfc2f590
こちらのデータにも対応した改造を行い、東京都の場合と同様に波形生成できるようにしてみました。
任意の4カ国のWAVE SEQUENCE波形を使って、VECTOR SYNTHESIS*13と同じ考え方で出力波形を変化させるとさらに複雑な音が作れるであろうと思っていますが、時間のある時に試してみたいと思います。
また、今回は単に整数倍音として合成しましたが、偶数倍音だけ或いは奇数倍音だけで合成すればまた違ったキャラクターの音が作れます。今後の改造案として後に試してみたいと思います。
文末になりますが、医療関係者やその支援者など、COVID-19の最前線や現場で対処してくださっている方々には頭が上がりません。
幸い自分や家族は現時点では健康だと思っていますが、今後の推移は誰にも判りません。自分が感染するリスクを冒さないのは当然ですが、他者を感染させてしまうリスクのある行動も取らないよう、行政機関の指示には従いましょう。
COVID-19の終息を心より願っています。
以上。
*1:Minimoog Model D Synthesizer Appを無料公開
*2:iKaossilator for iOS, Kaossilator for Androidを無料公開
*3:Analog Dreamsを無料提供
*4:Arturia iSparkを無料公開
*5:PCさえあれば、Folding@HomeでコンピューティングリソースをCOVID-19の研究に提供することはできます。Folding@homeでCOVID-19対策を支援する - 記憶は人なり
*6:WHOも各国のデータを公表していますが、PDFでしか見当たらず、データの再利用が難しい。
*7:この方式のハードウェアとしてはKAWAI K5000シリーズを最後に途絶えてしまいました… FM音源の各オペレータを並列に並べただけのアルゴリズムでも同じことができますが、YAMAHA V50やDX21では4OP、DX7でも6OP、DX9でも8OPしかないのに対し、K5000は64倍音まで作れるのが凄かったのですが、安くなったら買おうと思ってる間に市場から消えてしまいました。
*8:パラメータのバリデーションや閾値チェック等を実装していないコードなので、ここでは公開しません。
*9:KORG WAVESTATIONのWAVE SEQUENCEと同様の考え方ですね。
*10:こちらではWAVE TABLEという名称ですが、WSのWAVE SEQUENCEと類似の機能です。
*12:EU域外の世界各国のデータも含まれていますが、データソースやデータの網羅性は説明が見当たらないためよく解りません。
*13:ハードウェアとしてはKORG WAVESTATIONやYAMAHA TG33やSCI PROPHET VSで採用されているジョイスティックで各波形の混ぜ合わせ比率を変えられるシステム。最近のソフトウェアではKORG GadgetのKIEVにもX-Yパッドとして搭載されてますね。