2013年8月17日土曜日

ヒアドキュメントで Octave

UNIX のシェルスクリプトでは、標準入力として渡すテキストをスクリプト中に記述できるヒアドキュメントという機能があります。

例:heretest.sh

#!/bin/sh
# calc. fibonacci number (recursion)
N=10

## Octave script
octave --quiet <<EOF
function y = fib(n)
  if (n == 0)
     y = 0;
  elseif (n == 1)
     y = 1;
  else
     y = fib(n-1) + fib(n-2);
  end
end
fib(${N})
EOF


実行結果:
$ ./heretest.sh
ans =  55


Octave はともかく、Gnuplot などで役立つかもしれません。


2013年8月13日火曜日

Cygwin で VST プラグイン制作

Steinberg 社が開発した VST  (Virtual Studio Technology)  は、DAW と
ソフトウェアシンセサイザー・エフェクタのプログラム間のインタフェースとなる標準的な規格です。

この規格のソフトウェア開発キット(SDK)は Steinberg 社が無料で公開しているため、
DAW 上で使えるシンセサイザーやエフェクタ(VSTプラグイン)は自作することができます。

VST プラグインの開発ですが、根本となる信号処理・MIDIの扱い方については、検索すれば参考となる文献・Web ページを見つけることができると思います。

しかし、VST の SDK を用いて、実際に DAW で使えるプログラムを作る、すなわちコードを動的リンクライブラリ化する ( *.dll を作る) 方法については、今のところ情報源が限られています。

いくつか VST プラグイン開発の参考となる Web ページ を列挙します。
下記のサイトでは、 Visual Studio を使って VST プラグインを開発しています。
Visual Studio は便利ですが、やはり個人的にはコマンドライン (Cygwin) で制作したい…
というわけで、Cygwin 上で VST プラグインを制作する方法を探してみたところ、以下の動画を見つけました。



この動画を参考にしながら、動作テスト程度に VSTプラグイン (エフェクタ) を制作してみました。

・プラグイン名: LR2RL
・効果: L と R の信号を入れ替える

(0) 準備
Cygwin: make, gcc (c++), dllwrap を使用出来る状態まで設定
vstsdk2.4: Steinberg のwebページより入手

(1) *.def 作成
以下のようなモジュール定義ファイル (.def) を作成します。
・LR2RL.def

LIBRARY LR2RL
DESCRIPTION "VSTe: LR2RL"
EXPORTS main=VSTPluginMain

2行目の"DESCRIPTION"は無くても良いので、実質 2行だけのテキストファイルです。

(2) LR2RL.cpp 作成
VST プラグインの本体です。
"C++でVST作り"を参考に、最小構成で組んでいます。
・LR2RL.cpp

#include "audioeffectx.h"

#define MY_VST_INPUT_NUM 2
#define MY_VST_OUTPUT_NUM 2
#define MY_VST_UNIQUE_ID 'SMPL'

#define MY_VST_PRESET_NUM 1
#define MY_VST_PARAMETER_NUM 0

class LR2RL : public AudioEffectX{
public:
  // Constructor
  LR2RL(audioMasterCallback audioMaster);

  // processReplacing
  virtual void processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames);
};

AudioEffect* createEffectInstance(audioMasterCallback audioMaster){
  return new LR2RL(audioMaster);
}

// (1) Constructor
LR2RL::LR2RL(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){
  setNumInputs(MY_VST_INPUT_NUM);
  setNumOutputs(MY_VST_OUTPUT_NUM);
  setUniqueID(MY_VST_UNIQUE_ID);

  isSynth (false);
  canProcessReplacing();
}

// (2) processReplacing
void LR2RL::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames){
  float *inL = inputs[0];
  float *inR = inputs[1];
  float *outL = outputs[0];
  float *outR = outputs[1];

  for(int i = 0; i < sampleFrames; i++){
    outR[i] = inL[i];
    outL[i] = inR[i];
  }
}

(3) makefile 作成
VST プラグイン作成の肝となるステップです。
・makefile

VSTPATH=/cygdrive/c/vstsdk2.4
VSTSRCPATH=/public.sdk/source/vst2.x

## plugin name
PLUGIN=LR2RL

CXX=gcc-3
CXXFLAGS=-I$(VSTPATH) -I$(VSTPATH)$(VSTSRCPATH) -DBUILDING_DLL -mno-cygwin
DLLWRAP=dllwrap --target=i386-mingw32

DLL=$(PLUGIN).dll

$(DLL): $(PLUGIN).o audioeffect.o audioeffectx.o vstplugmain.o
 $(DLLWRAP) --driver-name c++-3 -mno-cygwin --def $(PLUGIN).def $^ -o $@ 

audioeffect.o: $(VSTPATH)$(VSTSRCPATH)/audioeffect.cpp
 $(CXX) $(CXXFLAGS) -c $<
audioeffectx.o: $(VSTPATH)$(VSTSRCPATH)/audioeffectx.cpp
 $(CXX) $(CXXFLAGS) -c $<
vstplugmain.o: $(VSTPATH)$(VSTSRCPATH)/vstplugmain.cpp
 $(CXX) $(CXXFLAGS) -c $<

## Clean up
.PHONY: clean
clean:
 rm -f *.o

gcc (c++) で "-mno-cygwin" を使うためにバージョン指定をしていることに注意。

(4) make

LR2RL.dll 制作後、FL studio 10 で動作を確認しました。

2013年8月12日月曜日

Gow (Gnu On Windows) - コマンドプロンプトで UNIX コマンド

Gow (Gnu On Windows) をインストールすると、コマンドプロンプトで
UNIX の "ls" や "rm" といったコマンドを使用することができます。

設定方法は、以下の Web ページが参考になります。
Let's GOW - GNU on Windows のインストールと初期設定

2013年8月8日木曜日

AFsp - CUI オーディオ編集ツール

カナダのマギル大学にある Telecommunications & Signal Processing Lab. が提供している
CUI オーディオ編集ツール "AFsp"
何かと便利なツールです。

コマンドプロンプト で利用する場合は、.../AFsp-v*r*.tar.gz/MSVC/bin に、
Unix 系では make して ../AFsp-v*r*.tar.gz/bin にパスを通すと使用できます。

こちらのページに、日本語でこのツールの簡単な説明が書かれています。

走り書き程度の説明を。

・ InfoAudio
オーディオファイルの情報を表示します。
対象フォーマットは、".wav" や "AU" など。

・ CompAudio
2つのオーディオファイルを比較し、統計量や SNR、 Segmental SNR を算出。
先に引数としたオーディオファイルがリファレンス。

・ CopyAudio
オーディオファイル編集コマンド。
信号自体の編集やフォーマットの変換など多機能。

・ FiltAudio
フィルタファイルに基づくフィルタリングを行う。

・ GenNoise
白色ガウス雑音を生成する。

・ GenTone
サイン波を生成する。

・ LPanal
線形予測分析器。

・ LPsyn
線形予測係数より音声合成。

・ PQevalAudio
ITU-R BS.1387-1 PEAQ (Perceptual Evaluation of Audio Quality) による
ODG スコア (Objective Difference Grade: 客観品質劣化度合)を算出する。
使用するオーディオファイルのサンプルレートは 48 kHz に設定する必要あり。

・ ResampAudio
リサンプリングを行う。


2013年8月6日火曜日

AudacityでApple Losslessを読み込む(FLAC, M4A, WMAなどにも対応)

ALAC (Apple Lossless Audio Codec) 形式ファイルの音源波形を直接編集したい」と思い、
有名な無料波形編集ソフトウェア Audacity 上で読み込もうとしたところ、
対応してないよ! と怒られました。

何とかして対応させることができないか調べたところ、 FFmpeg を使って
簡単にできると Audacity 公式マニュアルに書いてありました。

 というわけで、早速やってみます。



必要なファイルは2つ。

(1) FFmpeg_v0.6.2_for_Audacity_on_Windows.exe
(2) avformat-52. dell
 やることは、

 「(1)をインストールして、(2)を適当な場所に置きパスを通す」 だけです。

 まず(1)から。

1.1 ここから"FFmpeg_v0.6.2_for_Audacity_on_Windows.exe"をダウンロード

1.2 "FFmpeg_v0.6.2_for_Audacity_on_Windows.exe"を起動

1.3 インストーラの言う通りにインストール

 以上です。これは特に問題ないかと。

次に(2)。

2.1 ここから"FFmpeg_v0.6.2_for_Audacity_on_Windows.zip"をダウンロード   
     この中に"avformat-52.dll"が入っています。 

2.2 "FFmpeg_v0.6.2_for_Audacity_on_Windows.zip"を解凍し、"avformat-52.dll"を
     適当な場所に置く   
     次の工程でパスを通すため、"avformat-52.dll"はどこにおいても大丈夫です。
     自分の場合は、Audacityのディレクトリの中に、
     "FFmpeg_v0.6.2_for_Audacity_on_Windows"ディレクトリを作成し、         "FFmpeg_v0.6.2_for_Audacity_on_Windows.zip"の中身を全て入れました。

2.3 Audacityを開いて"avformat-52.dll"のパスを通す
     Audacity起動後、 編集 -> 設定 -> ライブラリ -> FFmpegライブラリ:場所 をクリック   
     最後に、2.2で適当な場所に置いた"avformat-52.dll"を指定します。

2.4 Audacity再起動

以上の作業によって、Audacity 上で ALAC 形式の編集が可能になります。 
また、ALAC だけでなく、WMA や FLAC などといった形式も可。

foobar2000でYouTubeの音楽を聞く

foo_youtube: Home インストール方法はこちら:  Foobar2000:How to install a component メリットとしては、 1) foobar 上で Youtube の音楽を聞ける(スペクトラムアナライザーやスペクトログラムを見た...