Fview & FviewD 開発日誌
2月22日
FviewD β版 Ver.1.12
実行ファイルのみ。フォントファイルなどは正式版 Ver.1.00のものを使用してください。
・自動マーク機能をつけた。
・ピーク強調機能をつけた。10/22に「ヒューリスティックな手法はなるべく使わない」
と書いたが、利便性のためにはやむを得ない。打楽器対策に効果的。
2月1日
FviewD β版 Ver.1.09
・「設定を保存」で描画ツールの状態も保存できるようにした。
・グラフの罫線の明るさをカスタマイズできるようにした。
・要望により、音階オフセット(音階をずらして表示する機能)を付けた。
キーを変えて採譜する時のため。
1月17日
FviewD β版 Ver.1.07
再生中に CPU使用率が100%になる不具合を直す。
1月11日
FviewD β版 Ver.1.05
描画ツールにUndo(Uの字のアイコン) を追加。
春まで実装しないと言ってた矢先にプログラムしてしまった。3連休の誘惑に負けた。
FviewD とは関係ないが cw2wavの改良も行った。こちらは Vectorに登録申請中。
2004年1月5日 〜頂いた要望
・描画ツールにUndo機能(うんどうではないw)
アンドゥ、やり直し機能。
私は今まで一度もUndoの実装をしたことがない。どう実装しようかあれこれ考えるのは楽しい。
・自動的に解析データから音符に相当する横線を描く機能
白紙の状態から描画ツールで音符を書いていくのは骨が折れるので、
自動的に音符の候補をマークする機能。
要するに自動採譜。もちろん完全な採譜は無理で、間違いを含むだろう。
春まで忙しいので、実装はそれ以降に。バグ報告、要望は引き続き募集中。
12月13日
FviewD 正式版 Ver.1.00
描画ツールにクォンタイズ機能を追加。 fvc2mid を付属。
タイトルを「音階が見えるwavプレイヤー」から「採譜のための〜」に変える。
しばらく開発を休止します。バグ報告、要望などは歓迎します。
12月6日
描画データから midファイルを生成するツールを来週公開予定。
11月30日
FviewD β版 Ver.0.90
・ユーザーの描いた横線に合わせて Midiが鳴るようにした。
・MIDIの設定を追加。
・描画ツールにアイコンを追加。
1、選択した2本の縦線と等間隔の線を左側に描画。縦線を量産できます。
2、選択した2本の縦線と等間隔の線を右側に描画。
3、これがOnの時、描画データに合わせて Midi発音。
4、これがOnの時、ユーザーの描いた横線を表示。
5、これがOnの時、ユーザーの描いた縦線を表示。
・再生中にVキーを押すと、直前のユーザーの描いた縦線まで巻き戻す機能を追加。
なぜ Vかって? 巻き戻しに割り当てた Bの隣で、かつ押しやすいから。
11月22日
バグ報告が無いようなので、FviewD Ver.0.80 をβ版から正式版にした。
11月15日
FviewD β版 Ver.0.80
・描画ツールを実装した。
11月8日
FviewD β版 Ver.0.70
・11/4 のバグを修正
・トラックバーを追加
・音階色別表示を実装
・設定を保存できるようにした (iniファイルの処理)
・xp で下の方が切れて表示される報告を受けたので、ボタン類の配置をそれぞれ 6ピクセル上にずらす。
xp はウィンドウに淵がついているんで、あまり下のほうに配置しちゃダメなんだなぁ。
個人的には xpのデザインは嫌いだ。
・感度・色調整に関する定数を変更。以前のバージョンと同じ位置につまみを設定しても
同じように表示されませんのでご注意ください。
11月4日 〜バグ発見
連休明けの今日、学校のPCで動作確認。2000で動いた。しかし fviewfont.bmp が無い時に、
グラフ上を左クリックするとメモリ系のエラーがでるバグを発見。まぁ、これはすぐに直せる。
やるべきこと、要望、当面の課題を箇条書きにする。
・トラックバー(Mediaplayerについてるやつ)によって再生位置を表示・設定できるようにする
・設定を保存できるようにする iniファイルの処理
・グラフ上に縦線が描き込めるようにする
・音階ごとに色別表示(音のレベルは輝度で表現)
・グラフ上にメモ、お絵かきできるようにする
・打楽器対策、倍音対策。
11月2日 〜FviewD 初公開 (0.60)
性能重視版 FviewD の実装がほぼ完了。β版として公開。
二日間、プログラム⇔音楽を聞きながら白線を見つめる を繰り返していたら頭が痛くなった。
文化の日はゆっくり休もう。
10月26日 〜DFT部分のプログラムとテスト
お隣の音階のsin波が-40dB以下になるようDFTのフレーム長を設定した。ハミング窓使用。
各音階のsin波に対する各DFTの出力の図。横軸音階、縦軸パワー。
次に計算時間を見積もる。前回時間は気にしないとは言ったが、
1週間とか かかるようでは絵に描いた餅になってしまうから。
25ms間隔で3分の信号を解析するとして、180*1/0.025 = 7200 回ループを回した。Pen4 1.5G
約70sで処理が終わった。思ったより早い。70sくらいなら息だって止めていられる。いける。
10月22日 〜納得いかん、やり直し
もっとくっきり・はっきり見えないものか。まだ改善の余地がある気がする。
今までは解析の時間を気にするあまり、解析性能を一部犠牲にしてきた。
そこで今度は解析速度を気にせず、最善を尽くしてみようと思う。それでどこまで見えるか知りたい。
(今までの Fview は高速版として引き続き公開します)
改良予定事項
・窓幅を音階に対して滑らかに変化させる。
今までは FFTで高速に解析するため、窓幅を左の図のように段階的に変化させていた。
それを右の図のように滑らかに変化させる。そのため FFTではなく DFTを使う。
・フレーム間隔(解析の間隔)を現行の 50msから、25ms か 20msにする。
・ヒューリスティックな手法はなるべく使わない。最終手段とする。
今まではクリーンアップという名の機能でスペクトルのピーク強調をして
見た目をよくしてきたが、そういうことはなるべくしない。
実装予定日時
11月中。休日がたくさんあるので、なんとかなるだろう。
↑ここから FviewD
↓ここまで Fview
4月29日
Fview 正式版 Ver.1.47 公開
グラフに縦線を描けるようにする。β版の公開を停止。
4月26日
Fview β版 Ver.1.45
音階の表示範囲を5音低音側にずらす。ラウドネス補正なども少しだけ修正。
再生中にトラックバーの位置を変更しようとすると、うまくいかないことがある(原因不明)
そろそろ Vector の方も更新しとこうかな。
3月30日午後11時
Fview β版 Ver.1.41
音階、周波数、ノート番号などのヒント表示ができなくなっていたバグを修正。
3月30日午後10時
Fview β版 Ver.1.41
トラックバーを付けた。巻き戻し、早送りのステップを変えられるようにした。
右クリックで変更。指定できるのは、0.5, 1, 2, 3, 5, 10, 20, 30, 50秒。
2003年2月16日
Fview β版 Ver.1.40
終了時に解析データを Fview.tmpファイルに残すようにして、次回起動時に解析の手間がかからないように変更。
又、前回終了時の再生位置も再現できるようにした。
12月21日
正式版を Ver.1.39にバージョンアップ。これに伴いβ版の配布を停止。
12月15日
Fview β版 Ver.1.39
ある特定の条件でメモリ関連のエラーが出るバグを修正。このバグはかなり昔のバージョンからあったみたい。
12月14日
Fview β版 Ver.1.38
11.025, 22.05kHzのファイルに対応。作業ファイル fview.tmp を削除するのを忘れていたのを修正。
高調波除去に挑戦してみる。ピアノの音でテスト 画像
消し残りが多いし、途中から基本周波数の2倍の倍音をピッチと間違って認識している。
原因は途中から基本周波数より2倍の倍音のレベルの方が大きくなったから。
共鳴の関係によっては、こういうケースもあるようだ。困った。
そろそろ Vectorの方のもバージョンアップしとこうかな。
11月30日
Fview β版 Ver.1.35
とりあえず 22.05kHzの wavファイルに対応した。またクリーンアップなる怪しい機能をつけた。
打楽器によるノイズ(下の図の縦じま)に効果がある。
11月22日
円周率の方はケリがついた(正確に言うと、飽きたw)ので、Fviewの開発に戻ることにする。
次期バージョンアップの予定
・22.05kHzのファイルに対応する
テレビの音を録音する時、私は 22.05kHzでとるので。この修正は簡単。
・高調波除去
先延ばしにしてきた高調波除去に取り組む。ちょっと試してみたい考えがある。
ケプストラムは使わないつもり。ケプストラムを計算しようとすると今の倍くらい時間がかかるから。
そうなったら、ユーザーが我慢できないだろう… 嘘です、私が我慢できん(笑
ちなみに私が高調波除去って呼んでいるのを、ちまたではピッチ抽出と言うようだ。
高調波除去は電気、無線屋の言葉だった。
10月19日 〜円周率
FFTのプログラム書いてたら、またπの計算がやりたくなってきた。(πの計算とFFTには関係がある)
というわけで、しばらくわき道にそれます。
10月7日 〜44100
分解能チェック用 wavファイルを生成するプログラムの配布を開始。
これで、Fview の分解能のチェックが可能。また音階 A4 を境に、フレーム長を変えているのも確認できるはず。
このプログラムを作っていて気づいたこと ― 44100 は1,2,3,4,5,6,7,9,10で割り切れる。
44.1k ってキリのいい数だったんだ。
9月28日 〜2つの等ラウドネス曲線
等ラウドネス曲線は、ロビンソンのやつとフレッチャーのやつの2種類あるらしい。
フレッチャーのやつのほうが、近似しやすそうだったが、
ロビンソンらの実験の方が正確ということなので、面倒だがこれを近似した。 図
こうしてみると、私が対象としている周波数 (80Hz 〜 5kHz)だけでも 20dB 近く差があることがわかる。
9月21日 〜等ラウドネス曲線
低音が強く表示され過ぎている気がする。聴覚の特性を考慮しないとだめかな。
等ラウドネス曲線の適当な近似式が知りたい。
9月17日 〜ユニゾンみっけ
シーケンサーソフトで MIDI ファイルの中身を見てたら、ユニゾンを見つけた。画像
それほど珍しいものでもないらしい。
メモ A4 = 440Hz = ノート番号 69 (45H)
9月14日 〜高調波除去
高調波を消す方法を考えているが難航している。難しい理由は↓
■楽器間に相関
当然だが音楽の場合、各楽器の演奏に相関がある。同じタイミングで鳴ったり消えたり。
■基本波と高調波のレベル比が時間とともに変化する
オルガンみたいに音の大きさが一定の楽器はいいけど、ピアノのように音が減衰する場合、
周波数が高い振動程、空気抵抗が大きいため高次の波の減衰の方が早く、低次の方が遅い。
つまり、基本波と高調波のレベルの比が時間とともに変化する。
これはやっかいだ。
■ユニゾン
同じ高さのオクターブ違いの音で演奏する、ユニゾンというものがあるらしい。
無理だろ… 識別不能
てきとーに if-then rule を並べるくらいしか思いつかん。
9月5日
グラフィックの高速描画と再生ができるようになってアプリらしくなった。
そこでまだ不完全ではあるが、ソフトを公開してみようと思う。
現在、ソースの点検やドキュメントの用意をしているところ。9月中旬には公開できるだろう。
8月31日 〜FFT二刀流
8月28日のフレーム長の異なるFFTを2つ使う方法を実装してみた。
フレーム長 8192 で 82.41 〜 415.30Hz を解析
フレーム長 4096 で 440.0 〜 5587.6Hz を解析
半音づつ周波数を上げたサイン波で分解能チェック → 画像
良いのか、悪いのか自分でも分からん
まぁ、見た目の分解能は、信号レベルと色との対応関係でも変わってしまうし 捏造画像(^^;
この部分はユーザーが変えられるようにして、自分で調整してもらおう。
最後にきれいな画像を1枚。 画像
8月28日 〜FFTのフレーム長
※以下の文章は、サンプリング周波数 44.1kHz を仮定して書かれています。
FFTのフレーム長について再考してみる。
解析する最も低い音階を 55Hz(ラ)とした場合、その次の音階の周波数は 58.27Hz なので、
周波数分解能は最低でも 3.27Hz 必要である。
この分解能を得るにはフレーム長 16384 以上のFFTを使用しないといけない。
フレーム長 16384 は、時間にすると 370ms になる。
0.37秒って音楽の時間変化より長いよぉ。(すごいスローテンポの曲を除く)
こんなんで解析しても、時間分解能に関して不満がでるのは確実だろう。
そこで、いろいろ考えた結果フレーム長 4096 と 8192 のFFTを2種類実行することにした。
周波数が低いところは 8192 で、周波数が高いところは 4096 で解析するのだ。
周波数が低いところは周波数分解能優先、高いところは時間分解能優先ということ。
周波数が高い方では、音階間の周波数の差が大きいから周波数分解能が落ちても問題ない。
本当はフレーム長 16384 のFFTもやりたいところだが、さすがに3個もやると重そうだ。
こういった周波数分解能と時間分解能のトレードオフを数学的にちゃんとできるのが、
ウェーブレット変換らしい。
8月2日
夏休みになったので、いい加減このプログラムを作り上げてしまいたいところ。
数学的厳密さより、聞いた感じと一致する表示を目指しているので、
聴覚特性に合わせてFFT後のデータをいじるかもしれない。例えば、
・耳の周波数特性
・マスク効果(大きな音の周波数近傍では、感度が下がるというやつ)
・ピアノのような減衰音の場合、物理的な音が消えた後も鳴っているように聞こえる現象があるらしい
などを考慮するかも
とりあえず、やらねばならぬ事をリストアップしておこう。
・FFTの高速化、窓幅の選定
・wavファイルの再生機能
・グラフィックの高速描画、再生しながら画像スクロールしたい
・高調波消したい…
2002年7月以前
だぁ!だぁ!だぁ!サントラより「未夢は転校生」開始〜20秒
横軸は時間で、下の一目盛りは1秒、全部で20秒です。
縦軸は周波数(音階)で、音階ごとに黒又は灰色の線で区切られています。
色付けしてみました
だぁ!だぁ!だぁ!サントラより「ハートのつばさ」開始〜20秒
やっぱり、ぼやけてるよぉ。もっとシャープにしなければ。
- 戻る