投稿

Java Applet WaveViewer (波形表示アプレット) を作ってみた

イメージ
上画像はイメージで下は動作可能なアプレットになります。 このアプレットを動かすためには、Javaの環境設定をいじる必要がある。java.policyファイルにオーディオを許可する内容を書き込むとマイク入力が許可され、波形が表示されるようになる。 WindowsXPだと、このファイルに、 C:\Program Files\Java\jre6\lib\security\java.policy 下の1行を加える。 permission javax.sound.sampled.AudioPermission "record"; たぶんこれで動作する。 プログラムの概要 チューナーを作るための下準備として波形を表示させるプログラムを作ってみた。マイク入力から音を取得して、それを表示させている。幅は44Hzぐらいを表示。音叉の440Hzを入れると10周期ぐらいが表示される。個人的に波形ひとつひとつを見たかったので、これぐらいにしてみた。動きはぎこちないが、まぁ目標は達成できた。 作ってみて いつものように資料はAPIぐらい。動けばよいというレベル。やってみてわかったことは、意外とCPU負荷が高いということ。次から次へと来る音の信号を、一つ一つ処理することはパソコンでも結構辛いようだ。はじめ44100Hzのサンプリング周波数で入れてみたが、CPU負荷が高すぎたので、サンプリング周波数を10000Hzまで落としてみた。音の入力レベルに関しても8bitに下げている。 内部的にはbyteデータをリングバッファに溜めつつ捨てつつ、一定時間ごとに表示させている。やっていることはシンプルなのだが、連続的に行うので、いかに軽く作るかがポイント。リアルタイム処理って難しい。

Javaでギター用チューナーでも作ろうか

イメージ
昨年末からプログラムをやっていないので、忘れないために2ヶ月ぶりに再開してみる。今回はギター用チューナーでも作ろうかと思うが、毎回のように予備知識なしなので、適当に考えて、それを実現させようかと思う。 まずはギターの音を録音して波形を見てみた。サンプリング周波数は44100Hzで録音してみた。赤字の周波数が各弦のジャストチューニング。その横はジャストのときのサンプリング数。その下はジャスト前後のサンプル数と周波数。 1弦 329.62756Hz (133.7874sample) 134sample(329.1045Hz) - 133sample(331.5789Hz) 2弦 246.94165Hz (178.5847sample) 179sample(246.3687Hz) - 178sample(247.7528Hz) 3弦 195.99772Hz (225.0026sample) 226sample(195.133Hz) - 225sample(196.000Hz) 4弦 146.83238Hz (300.3425sample) 301sample(146.512Hz) - 300sample(147Hz) 5弦 110.00000Hz (400.9091sample) 401sample(109.975Hz) - 400sample(110.250Hz) 6弦   82.40689Hz (535.1494sample) 536sample(82.2761Hz) - 535sample(82.430Hz) 波形のかたち 思ったよりも素直だ。倍音が結構含まれているから、もっとギザギザかと思ったけど、そうでもなかった。6弦だけがちょっと倍音が多いけど。 周波数とサンプリング数の関係 上記のように何サンプルでジャストチューニングになるのかを計算したら結構中途半端になった。精度を上げるためにはちょっと細工が必要かもしれない。主流のサンプリング周波数はいくつかあって、44100Hz、48000Hz、96000Hzなどが一般的で高音質な部類になると思う。そこで思ったのだがCDのサンプリング周波数である44100Hzって昔から中途半端な印象があって不思議に思っ

音叉でチューニング

イメージ
ギターのチューニングは音叉で行っているのだが、チューニング手順はいろいろあるようだ。一般的な方法としては、ギターの5弦開放を音叉で合わせた後、5弦と6弦、5弦と4弦、4弦と3弦を5フレットと開放やハーモニックスを使って合わせていく。1、2弦はいろいろな方法があるようだが、ひとつは6弦と1弦を合わせて、最後に1弦と2弦を合わせて完了。これは5弦を中心としたチューニングとも言える。 使用している音叉 Wittner 921 ウイットナー(ドイツ) ギターを始めたときは、上記のようなやり方で合わせていたが、5弦のみを基準にするので、どこかで調整が甘いと、その先ズレまくるという欠点がある。またハーモニックスもオクターブの関係にある2倍音(12フレットナチュラルハーモニックス)、4倍音(5フレットナチュラルハーモニックス)なら問題ないが、3倍音(7フレットナチュラルハーモニックス)では平均律ではなく、純正律で2セント高くなってしまう。またハーモニックスはオクターブチューニングや弦の太さにも影響を受けるため、あまり信用できない。 下はAと5度上のEのハーモニー。上段が平均律で緩やかなうなりがある。下段が純正律でうなりがない。 ギターで3倍音のハーモニーを使ってチューニングすると僅かながらズレてしまうことが分かる。 上段平均律 A220Hz E329.6275569128699Hz 下段純正律 A220Hz E330Hz そこでなるべく音叉で各弦をチューニングする方法に変更した。具体的なやり方はこんな感じ。 独自の音叉によるチューニング方法 5弦 5フレット上のナチュラルハーモニックスと 音叉  440Hz 3弦 2フレット(14フレットナチュラルハーモニックス) と 音叉  440Hz 1弦 5フレット と 音叉  440Hz 4弦 開放 と 5弦5フレット 2弦 開放 と 3弦4フレット 6弦 5フレット上のナチュラルハーモニックス と 1弦開放 こんな感じで5、3、1弦は音叉とあわせている。残りの弦は隣の音叉で合わせた弦や、オクターブ関係にある弦に合わせるので、ズレは生じにくくなっている。しかし、オクターブチューニングなどがしっかり出来ていないと、かえってまずい結果になるとも言える

マイクケーブル工作
CANARE L-4E6S, XLR(NEUTRIK NC3FXX-B/NC3MXX-B)

イメージ
セットを買うより安価だったので自作してみた。自作と言ってもケーブルとコネクタを買ってきて、はんだ付けするだけ。購入先はサウンドハウス。 CANARE L-4E6S 1m当たり110円 定番マイクケーブル。信頼性が高く安価。特長は以下の通り。 曲がりぐせがつきにくく、ステージ・報道など中継用。 編組密度94%以上の高密度編組シールドで電磁波ノイズを防ぐ 導体は0.08mmの極細線を1心あたり40本使用した撚線構造で、耐久性に優れている。 CANARE L-4E6S 仕様 直径 6mm 線心数 4本 導体断面積(AWG) 0.20mm (24) 導体構成 40本(0.08mm) よりピッチ 20mm シールド(編組)密度 94%以上 電気特性 心線 9.8Ω/100m シールド 3.0Ω/100m 線間静電容量 心-心 150pF/m 心-シールド 185pF/m 心線の抵抗値は9.8Ω/100mだが、ひとつの信号に対して2本使いなので、実際には4.9Ω/100mで使用することになる。 ちなみに銅線1本0.08mm当たりの抵抗値は392Ω/100mとなる。 静電容量は、電気をためる値で、コンデンサーと同じ原理。数値が大きいほどハイパスフィルターとなって高周波がグランドへ流れてしまうので、この値は小さい方が望ましい。ただし、音声で扱う周波数はそれほど高くないので、音質に影響が出るとは思えない。 同じカナレで、L-2T2Sという2芯のマイクケーブルがあるが、静電容量が心-心70pF/m,心-シールド106pF/mと若干小さい。スペックからするとこちらの方が高性能となるが、L-4E6Sと聞き比べて判るとは思えない。 XLRコネクタ NEUTRIK NC3FXX-B 310円 NEUTRIK NC3MXX-B 290円 XLRコネクタは、ITT社がオリジナルだが、現在は数社から販売されている。NEUTRIK社は安価でITTよりもよいという話もあったので買ってみた。 NEUTRIK NC3FXX-B (Female) 大きく分けて4つのパーツで構成されている。2パーツはNC3MXX-Bと共通のようだ。リングは取れる。 NEUTRIK NC3MXX-B

Javaクロマチック アコーディオン ソフト鍵盤 3

JavaAppletのソフト鍵盤。JIS配列のキーボードに対応しています。マウスクリックしても音は鳴りません。一度Applyボタンをクリックすると有効になります。 Chromatic Accordion Java Applet Applet failed to run. No Java Plug-in was found. 参考までの音色リスト Windows標準MIDI音源はGM音源。Java純正もGM音源で、音色と番号は互換性がある。上記のソフトはGM規格の番号に対して-1で表示。プログラム的には-1なので、そのままにしてます。GMの詳細については こちら を参照してください。 0~7  ピアノ  8~15  クロマチックパーカッション 16~23 オルガン  24~31 ギター  32~39 ベース  40~47 ストリングス  48~55 アンサンブル  56~63 ブラス 64~71 リード  72~79 パイプ  80~87 シンセリード  88~95 シンセパッド  96~103 シンセエフェクト  104~112 エスニック  112~119 パーカッシブ  120~127 エフェクト 機能を追加してみた MIDI音源を選べるようにした。コンボ ボックスをクリックするとPCが認識しているデバイス一覧が表示されるので、その中から選択する。MIDIYokeなどのソフトMIDIケーブルを使えば、VSTiソフト音源も扱える。よく分からない人は Microsoft GS Wavetable SW Synth (Windowsの場合)を選択してください。 音色を選べるようにした。手入力でprogと書かれているテキストボックスに0~127までを入力。その後「Apply」ボタンを押すと反映されます。 Octave: 音域を広げてみた。右へ行くほど高くなる。通常の楽器の音域をほぼカバー。 Velocity: キーを押したときの音量を5段階で調整。右へ行くほど音が大きくなる。 プログラミングについて ソフト鍵盤でも、クロマチックアコーディオンの配列は意外と弾けそうだと思えたので、VSTiを扱えるように機能を追加した。今回MIDIの仕様を少し調べてプログラムに反映させてみ

Javaでクロマチックアコーディオンのソフト鍵盤 2

イメージ
Chromatic Accordion Java Applet 上記アプレットはダミーです。最新のアプレットは こっち のページで公開してます。 クロマチックアコーディオンのJava Appletです。とりあえず動くところまで作ってみたのでアップしてみた。アプレット内を一度クリックすると、PCキーボードのキーを押すたびに音が出る。 JIS配列のキーボードを想定。位置は押して確認してみて。 キーボード入力のみ。マウスクリックでは音は出ない。 音色はPCのデフォルトMIDI音源でアコーディオン固定。 オクターブ変更はボタンをクリックすると1オクターブ上がる。 問題点 起動直後はもたつく。 あまりガンガン弾くと、音が鳴りっぱなしになってアプレットがフリーズするときもあるので注意。そういうときはブラウザを再起動してください。 Linuxだとキーイベントがうまく取れずに、音がちゃんと出ない可能性大(未確認)。 音がやや遅れて出る。ゆっくり弾く分にはそれほど問題はない。 キーボードのハード仕様によって、同時に押せるキーの組合わせに制限がある場合がある。USB接続のキーボードの場合は同時発音数は6音まで。 意外と弾けるかも ちゃんと練習すればパソコンのキーボードでも、そこそこ弾けそうな予感。ピアノ配列よりも相性がよいと思えた。 プログラミングについて 知識もないまま無理やり作ったアプレット。参考になりそうなサンプルもなかったので、API仕様を読みながらひとつずつ組み上げたかんじ。かなり混沌としたソースになってしまった。 苦労した部分。まずキーを押している間だけ音を出すというところ。パソコンのキーボードは押し続けると、「rrrrrrrrrr」のように連続して押していると認識してしまう。MIDIでこの情報をそのまま送ると、同じ音がガンガン重なってしまう。この解決方法としては、音が出ているかどうかフラグを立てることで認識させて、一度音を出したら、その音は出さないようにした。当たり前の方法なのかもしれないがプログラムとして機能させるまで時間がかかった。 GUI関連はやっぱり面倒くさい。ソースが長くなるのはGUIやグラフィックがあるから。グラフィックなしなら1/3ぐらいの時間で完成すると思う。発音した音をグラフィックに

Javaでクロマチックアコーディオンのソフト鍵盤1

イメージ
思いつきでクロマチックアコーディオンのソフト鍵盤を作ってみようかと思う。すっかりJavaを忘れてしまったので、リハビリという感じ。 クロマチックアコーディオンのキー配列 そもそも、ソフト鍵盤を使ってみようかと思ったら、あまりにも使いにくかったので、パソコンのキーボードで無理なく弾ける入力方法を考えていたら、ボタンがたくさんあるアコーディオンを思い出した。あれってどういう仕組みなのだろうか? 今の時代ネットで検索すればいくらでも出てくる。ローランドのサイトでキー配列を調べた。 http://www.roland.co.jp/VA/index.html 右手側のキー配列は、横には短3度で、右斜め上&左斜め下は半音、左斜め上&右斜め下は1音で5段。キーがレンガ状に配置されているので、パソコンのキーボードに近いものを感じる。これはピアノ鍵盤よりも相性はよさそうだと勝手に判断。それに同じ種類のコードはフォームが変わらないという、ギターと似たような構造が気に入った。 プログラミングスタート といういことでプログラムにとりかかる。Javaで数時間で完成するかと思ったら甘かった。いろいろ知識が不足していた。それに半年前に覚えたこともすっかり忘れてしまった・・・ 仕様としてはクロマチックアコーディオンの5段は実現できないので4段に縮小。横もオリジナルよりは少ないが、ピアノソフト鍵盤よりも音域は広く使える。また、キーの多いJIS配列が、初めてありがたいと思えた。音域がそれなりに稼げるので。 MIDI関係 音は簡単そうなパソコンのMIDI音源を利用しようと思う。まずJavaのMIDI関連のAPI仕様を読むが、さっぱり意味が分からなかった・・・。そもそも他では通用しない専門用語を、他では通用しない専門用語で説明されても分からない・・・ 分からないまま、適当にいじっていたら何とか音が出た。が、実現しようとしてるキーボード入力から音を出すということではまった。というか音を消すほうではまった。GUIのボタンから音を出すほうは、まだマシだったが、完成はしていない。 さらにテストしていてキーボードのハードの問題にもぶつかった。ThinkPad X61を使っているのだが、キーを同時に押すと、ある組合わせによってビープ音が出て入力を拒絶され

VSTプラグインは素人でも作れる?

イメージ
VSTを作るにはいくつか方法があるが、ここではWindowsXP上で純正VSTSDKとC++開発環境を考えてみたい。すぐに作るつもりはないが、開発環境を整えて様子をみようと思う。作れそうなら、C++の基礎から少しずつ勉強してみようかな。 無料でVST開発に必要なソフトは以下の2つだけ。 VST 2.4 Audio Plug-Ins SDK (Format: zip, 6.74 MB) http://www.steinberg.net/en/company/developer.html 無料で使えるVSTSDK。VSTを開発するのに必要なツールがセットになっているソフトウェア。ダウンロードするにはスタインバーグ社に登録(無料)する必要がある。 Microsoft Visual C++ 2008 Express with Service Pack 1 http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/ 上記は消滅? 日々更新され古いものはなくなっていくのがマイクロソフト。 ダウンロードサイズ 104MB インストールサイズ 約1GB でかい・・・ 無料で使えるC++言語の開発環境。現在新しい2010Expressもあるが、VST2.4は動かなかったので、VST開発情報もある2008Expressが無難。サンプルも難なく扱えた。30日以上使う場合は登録(無料)する必要がある。 上記2つのソフトをインストールする。Visual C++ 2008 ExpressはWebインストールで20分ぐらいかかる。 まずはVSTのサンプルを開いてみる インストールされたVSTSDKフォルダの以下のファイルをダブルクリック。 C:\vstsdk2.4\public.sdk\samples\vst2.x\win\samples.sln 自動でVisual C++ 2008 Expressが起動し、サンプルのプロジェクトが開く。 いくつかサンプルがあるが、GUIに興味があったので、GUI付きのsurrounddelayを見てみる。C++はさっぱり分からないので、やたらファイルがあって、どれを見ていいのか・・・ しばらく見ていたら、本体は僅か数ファイルだと分か

JavaのMIDI音源

イメージ
今のところMIDIはやらないのだが、Sound関係のソフトをいじっていたら気になったので、ここに記しておく。Windowsには標準でローランド製のMIDI音源が使えるようになっている。音は悪くはないのだが、よくもない。まぁ標準的なもの。そこで、Java純正のMIDI音源を試してみた。 Microsoft GS Wavetable SW Synth WindowsXP 標準MIDI音源 (Roland) サウンドとオーディオ デバイスのプロパティ > オーディオタグ > MIDI音楽の再生 > バージョン情報ボタンから見ることができる。ちなみにgm.dlsというファイルにwavetableを持っている。このサイズは3361KB。場所はここ。C:\WINDOWS\system32\drivers\gm.dls Java Sound Synthesizer JavaMIDI音源 Javaをインストールしても付いてないので、自分でインストールする必要がある。以下のサイトから直接ダウンロードする。 Downloads Java Sound API: Soundbanks(英語) http://java.sun.com/products/java-media/sound/soundbanks.html ダウンロードできる音源は3つあり、サイズが大きいほど高音質という。 soundbank-min.gm 483KB soundbank-mid.gm 1128KB soundbank-deluxe.gm 5018KB インストール方法 上記ファイルをJavaがインストールされているフォルダに入れるだけ。3つ入れると大きいサイズを優先するようだ。気に入った音源をひとつだけ入れればOK。 C:\Program Files\Java\jre6\lib\audio\soundbank-min.gm 試したら、JMF(Java Media Framework)をインストールしているとJavaMIDI音源でMIDIを再生できないようだ。何か方法があるかもしれないが、JMFがなければ素直にJavaMIDI音源を利用できた。 さて、実際の音は・・・ リバーブの調整までできるJava音源に期待したのだが、ノイジーだったり

ディレイ Nyquistで自作

イメージ
ディレイについて 音が反射して遅れて返ってくることをディレイ(遅延)という。また別の言い方としてはエコーとも言われるが、サウンド・エフェクターとしてはディレイという呼び方が一般的。ディレイは自然現象としても存在する。「山彦」「こだま」などとも言われている現象がそれに近く、残響音があまり含まれず反響音だけがよく聴こえる状態。エフェクターとしては、単純に原音を遅らせて再生させることで、似たような効果を生んでいる。しかし自然現象のシミュレーションではなく、さまざまな効果を狙う多目的なツールになっている。 音楽の世界では古典的なエフェクターのひとつであるディレイ。初期の頃は磁気テープやBBD素子を使ったアナログ回路で実現していたが、現在は主にデジタルディレイが主流。ただ繰り返すたびに音が劣化していくアナログ音も捨てがたく、テープやらアナログ回路のシミュレートも人気となっている。 ディレイは単に音を遅らせる装置である。基本的には音を遅らせる時間、繰り返し数、もしくは減衰レベルを設定する。そして、その音質をちょっと変えただけで様々な効果を生み出してしまう。シンプルながら奥が深い。リバーブがリアリティを追求する写真のようなものだとしたら、ディレイは輪郭だけさらっと描くようなスケッチで、潔さを感じる。 下の図はディレイで作ったもの。青が原音(直接音)で、赤がディレイで作られた反響音。12回再生させつつ、徐々に音を小さくさせている。リバーブのような複雑な残響音は含まれてない。 Nyquistでディレイを作ってみた。 Decayは2段階に分けてみた。ディレイ音の1回目のレベルと、それ以降のレベルの調整を別にすることで、減衰加減を好きなようにコントロールできる。たとえば2段目のDecayを0dBにすると、2回目以降は減衰せずに同じレベルで繰り返すことができる。 ディレイタイムは左右独立して調整可能。スライドバーでは0~999msecまで1msec単位で可変できるようにしているが、数字を直接打ち込むことで、もっと細かな設定ができる。短いディレイタイムとしては0.01msecでも設定ができる。これってサンプリング周波数44.1kHzでは1サンプル程度の長さになるので最短ディレイ。実際には、こんな設定は使わないけど小数点以下の数字を打ち込み

コンプレッサーについて Javaで自作

イメージ
以前HPで書いた記事を再編集してみた。 コンプレッサーの役目 音量を調整するためのエフェクトである。音量差のバラツキがある録音において、大きな音を小さく抑えて、小さな音を大きくすることで、音量差を小さくし聴きやすくする。 基本原理 仕組みとしては基本的に2段階で調整している。まず大きな音だけを小さくする。次に全体の音量を上げる。こうすることで音量差を小さくし、適正レベルにすることができる。 音量差を少なくすることは良いことか? 実は疑問だった。バンドサウンドとボーカルを考えた場合、ボーカルに音量差があったとする。そうすると小さい声の部分はバンドサウンドに埋もれてしまう可能性がある。これを解決するには、バンドサウンドが小さい声に対応するか、ボーカルの音量をある程度以上保つことになる。でも実際には、演奏で音量のコントロールが絶妙に行えるわけでない。その不足分をコンプレッサーで補うというイメージ。音量がある程度の範囲に納まってくれれば聴きやすくなる。あくまでもコンプレッサーは補正程度の扱いで、これに頼っては不自然になってしまう。 コンプレッサーの操作系 Kjaerhus Audio「Classic Compressor」 フリーのVSTプラグインのClassic Compressorを例に、コンプの標準的なつまみを紹介。 Threshold (スレッショルド 閾値) -40~0dB ここで指定した値を基準にして、大きな音を小さく圧縮する。0dBが録音できる最大音量で、-40dBは小さい音になる。Audacityなどで波形をdB表示にして確認しながら適切なスレッショルドを決めるとよいと思う。 Ratio (レシオ) 1:1~∞:1 スレッショルド以上の大きな音を、どれぐらい小さくするかの割合。∞:1 にすればスレッショルドの以上の音をスパッと切るイメージ。 1:1なら全く変化がないことを意味する。 KNEE (ニー) HARD~SOFT スレッショルド以上になったときに、急激に変化させるか、緩やかに変化させるかを調整する。そのカーブを「ひざ(ニー)」に例えている。 Attack Time (アタックタイム) 0.5~500msec スレッショルド以上になってから何秒後に音を小さくするかを決

EQ(イコライザー) Nyquistで自作

イメージ
SM57,58を補正するためにEQは必須 マイクをSM57,SM58にしたら、中低域盛り上がりの不自然な音になってしまった。単一指向性ダイナミックマイクなのでマイクと音源の距離で周波数特性が変化する。近づくと200Hzを頂点にガンガンと盛り上がる近接効果がある。本来低域ほど盛り上がるのだが、SM57,58の低音は意図的にカットされているため200Hzがピークになるようだ。 下図はSHURE BETA58Aの周波数特性だが、近接効果によってどれぐらい低域が盛り上がるかが分かる。SM58の近接効果の資料が見つからなかったのでBETA58Aを参考にしている。たぶん似たようなもんだと思う。 高域においては、下図のように10kHz以上の高域ががくんと落ちている。これも補正しないと不自然なこもった音になってしまう。 ちなみに下はSM57の周波数特性。SM58とはかなり違う。高域はかなり上まで出ている。低域の落ち方はSM58よりもシャープで、近接効果の出方も違っているように感じた。音も締まった印象がある。当然補正も違ってくる。 マイクと音源の距離を調整することで、ある程度の自然な感じにはできるものの、そもそもフラットな特性にはならない。そこでEQ(イコライザー)が必要になってくる。 Audacity Equalization Audacityをインストールすると標準で入っているEQを試してみる。Audacityの標準エフェクトはVSTに比べ高速に処理ができる。しかし高機能でグラフィカルで今風だが好みじゃなかった。カーブをいじるというのは細かく補正ができる反面、手軽さはない。調整に時間ばかりかかってしまう。再現も難しいし。やたらと設定ファイルを保存するというのも・・・ でも性能はFIRタイプでかなりよいです。 えい自作してしまえ デジタルフィルターの勉強とフーリエ変換をおさらいしてJavaで作ろうかと思ったけど、もっとお手軽なNyquistというものがAudacityでは扱えたので、これを試してみた。 AudacityのプラグインとしてはVSTとNyquistが使える。VSTはDTMの世界では標準的だが、Nyquistはほとんど知られていない音声処理の言語。AudacityはNyquistも一部利用して作