knagaiフィルタ一般的にフィルタとは、ろ紙を使ったろ過機を言いますが、「特定の周波数範囲を通過させたり阻止したりする装置や回路。Weblio辞書」)。これは、今の場合で言うと、音が鳴る前の周波数のある範囲をカットして、残った結果を鳴らすということです。主なフィルタには次のものがあります。周波数の低い成分を通す(ローをパスする)フィルタ。ローパスフィルタとハイパスフィルタを組み合わせたもの次のサウンドはSynth1で作った元の音です。大砲かカミナリの音のように聞こえます。http://himco.jp/wp-content/uploads/2020/01/moto.mp3これにローパスフィルタをかけた音です。高い音がカットされ、遠くで何かが爆発したような、こもった感じの音になっています。http://himco.jp/wp-content/uploads/2020/01/lowpass.mp3ハイパスフィルタをかけた音です。低い音がカットされ、かなり近い場所でカミナリが鳴ったような音に聞こえます。http://himco.jp/wp-content/uploads/2020/01/highpass.mp3フィルタにはカットオフ周波数とレゾナンスというパラメータがあります。カットオフ周波数これは、周波数のどの部分を境にしてカットするかを決める数値です。SPAN」で、上記のローパスフィルタ適用前の音と適用後のスペクトル周波数を表示し、その結果を重ねたものです。レゾナンスレゾナンスは、カットオフ周波数近辺の周波数を強調します。次の音を、http://himco.jp/wp-content/uploads/2020/01/resOrg.mp3Synth1で強いレゾナンスをかけると、次のように変化します。http://himco.jp/wp-content/uploads/2020/01/res.mp3次のコードは3つのフィルタをテストする例です。画面のクリックで再生がスタートし、使用するフィルタが画面に描画されます。下部のスライダを操作すると、フィルタに適用するカットオフ周波数が変更できます。}}ローパスフィルタp5.LowPassフィルタをp5.SoundFileに適用し、FFTを使ってサウンドを視覚化します。mouseXをフィルタのカットオフ周波数に、mouseYをフィルタのレゾナンスにマッピングします。}}画面のクリックで曲の再生と一時停止が切り替わります。曲は1分40秒ほどあります。MiyuTakeuchi」の一部です。解説フィルタの組み込みで少し分かりづらいのが、p5.SoundFileオブジェクトのdisconnect()とconnect(filter)の呼び出しです。soundFileをフィルタに接続するsoundFile.connect(filter);p5.SoundFileオブジェクトもp5.LowPassオブジェクトも作成時、自動的にスピーカーに接続します。ローパスのフィルタ効果を再生音に反映させるには、p5.SoundFileオブジェクトの出力先をスピーカーからフィルタに変える必要があります。そのためにここでは、p5.SoundFileオブジェクトのdiscconect()を呼び出してスピーカーへの接続を解除して、その後connect(filter)を呼び出して接続先をフィルタに設定しています。リファレンスメモp5.Effect説明Effectはp5のオーディオエフェクトの基本クラス。このモジュールは、現在とその後のエフェクトに有用なノードとメソッドを処理する。このクラスは、p5.Distortion、p5.Compressor、p5.Delay、p5.Filter、p5.Reverbによって拡張される。Filterを使って、入力ソースの周波数特性をフィルタ処理する。サブクラスには次のクラスがある。カットオフ周波数より低い周波数を通過させ、カットオフ周波数より高い周波数を減衰させる。ローパスフィルタの逆。特定範囲の周波数を通過させ、その周波数範囲の上下の周波数を減衰させる。.res()メソッドは、バンドパスの帯域か、ローパス/ハイパスのカットオフ周波数のレゾナンスを制御する。このクラスはp5.Effectを拡張する。amp()、chain()、drywet()、connect()、disconnect()メソッドが使用できる。(オプション)メソッドset()フィルタの周波数とレゾナンスを設定する。この出来事を今から何秒後に起こすか(オプション)—p5.SoundFileオブジェクトのメソッド—connect()説明p5soundオブジェクトの出力を、別のp5.soundオブジェクトの入力に接続する。p5.SoundFileをFFTやEffectに接続できます。パラメータが与えられない場合は、マスター出力に接続する。ほとんどのp5soundオブジェクトは、作成されたときに、マスター出力に接続する。入力を受け取るオーディオオブジェクト(オプション)disconnect()説明このp5soundオブジェクトの出力の接続を解除する。.ディレイディレイは、1度鳴らした音を、音量を少し下げ遅らせてまた鳴らすことを繰り返すことで、その音に飾りを付ける効果です。縦軸に音量、横軸に時間を取ったディレイ効果は次のグラフで表すことができます。図のdelayTimeは次の音が鳴るまでの時間(遅延時間)で、feedbackは音量を小さくする比率です。0.5の場合には前の音量の半分に減ります。次の2つのコントロールは、上がディレイなしのもので、下がAudacityの[エフェクト]->[ディレイ]でディレイ効果を追加したものです。ディレイ有]http://himco.jp/wp-content/uploads/2020/01/yahho_delay.mp3下図はAudacityの[ディレイ]ダイアログボックスです。[繰り返しごとのディレイレベル(dB)]でfeedbackに相当する値を、[ディレイ時間]でdelayTimeを設定します。*[繰り返しごとのディレイレベル(dB)]では-30~1(dB)が指定できます。-6を指定するとfeedback=0.5を、-12を指定するとfeedback=0.25を指定するのと同じことになります。ディレイマウスクリックでp5.Delayが処理したSoundFileを聞くことができます。mouseXでp5.Delayフィルタの周波数を制御し、mouseYでp5.Delayの遅延時間とレゾナンスを制御します。その結果の音量をp5.Amplitudeオブジェクトを使って視覚化します。}}ディレイの有無を比較する例ディレイ効果の有る無しを比べる例を作成してみました。サウンド」で述べています。DELAY]ボタンが現れます。それぞれをクリックすると、ディレイ効果の有無が耳で比較できます。リファレンスメモp5.Delay説明ディレイはエコー(残響)効果。既存のサウンドソース(音源)を処理し、そのサウンドの遅延版を出力する。p5.Delayは、delayTimeとfeedback、filterそしてtypeに応じて、さまざまなエフェクトを生み出すことができる。下のサンプルでは、0.5のfeedback(デフォルト値)が、繰り返しごとに50%音量が小さくなるループディレイを生み出す。フィルタが高周波数をカットするので、突き刺すような音源の音とは違って聞こえる。このクラスはp5.Effectを拡張するので、そのamp()やchain()、drywet()、connect()、disconnect()が使用できる。遅延パラメータのセットにしたがってオーディオ信号に遅延を追加する。遅延/残響の時間(秒単位)。一部のブラウザでは1秒に制限される。lowPassより低い周波数のみが遅延に含まれる(オプション)setType()説明ディレイのプリセットタイプを選択する。’pingPong’は信号を左チャンネルから右チャンネルに跳ね返し、ステレオ効果を生み出す。これ以外のパラメータを与えるとデフォルトの遅延設定に戻る。(0)filter()説明ディレイ用のローパスフィルタ周波数を設定する。ローパスフィルタは、このフィルタ周波数より高い周波数をカットする。ローパスフィルタは、このフィルタ周波数より高い周波数をカットする。フィルタによる周波数カットオフのレゾナンスか、またはこのパラメータの変調に使用できるオブジェクト。高い数値(15など)はレゾナンスを生み出し、低い数値(0.2など)は傾斜を生み出す。遅延(エコー)時間を秒単位で設定する。通常この値は0.0~1.0の間の浮動小数点数。遅延の時間(秒単位)feedback()説明フィードバックは、Delayがループ内で入力を通して信号を返すときに発生する。フィードバック量はループのたびに送信する信号の量を決める。1.0より大きなフィードバックは、ループするたびに出力全体を増加させ、無限のフィードバックループを生み出すので、望ましくない。デフォルト値は0.5。フィードバック値リバーブリバーブは、音に奥行きと知覚できる空間を与えます。ここではp5.SoundFileオブジェクトにリバーブ効果を与えています。デフォルトの接続を解除する。soundFile.play();}画面のクリックでスタートします。解説ディレイが音を飾り付けるエフェクトであるのに対し、リバーブは、室内で音が壁などに当たったときに発生する残響を付けるエフェクトです。音源(スピーカーや楽器など)が鳴ると、最短距離でメインの音が直接聞く人に届きます(直接音)。これとは別に室内の壁などで当たってから届く音もあります(初期反射)。この後、壁などでの反射で減衰を繰り返しながら届く音もあります(後部残響)。(参考:「リバーブとディレイ、エコーの違い【今さら聞けない用語シリーズ】」)これを表そうとするのがリバーブです。Audacityの[リバーブ]ダイアログボックスには、リバーブの特徴をよく示す[ルームサイズ]があります。Audacityはこの値が小さければ狭い空間(部屋)での残響を、大きければ広い空間(ホール)での残響をシミュレーションします。リファレンスメモp5.Reverb説明リバーブは、減衰する多くのエコーを通して音に深みを追加し、その音が物理的な空間で発生しているという知覚を生み出す。p5.Reverbには、時間(リバーブの持続時間)と減衰率(音がエコーごとに減衰する比率)に関するパラメータがあり、これらは.set()か.process()メソッドで設定できる。p5.Convolverはp5.Reverbを拡張し、畳み込み(コンボリューション)によって実際の物理空間の音が再現できる。このクラスはp5.Effectを拡張する。amp()やchain()、drywet()、connect()そしてdisconnect()が使用できる。メソッドprocess()説明ソースをリバーブに接続し、リバーブパラメータを割り当てる。各エコーでの減衰のパーセント。最小:0,最大:100。リバーブを後方に再生するか前方に再生するか(オプション)set()説明リバーブ設定を設定する。.process()に似ているが、新しい入力の割り当ては行わない。各エコーでの減衰のパーセント。最小:0,最大:100。リバーブを後方に再生するか前方に再生するか(オプション)amp()説明リバーブエフェクトの出力レベルを設定する。今から何秒後にこの出来事を起こすか(オプション)コンボリューションリバーブコンボリューションリバーブは、別名サンプリングリバーブとも呼ばれ、コンサートホールなど、実際の空間で採取したデータ(インパルスレスポンス、IR)を使って、残響を再現します。コンボリューションリバーブ」)。これはIRデータ(パルス、短い音)があれば、その場所に行かなくてもその場所での音の響きが再現できるということです。適切なIRデータの採取には相応の機材やノウハウが要りますが、実は適当なサウンドファイルでもコンボリューションリバーブに利用できます。コンボリューションはサウンド処理以外にも、画像処理や画像認識にも利用されます。BandLabのドラムキットで作成した音です。BandLabにはコンボリューションリバーブ用のプラグイン「MConvolutionEZ」を組み込むことができます。MConvolutionEZを使うと、環境を選択してそこでで鳴っているような音が作成できます。次の2つはその例です。大きなホールの遠くで鳴っている感じhttp://himco.jp/wp-content/uploads/2020/01/drumInHall.mp3コンボリューションリバーブp5.Convolverは、コンボリューション(畳み込み)を使って、実際の空間の音が再現できます。コンボリューションはインパルスレスポンス(部屋の残響音)を受け取り、それを使ってその空間での音を再現します。上記リンクのサンプルはかなり分かりづらいので、基本的なものを以下に作成しました。}}画面のクリックでサウンドが再生されます。解説コンボリューションリバーブをかける、処理対象のサウンドはこれです。http://himco.jp/wp-content/uploads/2020/01/drum_blues.mp3インパルスレスポンスには「ummonai/ewap」から得たBatcave.wavを使っています(「バットマン」が撮影されたバットケーブで採取した音だそうです)。http://himco.jp/wp-content/uploads/2020/01/Batcave.wav上記コードのコメントにも書いていますが、コンボリューションリバーブではサウンドファイルを読み込むので、それが確実に終わってから次に進むことがポイントです。そのためにはpreload()関数で必要な読み込みを終わらせておくのが一番です。preload()関数で読み込みを行わなない場合、あるタイミングで読み込みが終わっていても、p5.Convolverオブジェクト自体の内部的な設定が終わっていない可能性があるので、たとえばdraw()関数でp5.Convolverオブジェクトのimpulses配列にアクセスするとエラーになります。下図はサウンドファイルのプリロードから再生までの流れをまとめた図です。IRを選択して適用する複数のIRデータを使って、コンボリューションリバーブを行いたいときには、p5.ConvolverオブジェクトのaddImpulse()とtoggleImpulse()メソッドが利用できます。次の例では、HTMLの<select>要素を使ってIRデータを選択し、コンボリューションリバーブを適用します。Responses」ページのものをお借りしています。1つのIRデータを持つp5.Convolverオブジェクトを作成。}}画面のクリックでサウンドがスタートします。右上のリスト選択でIRが変更できます。IRデータのWashing_machine.wavは、洗濯機の中にマイクを置いて採取されたファイルで、POT1.wavは花瓶の中の残響データです。dog1a.mp3はただの犬の鳴き声ですが、これを適用すると、ドラムの音に犬の声が混じって聞こえます。注意:上記コードのコメントにも書いていますが、複数のIRデータの読み込みには、createConvolver(path)で、1つのIRデータを持つp5.Convolverオブジェクトを作成するaddImpulse(path)で、1つずつ追加するという手順を取るのが確実のようです。preload()関数内ではforループを使って一気にIRデータが追加できそうに思えますが、ファイルの読み込みには必ず時間がかかるためか、うまくいきません。p5.Convolverオブジェクトのimpulses配列に収まる順番は不定です。addImpulse()で追加した順に収まるように思えますが、そうではありません。順番は読み込むたびに変わることもあります。リファレンスメモp5.Convolver説明p5.Convolverはp5.Reverbを拡張する。コンボリューション(畳み込み)と呼ばれる処理を通して、現実の物理空間の音をエミュレートできる。コンボリューションは、オーディオ入力に”インパルスレスポンス”を乗算して、時間経過のともなう音の分散をシミュレーションする。インパルスレスポンスは、指定したオーディオファイルから生成される。残響空間で風船を破裂させ、そのエコーを録音するのも生成する方法の1つ。コンボリューションはサウンドの実験にも使用できる。p5.Convolverをインスタンス化するには、createConvolution(path)関数を使う。pathにはインパルスレスポンスに使用するオーディオファイルを指定する。p5.Effectを拡張する。読み込みが失敗したときに呼び出す関数。この関数は、エラーかうまくいかなかったことに関する情報を持つXMLHttpRequestオブジェクトを受け取る。impulses:複数のインパルスファイルを.addImpulse()メソッドを使って読み込んでいる場合には、インパルスファイルはこのimpulses配列にオブジェクトとして保持される。ファイルの切り替えには.toggleImpulse(id)メソッドを使用する。メソッドcreateConvolver()説明p5.Convolverを作成する。インパルスレスポンスの生成に使用するサウンドファイルへのパスを受け取る。読み込みが成功したときに呼び出す関数。読み込みが成功しなかったときに呼び出す関数。コールバック関数には引数として、カスタムエラーが渡される(オプション)戻りp5.Convolver:process()ソースをリバーブに接続し、リバーブパラメータを割り当てる。新しいインパルスレスポンスを読み込み、p5.Convolverに割り当てる。インパルスは.impulses配列に追加される。それまでのインパルスには、.toggleImpulse(id)メソッドでアクセスできる。複数のインパルスを.addImpulse()を使ってp5.Convolverに追加した場合には、このメソッドで.impulses配列内の項目を切り替えることができる。パラメータには、使用したいインパルスを識別する元のファイル名(文字列)か.impulses配列での位置(数値)を指定する。.impulses配列内のオブジェクトには直接アクセスできる。AudioBuffer))と、元のファイル名に対応する文字列の.nameという2つの属性を持っている。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。WAAPIに関する注意WAAPIを利用するにはブラウザに特別な設定が必要です。ブラウザの実験的な機能を有効化する方法に書いているので、必ずお読みください。楕円(円)、円弧を描く。APIやTensorFlow.jsについて調べたことを書いています。freebiescafe.com。