スキップしてメイン コンテンツに移動

投稿

8月, 2019の投稿を表示しています

gnuplotで曲線を描く

自作デジタルエフェクターではLFOなど可聴域外の周波数を扱う事があります。そういった音声信号はWAVファイルへ出力しても耳で聞いて確認することができません。そのような場合は数値データをそのままファイルに落としてグラフ化ツールなどで可視化して確認します。  gnuplot  gnuplotはフリーのグラフツールです。 gnuplot https://sourceforge.net/projects/gnuplot/files/gnuplot/ gnuplotにはコマンドライン版とウインドウ版の両方が入っています。どちらでも同じように使えますが、ここではウインドウ版を使います。 インストールの際にデスクトップ上にアイコンを作成するにチェックを入れておきます。 インストールが終わったら、デスクトップのショートカットを右クリックしてショートカットのプロパティを表示します。 ショートカットのプロパティで作業フォルダーの中を消して空にします。  グラフ表示してみる  作業の流れは、 ・wgnuplotショートカットを作業フォルダへコピーする。 ・コンソールで標準出力へデータを出力するプログラムを作る。 ・リダイレクトでデータファイルを生成する。 ・gnuplotで表示する。 ちょっと面倒ですけど、こんなものでしょう。ではちょっとやってみましょう。 まず、初めにデスクトップにあるwgnuplotのショーカットを作業フォルダへドラッグ&ドロップでコピーし、作業フォルダからwgnuplotを起動できるようにしておきます。これを作って置かないと起動の度に作業フォルダを指定しなければなりません。 次にサイン、コサインの数値を出力するプログラムを書いてみます。教科書通りの何の変哲もないコンソールに数値を出力するだけのプログラムです。 sine_cos.cpp #include  <iostream> #include  <math.h> main() {   int       fs      = 44100; // サンプリングレート   int       freq    = 1;       // 周波数     int       l

WAVライブラリ

プログラムで音声フォーマットのWAVファイルが扱えるようになれば、それを読みこんで、エフェクト処理して、それを書き出す、自作のデジタルエフェクターではそれをリアルタイムで行うだけの違いでしかありません。PCでプログラムのひな形を作るのがサウンドエフェクトプログラミングの第一歩となります。  WAVライブラリ   C言語ではじめる音のプログラミング http://floor13.sakura.ne.jp/book03/book03.html サウンドプログラミング入門 http://floor13.sakura.ne.jp/book06/book06.html 良本なのでぜひ両方ともお手元に置いてあげてください。 サンプル音源やソースコードも上記サイトで全公開されています。そのソースコードの中にWAVファイルを読み書きするCプログラムがあるのですが、Cではちょっとアレなので、それをC++で書き直してみました。 wave.hpp(C++) https://github.com/DIYFXWorld/Other オリジナルのソースコードではデータ圧縮もサポートしていますが、面倒なので非圧縮データのみの扱いとしました。  wavファイルの情報を表示する  手始めにwave.hppを使ってWAVファイルの情報を表示するプログラムを作ってみます。wave.hppを同じフォルダにコピーしておきます。プログラムファイル名はwav_info.cppとします。 wav_info.cpp #include  "wave.hpp" main( int argc, char *argv[] ) {   if( argc < 2 )   {     printf( "usage : wav_info file_name.wav" );     return 0;   }   wav_info  wi = get_wav_info( argv[ 1 ] );   puts( "" );   printf( "Sampling rate : %d Hz\r\n", wi.fs );   printf( &qu

MinGWのインストール

 MinGWのダウンロード  本家サイトからダウンロードしてください。 http://www.mingw.org/ トップページのダウンロードをクリックします。 セットアッププログラムをダウンロードします。  MinGWのインストール  既存のフォルダにしかインストールできないので、あらかじめインストールフォルダを作って置きます。今回はE:\MinGWにインストールします。注意点は ・出来るだけ浅いフォルダにインストールしましょう。 ・フォルダ名に日本語や空白は入れないようにしましょう。 ダウンロードしたセットアッププログラムを実行します。Installボタンをクリックします。 インストールフォルダを指定してから、Continueボタンをクリックします。 設定情報のダウンロードが始まるので、終わったらContinueボタンをクリックしてつぎへ進みます。 mingw32-gcc-g++bin と msys-base-bin のチェックボックスをクリックし、Mark for Installtionをクリックして矢印マークを付けます。マークを付けたらメインメニューからInstallation->Apply Changesをクリックします。ダウンロードが終わるまでしばらく待ちます。 ダウンロードサイスは約231Mでした。  MinGW(msys)の起動  MinGW\msys\1.0 ディレクトリの中に msys.bat というファイルがあるのでこれをクリックするとシェルが起動します。ショートカットを作って直ぐに起動できるようにしておきましょう。  ユーザーディレクトリの場所  MinGW\msys\1.0\home\ユーザー名\ がユーザーディレクトリになります。通常はここを起点としてフォルダを掘っていきます。このフォルダにもショートカットを作ってすぐ移動できるようにておきましょう。  C/C++ビルド用スクリプト  C/C++プログラムをコンパイルする為のスクリプトファイルを作ります。 build という拡張子無しのファイルを作って以下の内容をコピーします。 #!/bin/bash path=$1 #echo &

Blue Pill STM32 FX Projects - 簡易サウンドエフェクト・テスト回路 -(2)

Blue Pill STM32 FX Projects - 簡易サウンドエフェクト・テスト回路 の各エフェクトの簡単な解説です。  ディレイ  最大遅延時間400ms。周波数特性10kHz。Blue Pill(STM32F103C8)のSRAMが20kバイトしかないので、普通に作ればこうなると思います。  アナログディレイ  最大遅延時間800ms。周波数特性1.5kHz。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。LPFにピークを付けてあるのでフィードバックを最大にすると発振します。  ディレイ(ADPCM)  最大遅延時間1590ms。周波数特性10kHz。ADPCMによるデータ圧縮を使ったディレイです。ADPCMは16ビットデータを4ビットデータへ圧縮します。最大遅延時間が4倍に伸びますが音声品質が少し悪くなります。  2タップディレイ(ADPCM)  サウンドオンサウンド用の特殊なディレイです。ピンポンディレイのモノラル版だと考えて貰うと分かり易いです。遅延を最大にしてフィードバックをゼロにするとディレイ音が2回返ってくるのが分かると思います。ADPCMを使っているので音質は少し落ちますが、最大遅延時間は1590ms(790ms x2)です。  モジュレーションディレイ  最大遅延時間800ms。周波数特性5kHz。ディレイというよりコーラス/フランジャーのロングディレイ版という方が近いのかもしれません。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。  コーラス   フランジャー   フェイザー  musicdsp.orgのphaser.cを元にしたフェイザーです。RateとDepthの外にフィードバックとフィルタの段数切り替えができます。  トレモロ  普通のトレモロです。少し違いが分かり難いのですが、モード1が正弦波、モード2が矩形波です。  リングモジュレーター   リバーブ  freeverbを元にしたリバーブで、シュレーダーのリバーブレーターの実装です。コムフィルター8個、オールパスフィルター4個で構成されています。サブサンリングで周波数特性を落とすことで遅延時間を延ばしているので周波数特性は10kHzです。  エフェ