barbe_generatative_diaryでは、Sound Visualizationという名目にて、音を利用したジェネラティブ実験を行っています。Instagramにて定期的に投稿しています。

Index

イントロダクション

私たちが暮らす環境の多くには、周期的な波が潜んできます。音を始め、光や風、潮の満ち引きや打ち寄せる波、地震や星の動き、心臓の鼓動など、辺りを見渡すと周期的に繰り返す多くの事象を見つけることができます。

barbe_generataive_diaryでは、それらの中から古くから親しみのある「音」に焦点をあて、目には見えない音の成分を利用し、Sound visualization(音の視覚化)制作実験を行なっています。

音の視覚化は、すでに歴史的にも多くの研究が行われてきました。例えば、音声を記録する元となった蓄音機の構造も、音の視覚化実験から生まれたものと考えられています。

Sound Visualizationの歴史

クラドニ図形、音の万華鏡

クラドニ図形は、固定された板の上に砂を撒き、弓弦やスピーカーなどで物体に振動ないし共振をおこすことで、板上の砂が動き、音や個体に応じた様々な幾何学模様を見ることができます。

クラドニ図形は、1787年ドイツの物理学者エルンスト・クラドニにより物体の固有振動の節を利用した視覚化として発表されました。

原理は、固定された板(クラドニプレート)に粒子となる砂を撒き、プレートを振動させます。一定の振動を与えると、板は上下に振れる部分と振れない部分であるが出現し、その節の部分に砂が溜まり、図形が現れるという仕組みです。

音の波長によって現れる図形が異なり、個体(クラドニプレート)の状態によっても違った図形を見ることができます。

▶︎ クラドニ図形のアルゴリズムを使用し3D化したもの

関連記事/Chladni Figure Code|クラドニ図形・コード with Processing

フォノトグラフと蓄音機(フォノグラフ、グラモフォン)

今ではあまり見ることがなくなった蓄音機は、英語になるとフォノグラフやグラモフォンと呼ばれます。これらは歴史的背景として、19世紀ヨーロッパやアメリカなどにて開発が進められていました。

フォノグラフは1877年、トーマス・エジソンにより開発されました。円筒形の蝋管に縦振動を刻むことで音の録音再生を行います。

一方、グラモフォンは1885年エミール・ビルリナーにより開発されました。フォノグラフとは違い横振動を円盤に刻むことで録音再生を行い、現在使用されているレコードの原型となっています。

どちらも同じ録音と再生を目的としていますが、円筒より円盤の方が、使い勝手や量産といった利点から時代はグラモフォンを選択することとなります。

これらの蓄音機の起源は、もともとは音にフォーカスを当てた研究でなく、通信としての音の視覚化が主な研究だったと言われています。その背景には、19世紀中期から後期にかけ、ヨーロッパやアメリカにて同時多発的に行われた通信の研究、電気を利用する電信テレフォン(電話)があり、その流れから音を記録する方法としてこれら蓄音機の開発が進んだものと考えられています。

ここでは電信についての内容は省きますが、現在のインターネットの礎となり、情報社会の構築をヴィクトリア朝時代までさかのぼって読み解く面白い良書があります。
▶︎ ヴィクトリア朝時代のインターネット』

実は、フォノグラフやグラモフォンといった蓄音機が開発される以前に、蓄音機の元祖と言われる音の視覚化の研究がありました。トーマス・エジソンもエミール・ビルリナーも当時のこの研究に影響を受けたのではと言われています。

1857年フランス人技師 エドワール=レオン・スコット・ド・マルタンヴィルが制作したフォノトグラフです。

構造は、ススのついた紙筒やガラス板に、樽状の底面につけられた針で波形を描き記録していきます。ここでは、音を刻むというより音を描くように設計されています。しかし、当時の技術では記録された波形を機械的に読み取ることができず、残念ながら実用化に至ることはありませんでした。

その後、2008年にこの音の波形をコンピュータで解析することに成功、2009年には、再生スピードが明らかになり、マルタンヴィル本人の声と見られる音声を再生することに成功しました。そして、これが人類最古の録音と言われています。

Au clair de la lune
1860年4月9日の音声記録を正しい速度で再生したもの。男性がゆっくり歌っている。声の主はスコット・ド・マルタンヴィル本人と推測されている。Wikipedia

音について

音の正体

音の正体は空気の粗密波によって構成されています。空気が密集したところ粗いところが振動となり、先ほどのクラドニプレートのように、スピーカーからでる空気の粗密波によって共振し、上下に振れます。

サンプリング周波数とビット深度、ビットレート

周波は波のような形で表します。これ波形をコンピュータで使用する場合には、サンプリング周波数ビット深度という数値によって扱うことができます。

サンプリング周波数(サンプリングレート)とは、「1秒間に実行する標本化処理の回数」です。(サンプリングとは標本化という意)単位はHz(ヘルツ)で表します。

44.1kHzの場合、1秒間に44100回の標本化(サンプリング)を行います。(下記表)サンプリングレートが高いほど高音域まで表現することが可能になります。例えば、コウモリは人の耳に聞こえない超音波で自分の位置を確認します。コウモリはおおむね20kHz〜100kHzの周波数を出すと言われており、44.1kHで収録を試みたとしても、ほとんど録音することはできません。

高いサンプリングレートの中には96kHzや192kHzなどハイレゾと言われる周波数などありますが、人間の耳での可聴範囲は20Hz〜20kHzくらいまでとされているため、一般的なCD音源のサンプリングレートは44.1kHzとなっています。

ビット深度とは、サンプルあたりの情報量になります。ビット数が大きいほど、微細な音を捉え、歪みによるノイズを抑えた忠実な録音が可能になります。ビット深度は音の解像度は関係はありません。

ビット深度と関係のあるダイナミックスレンジと呼ばれる音声信号の識別可能幅、最小値と最大値の比率があります。例えば、一般的なCD音源のビット深度は16bitとされており、デジタルの2進法において、65,536段階に分割した値になります。この場合、ダイナミックスレンジとしてdB(音圧)に変換すると、0〜97.8dB(デシベル)までの幅で録音再生を行うことができます。dBは電圧や電力・音圧の物理量として利用される単位で、音の大きさと理解します。一般の人が日常で暮らす範囲の音は60dbくらいだと言われています。ちなみに騒音と言われるジェットエンジンは120dbくらいです。

現在オーディオレコーディングでは32bit float で録音することができます。floatとはプログラミングでもお馴染みですが、ここでも同様に浮動小数点まで含めた数、とてつもなく広いダイナミックレンジで録音することができます。この広いビット深度は録音時に非常に便利で役に立ちます。録音時、データ容量を抑えるためにダイナミックレンジが狭い設定での録音で録音した場合、許容を超える大きな音はクリッピング(切り取り)されます。逆に広いとデータ量が多くなるというデメリットはありますが、しっかりとしたクリップのない音を収録することができます。また、微細な音に対しても、ビット深度が低い(ダイナミックレンジが狭い)と小さな音をしっかりと捉えることができずエッジのたったノイズが発生します。

さらに、ビットレート(音声)は、1秒間の音のデータ量です。先ほどのサンプリング周波数とビット深度を掛け合わせた数値となります。単位は、1秒間のビット数、bps(Bit Per Second)を使います。これらすべての数値は多ければ多いほど良いわけではないので、使用に適したサイズで利用します。

フィールドレコーディングでは、使用目的にもよりますが、サンプリング周波数とビット深度(ビットレート)はできる限り高めにセットします。理由として、その後編集加工等を進めていく上での自由度を高めるためとしています。逆にマスタリングでは、使用目的に応じて設定を行います。

Sound Visualizationで使用する音源は、使用ツールの処理やビジュアライズの目的によって設定した音源を使用します。

コンピュータによる音の視覚化 – Processing

コンピュータにおける視覚化表現はアイデアによって様々です。音声データを解析することで得られた数値を利用して唯一無二のビジュアルを制作します。また、そこにジェネラティブな要素、数学、アルゴリズムなどを加えることで多種多様な表現を行うことができます。

コンピュータにおけるデジタルビジュアルツールはたくさんあり、その多くは音を扱うライブラリーが用意されています。また、ツールに頼ることなく別のアプローチによって視覚化を行なってみるのも面白いかもしれません。

Processing Sound library

ここでは、デジタルビジュアルの生成としてよく利用されるツールProcessingを例にSound Visualizeの簡単な解説を行なっていきます。

ProcessingにはSound libraryというSoundを扱うためのライブラリーがが用意されており、インポートすることで簡単に利用することができます。

音の解析から、音源の入出力と操作、エフェクト、ノイズ、エンベロープ、オシレーターが揃っています。

ここでは、事前に準備した音源データを利用し、SoundFile(サウンドファイル)の読み込みと再生、各Analysis(解析)の内容を簡単に解説します。そのほかについては、Processing Websiteまた、細かな内容についてはGithubにあるSound libraryを参考にしてください。
▶︎ Processing Sound library / src (Github)

SoundFile

準備した音源を利用する場合、音源であるデータ(wavやmp3)をスケッチ内にドラックandドロップします、するとsketchのフォルダ内にdataフォルダが生成されその中にファイルが自動で格納されます。(自身でdataフォルダを制作してその中に入れることもできます。)


import processing.sound.*;
SoundFile soundfile;

void setup(){
  soundfile = new SoundFile(this,"SoundFileSample.wav");
  soundfile.play();
  //soundfile.loop();
}

void draw(){
}

1行目のSoundライブラリをインポートします。

SoundFileクラスを利用して、音源を確保するインスタンスを生成、ここではsoundfileとしています。setup内にて、new SoundFile(this, “wavサウンドファイル”) で音源を読み込み、play()を使用し音を再生を行います。繰り返し再生をしたい場合は、Loop()に置き換えます。
※音源再生では何も記載なくてもdraw()は必要です。

SoundFileクラスにはそのほか、音量の調整や再生速度の設定などファイルを自由に扱える関数が用意されています。

音の解析(Analysis)には、AmplitudeBeatDetectorFFTWaveformがあります。下記のサンプルコードは、できるだけ簡素化にし、数値をコンソールに吐き出す仕様にしています。どのような数値を返すか確認しながら、それら数値を使い好きなビジュアルに加えてください。

Amplitude

Amplitudeはその名の通り、フレームレートでの音の振幅をfloat 0.0〜1.0の範囲で返します。振幅とは、簡潔にいうと音のエネルギーです。Amplitudeでは、フレームレート内の振幅の平均値を正数のfloat 0.0〜1.0の範囲で返しています。参考/RMS(二乗平均平方根)


import processing.sound.*;
SoundFile soundfile;
Amplitude amp;

void setup(){
  soundfile = new SoundFile(this,"SoundFileSample.wav");
  soundfile.play();
  amp = new Amplitude(this);
  amp.input(soundfile);
}

void draw(){
  println(amp.analyze());
}
  • input()
    入力音源を指定します。SoundFile以外にも外部からの入力、オシレーター、ノイズジェネレータを指定することができます。
  • analyze()
    アナライザーにて値を引き出し、0.0〜1.0までの浮動小数点を返します。

BeatDetector

BeatDetectorは、音楽のリズミカルなビートに関するオーディを信号の上がったところを検出し、booleanで返します。実装では、音の数値を得るのではなく、何かのトリガーとして利用します。

また、BeatDetectorは、テンポやBPMを返すものではなく、あくまでオーディオ内で瞬間的に信号が上がったところを検知します。


import processing.sound.*;
SoundFile soundfile;
BeatDetector beat;

void setup(){
  soundfile = new SoundFile(this,"SoundFileSample.wav");
  soundfile.play();
  
  beat = new BeatDetector(this);
  beat.input(soundfile);
  beat.sensitivity();
}

void draw(){
  if(beat.isBeat()){
    println("true");
  }else{
    println("false");}
 
}
  • input()
    入力音源を指定します。
  • sensitivity()
    検知感度を設定します。
  • isBeat()
    オーディオ信号を検知させます。結果はbooleanにてturu(真)・false(偽)にて返します。

FFT|Fast Fourier Transform

FFTとは高速フーリエ変換と呼びます。FFTは、離散フーリエ変換(DFT)を効率よく計算する方法です。細かな内容は省くとして、ある信号をいくつかの周波数成分に分解し、それらの大きさをspectrumとして数値を得ることができます。実際の用途として、機器の異常の検出、品質管理、振動観測などがあります。参考/FFT-Fast Fourier transform (wikipedia)


import processing.sound.*;
FFT fft;
int bands = 256;
void setup(){
  soundfile = new SoundFile(this,"SoundFileSample.wav");
  soundfile.play();

  fft = new FFT(this, bands);
  fft.input(soundfile);
}
void draw(){
  fft.analyze();
  for(int i=0; i < bands; i++){
  println(fft.spectrum[i]);
 }
}
  • input()
    入力音源を指定します。
  • analyze()
    現在の周波数スペクトルを計算し、周波数帯域と同じ数の要素を含む配列として返します。
  • spectrum
    周波数帯域を格納するための配列です。

Waveform

Waveformは波形アナライザーです。analyzeにて実行された瞬間のオーディオストリームの波形を返します。返す数値のレンジは-0.5〜0.5になります。


import processing.sound.*;
SoundFile soundfile;
Waveform waveform;
int samples = 100;
void setup(){
  soundfile = new SoundFile(this,"SoundFileSample.wav");
  soundfile.play();
  
  waveform = new Waveform(this, samples);
  waveform.input(soundfile);
}

void draw(){
  waveform.analyze();
  for(int i=0; i < bands; i++){
    println(waveform.data[i]);
  }
}
  • input
    入力音源を指定します。
  • analyze()
    現在のオーディオバッファの内容を取得します。
  • data
    指定のサンプル数で得られた値が格納された配列です。

Sound Visualization | barbe_generative_dairy

下記、Sound Visualizationの例として、フィールドレコーディングにて滝の音を収録のち、FFTにて分解した周波数成分を再度ビジュアル上で重ね合わせています。その後、デジタル上のアニメーションを切り取り、ペンプロッターにて描画を行いました。

音の視覚化とその後

一般的に私たちの感覚のほとんどは聴覚を頼りに暮らしているといっても過言ではありません。音という目には見えない多くの情報を視覚化することで、普段、聴き過ごされていた環境音の変化や新しい表現の扉を開くのではないかと考えています。

音の視覚化には、さまざまな表現方法があり、上記に述べた表現方法はそのひとつに過ぎません。デジタルでなくとも、先人の研究のような物理的表現方法に工夫を重ねることで新たな表現の創出につながります。また、今ある自身の表現に音を加えてみると新たな発見につながるかもしれません。

関連記事 ► フィールドレコーディング入門|導入篇〜レコーディングの手順やオススメ機材【初心者向け】

field-recording-beginner-01-00

barbe_generative_library

フィールド・レコーディング入門 響きのなかで世界と出会う – 柳沢 英輔

初心者にも分かりやすいようにフィールドレコーディングの魅力を解説しています。「フィールド・レコーディングとは何か?」「音とは?」「聴くこととは?」など、その他にも「歴史や理論」はもちろん、「実践的な機材の紹介・録音方法や環境の作り方」なども学べます。

実際、読むだけでなく、今すぐフィールドレコーディングに行きたいと思える本。カメラを旅行に持っていくように、ハンディレコーダーを持って出かけましょう。

ーーーーー
► 『フィールド・レコーディング入門 響きのなかで世界と出会う』(柳沢 英輔)
初版/ 2022.4.26
ページ数/302ページ
出版社/フィルムアート社
言語/日本語
ーーーーー