Xmas Contest 2017 A 問題 Compressor 解説

Xmas Contest 2017 の A 問題「Compressor」の解説です。

問題概要

15 個の(数秒程度の)楽曲データについて、コンプレッサーを適用したものとしていないものの組(計 30 個の wav ファイル)が与えられる。15 個の楽曲それぞれについて、どちらがコンプレッサーの適用された音源かを当てよ。

コンプレッサーについて

問題文中にもあるように、コンプレッサーは「使いこなすのが難しいエフェクター」の代表格とも言える存在です。本問題の入力を聴いてもわかるように、適用したからといって音が劇的に変化するようなエフェクターではありません(もちろんコンプの種類やパラメタ設定によって劇的な変化を持たせることも可能ですが)。

難しいエフェクターということもあり、「コンプレッサー DTM」など適当に検索するとコンプレッサーの作用や使い方について解説しているウェブページがたくさん出てきます。今回の問題を解くにあたっては特に難しい使い方というよりも、コンプレッサーとはそもそも何をするエフェクターなのかという基本のところだけ分かれば十分です。

コンプレッサーは名前の通り「音量の大きすぎる部分を(なめらかに)抑える」効果を持ちます。要は音を小さくするエフェクター乱暴)なのですが、コンプレッサーを使う目的はむしろ「音を前に出したい」「存在感を出したい」という方向性であることが多いです。元々大きい部分を先に潰しておき、そのあとで全体を持ち上げることで、全体的にはよく聴こえる=存在感が大きくなるようにするという使い方です。

下に示すのは Waves 社の C1 というコンプレッサーの画面です。真ん中に出ているグラフが音量圧縮の形を表しています(横軸が入力で縦軸が応答)。大きい音を潰すという動作なので、基本的にこのような形のグラフになります。(今回のデータを作るのに使ったコンプレッサーは C1 ではないのですが、見た目がわかりやすいのでここでは C1 の画面を例にします)

f:id:JAPLJ:20171225174217p:plain

このグラフをよく見ると、音量の小さいところはむしろ音量が上がっていることが読み取れると思います。これはコンプレッションによって下がったぶんのレベルを持ち上げるという機能がすでにこのコンプレッサーに含まれているためです (このコンプでは Makeup というパラメタで持ち上げを指定します)。C1 にかぎらず、コンプレッサーには元から下がったぶんのレベルを持ち上げる機能が含まれていることが多いです。

今回、問題文中で「同じ音に対して音量が著しく変化しないように」コンプレッサーをかけるという表現をしましたが、これはコンプレッションによって音を潰したあと、全体の音量が同じくらいになるまで全体を持ち上げて調整するというかけかたをするという意味です(「音量」にも色々あるのですが今回は RMS を揃えました)。

解説

解法1

耳で判断する。はいプロ。

解法2

コンプレッサーは「大きい部分を抑える」のですが、今回はその後で全体を持ち上げていますので、行われた操作としては「極端に大きい部分を抑えるかわりに、その他の部分を持ち上げる」となります。

すると、「抑えられた部分」と「持ち上げられた部分」のどちらが多いかが問題です。大抵の楽器は(特に打楽器では顕著ですが)鳴らした瞬間に急激に音が大きく出て、その後は比較的小さい音になります。なので、「抑えられた部分」はほかと比べてかなり少ないと考えられます。

つまり、波形の変化としては「ごく一部の音量が大きい部分」が抑えられたかわりに「その他大勢の音量が小さい部分」が持ち上げられることになります。実際にサンプル入力 (sample_mono_(dry|comp).wav) のサンプル値の分布を見てみるとかなり分かりやすいです。

f:id:JAPLJ:20171225175541p:plain

もともとサンプル値が 0 付近に集中しているのが、(コンプレッション後の)持ち上げによって外側に広がっているのが顕著です。この例は問題文中にあるように極端にコンプレッションをかけているので明らかですが、実際の入力ではもっと微妙な変化です。それでも、同じような変化を認めることができます。

f:id:JAPLJ:20171225175954p:plain

01_A と 01_B に対しても同様に分布を見てみましょう。画像ではかなり見づらいですが、01_A (紫) の方が 0 付近の山が低く、かわりに裾野 (絶対値 0.4〜0.5 あたり) では高くなっていることがわかります。

あとはこれを頑張って判定すればよいです。

サンプル値の絶対値をそれぞれ比較していって大きいものが多かった方とかそういう適当な判定法でも大体判別できます。この方法だと 04〜06 (EDM群)、特に 06 は少し微妙で誤判定があり得ます。他のケースだと結構大差になるのがここだと微差になっているので、この辺は答えを何通りか試してみることなどが必要になるかもしれません。

中心に集中している分布が裾野のほうに広がるという変化を判定するには、omeometo さんがやったように 4 次モーメントを使うとより確実でしょう。

解法3

耳にも分布にも頼らない手法もあるようです。コンテスト後の Twitter では、スペクトログラムを眺めて目で判断するといった解法も見られました。

入力データについて

16 個(入力とサンプル)とも私が作りました(大変でした)。

ongakusei.booth.pm

ところで 音楽性の違いにより結成しました という同人音楽サークルが存在して、その1作目の CD (https://ongakusei.tumblr.com/001) が BOOTH でダウンロード販売中だったりして(露骨な宣伝)、サンプルとして使ったピアノ曲がこの CD に収録されているんだって!? まずは是非クロスフェードデモをチェックだ!(露骨な宣伝)

本当の話をすると、15個のデータを頑張って作ったあとに、「アッ……サンプル用の音源もいるじゃん……」となってしまい、新たに1個作るのが面倒だったので既存の自作曲を持ってきました。

本番用の 15 個のデータはそれぞれ単一の音源を用いてテキトーに (それこそループ素材を重ねるだけとかで) 作りました。以下特に誰も得しない情報です: