自作デジタルエフェクターでは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 length = 5; // データの長さ
double th = (2.0*M_PI) / fs * freq;
for( int i( 0 ); i < fs * 5; ++i )
{
double s = sin( th * i );
double c = cos( th * i );
std::cout << s << " " << c << " "<< std::endl;
}
}
これをコンパイルして実行ファイルを作ります。データの出力先は標準出力なので、リダイレクトしてデータファイルを作ります。リダイレクトすると標準出力をコンソールではなくファイルへ出力するように変更できます。MinGWコンソールで以下の様にするとリダイレクト出来ます。MS-DOS(DOS窓)でもできます。
リダイレクト
$sin_cos > sin_cos.txt
生成されたsin_cos.txtをメモ帳でオープンすると数値データが出力されていることが分かります。
作業フォルダーのwgnuplotショーカットからwgnuplotを起動します。
データファイルにはsinとcosの2つの数値データが入っています。using:で表示するデータを指定します。w l は線種の指定です。title "" あってもなくても構いません
sinデータを表示する
plot "sin_cos.txt" using:1 w l title "sin"
replotで2本目の曲線を描画します。
cosデータを表示する
replot "sin_cos.txt" using:2 w l title "cos"
saveでここまで書いたプロットコマンドをセーブできます。
プロットコマンドのセーブ
save "sin_cos.plt"
loadでプロットファイルをロードして再描画できます。
再表示
load "sin_cos.plt"
プロットファイルはプロットコマンドを保存しているだけなのでメモ帳などで編集できます。
gnuplot
gnuplotはフリーのグラフツールです。
gnuplot
https://sourceforge.net/projects/gnuplot/files/gnuplot/
gnuplotにはコマンドライン版とウインドウ版の両方が入っています。どちらでも同じように使えますが、ここではウインドウ版を使います。
インストールの際にデスクトップ上にアイコンを作成するにチェックを入れておきます。
インストールが終わったら、デスクトップのショートカットを右クリックしてショートカットのプロパティを表示します。
ショートカットのプロパティで作業フォルダーの中を消して空にします。
グラフ表示してみる
作業の流れは、
・wgnuplotショートカットを作業フォルダへコピーする。
・コンソールで標準出力へデータを出力するプログラムを作る。
・リダイレクトでデータファイルを生成する。
・gnuplotで表示する。
ちょっと面倒ですけど、こんなものでしょう。ではちょっとやってみましょう。
まず、初めにデスクトップにあるwgnuplotのショーカットを作業フォルダへドラッグ&ドロップでコピーし、作業フォルダからwgnuplotを起動できるようにしておきます。これを作って置かないと起動の度に作業フォルダを指定しなければなりません。
次にサイン、コサインの数値を出力するプログラムを書いてみます。教科書通りの何の変哲もないコンソールに数値を出力するだけのプログラムです。
sine_cos.cpp
#include <math.h>
main()
{
int fs = 44100; // サンプリングレート
int freq = 1; // 周波数
int length = 5; // データの長さ
double th = (2.0*M_PI) / fs * freq;
for( int i( 0 ); i < fs * 5; ++i )
{
double s = sin( th * i );
double c = cos( th * i );
std::cout << s << " " << c << " "<< std::endl;
}
}
これをコンパイルして実行ファイルを作ります。データの出力先は標準出力なので、リダイレクトしてデータファイルを作ります。リダイレクトすると標準出力をコンソールではなくファイルへ出力するように変更できます。MinGWコンソールで以下の様にするとリダイレクト出来ます。MS-DOS(DOS窓)でもできます。
リダイレクト
生成されたsin_cos.txtをメモ帳でオープンすると数値データが出力されていることが分かります。
作業フォルダーのwgnuplotショーカットからwgnuplotを起動します。
データファイルにはsinとcosの2つの数値データが入っています。using:で表示するデータを指定します。w l は線種の指定です。title "" あってもなくても構いません
sinデータを表示する
replotで2本目の曲線を描画します。
cosデータを表示する
saveでここまで書いたプロットコマンドをセーブできます。
プロットコマンドのセーブ
loadでプロットファイルをロードして再描画できます。
再表示
プロットファイルはプロットコマンドを保存しているだけなのでメモ帳などで編集できます。
コメント
コメントを投稿