聴こえない反戦メッセージを音楽に埋め込む

 ウクライナ侵攻に反発し、海外ではロシアの無線に対してジャミングを仕掛ける人もいるようです。例えば、ほぼ一日中ブザー音が聞こえるだけで目的不明のThe Buzzerとして知られるUVB-76もジャミングで妨害されているようです。
https://www.rtl-sdr.com/tag/russia/
 単純に同周波数帯に妨害電波を送出するだけではなく、スペクトルアナライザで見ると意味のある文字や図形でジャミングを行っている人もいるようです。
※少なくとも日本では妨害電波を発射することは電波法など国内法に抵触します。

 これにインスピレーションを得て、普通の音楽*1にメッセージを埋め込む方法を考案しました。
※この方法は電波とは無関係なので電波法にはもちろん抵触しませんが、他者の楽曲等を許諾を得ずに無断で加工すると著作権法に抵触する可能性があります。自分で創った音楽や動画の音声に合法的に使える手段です。
 

使用例

 これだけでは何を言っているのか解らない方が多いと思うので、まずは聴こえない反戦メッセージを埋め込んだ音楽そのものを載せます。
 適当に作った数小節のループ*2に"STOP WAR"のメッセージをエンベッドしたものが以下になります。

 

仕組み概要

 ヒトの可聴周波数帯域は概ね20~20kHz程度と言われています*3。対して音楽CDのサンプリング周波数は44.1kHzとなっていますが、これは染谷・シャノンの定理*4を根拠に決定されています。この定理は、サンプリング周波数の半分の周波数(ナイキスト周波数と言います)までの信号が再現できるというものです。つまり、サンプリング周波数が44.1kHzなら22.05Hzまでの信号を再現できるため、ヒトが聞こえる周波数の上限20kHzまでを十分に網羅できることになります。
 現在では音楽CDのサンプリング周波数を超える、48kHz、96kHz、192kHz等のサンプリング周波数や量子化ビット数(音楽CDは16bit)が24bitや32bitのオーディオをハイレゾオーディオと呼んで持てはやす動きがありますが、ヒトが耳で聴くうえでは基本的に意味ありません。より高い周波数成分の信号が再現できることは工学的には意味がありますが、最終的にヒトの耳に入力するのであれば聴こえないのですから。機器メーカなどはハイレゾは良いモノだと訴求してきますけど、聴覚或いは聴覚以外の感覚器で20kHz以上の音をヒトが知覚できるという医学的・臨床的かつ定量的な検証データが無ければ所詮はセールストークでしかないと考えるのが合理的でしょう*5
 そんな背景で、(ヒトが聴くうえでは)意味無いのに現代の多くの機器はハイレゾオーディオの再生に対応しています。それなら20kHz以上のヒトに聴こえない帯域にデータを埋め込めば有効活用できるのではないか。という観点から実験したものです。
 

詳細

 上記のSoundCloudにアップロードした音楽データについて説明すると、サンプリング周波数48kHz、量子化ビット数16で作成しています。この程度では現在では特にハイレゾとは呼ばないかもしれませんがほとんど全ての機器で再生できます。
 まず、以下のように可聴帯域外(この例では23k~24kHz)のスペクトログラムに"STOP WAR"と見えるような信号を合成するソフトウェアシンセサイザーを開発しました。

f:id:kachine:20220309073545p:plain
"STOP WAR" spectrogram in 23k-24kHz

 そして、DAWで作った既存の楽曲に張り付けただけのものです。作成したシンセサイザーはVSTiとかではなく、単純にWAVファイル出力する単体のCLIプログラムで、出力されたWAVファイルをDAWのオーディオトラックに貼り付けるだけでこのような結果になります(曲長に合わせて2回貼り付けたので、2回見えます)。

f:id:kachine:20220309074535p:plain
Two times of "STOP WAR" spectrogram mixed with regular music

 SoundCloudにアップロードした音を実際に聴いていただいた方の中にはダイナミクス感に違和感を覚える方もいるかも知れません。DAWで音楽制作をする方の多くがそうだと思いますが、通常の音楽制作時にはDAWのマスタートラックにコンプレッサやリミッタを掛けるかと思いますが、可聴帯域外の"STOP WAR"信号成分のために挙動が変わってしまうためです*6。この現象を避けるためには、DAWのオーディオトラックに可聴帯域外の"STOP WAR"信号を貼らずに、通常通り楽曲を作成しWAVファイル等に出力します。その後に、ffmpegSOXといった外部ツールで可聴帯域外の"STOP WAR"信号をミックスすれば、コンプレッサやリミッタなど、マスタートラックに適用するプラグインエフェクトの挙動に影響を与えずに同様なスペクトルを持つオーディオデータを生成することができます。
 

"STOP WAR"信号を生成するシンセサイザ

 出力ファイル名、サンプリング周波数、描画に使う帯域の周波数上限・下限、WAVファイルの長さ、文字間隔を指定すると当該条件で"STOP WAR"スペクトルを持つ信号を生成するように作りました。
 本当はスペクトルに出力するメッセージを"STOP WAR"固定ではなく任意の文字列を指定できるようにしたかったのですが、テキストから当該文字のビットマップを得る方法が直ぐには思いつかなかったので、"STOP WAR"しか出力できません(強引にソースコード内に"STOP WAR"に該当するビットマップデータを各文字8x8ドットで定義しています)。
 需要は少なそうですが、そのうちGithubに公開するかもしれません。
 

雑記

 スペクトログラムで見なければ判らないメッセージに何の意味があるかと問われると、通常は意味ありません。ですが、情報が規制されている環境下に情報を流すような目的では使えるかも知れません。
 同様の目的であればこんな回りくどいことをしなくても、ハイレゾを活用してもっとシンプルな方法も使えます。サンプリング周波数だけを元のオーディオデータのn倍にすることで、再生周波数もn倍になります。つまり、可聴帯域外にシフトさせることができます。結果としてヒトの耳には何も聞こえませんので情報規制を回避できる可能性があるかもしれません。ですが、再生時に1/n倍の再生速度にすることで、元のオーディオデータと同様に再生することができます。
 或いは可逆圧縮のデジタル音声データがやり取りできる環境なら、あらゆるバイナリデータをやり取りすることもできます。任意のバイナリデータをRAW PCMデータとして扱いWAVファイル化(そしてFLAC等で可逆圧縮することも可能)してしまえば、ただの雑音にしか聞こえませんので。

 早く平和が回復しますように。
 



以上。

*1:楽曲に限らず音声情報なら何でも。

*2:SoundCloudのWebプレイヤーのループ機能では綺麗にループできないのですが、ダウンロードしてギャップレス再生できる環境でループ再生すると綺麗にエンドレスにループできます。

*3:個人差がありますし、特に高い周波数は加齢により聴こえにくくなると言われています。

*4:あるいはサンプリング定理とも呼ばれます。

*5:一部の用途を除き私は基本的にはハイレゾオーディオに否定的ですが、本投稿はそれを主張する趣旨ではありません。

*6:つまり一般の音楽制作においても無暗矢鱈と考え無しにハイレゾ録音したソースをDAWでミックスすると、聴こえもしない帯域のせいでダイナミックレンジを消費され、信号レベルをトリガにして挙動が変わるコンプレッサやリミッタなどの挙動が意図しないものになり、最終的なミックスのダイナミクス感がおかしくなったりすることもあるのです。