- 締切済み
高速フーリエ変換を用いての周波数(音声)分析
高専の学生です。 今回、研究でとりこんだ音楽を解析して採譜(希望としては楽器ごとに) するという研究を行おうとおもっているのですが、解析の方法が 多数あってとりこんだ音楽をどのような解析方法で解析するか等に悩んでいます。 一応、一通りC言語の勉強してき、フーリエ変換の基礎知識があるので C言語による高速フーリエ変換を用いて解析をしようとおもっているのですが、どのようにすればよいか全くわかりません。 [GSL]というライブラリに高速フーリエ変換関数が組み込まれているのでこれはつかえばいいのでは?とはおもっているのですが、設定方法もいまいちわかりません。 わからないことだらけなのですが、どうか御指南いただけないでしょうか。よろしくお願いします。 それと、もっと良い解析方法があるのならばそれもお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- foobar
- ベストアンサー率44% (1423/3185)
#3です。 まずは、 採譜をするための情報を収集するときに、 ・どんな情報が必要か、それぞれの優先順位(たとえば、周波数分解能と時間分解能のように相反するものがあります。その場合、どちらにどれくらい重点を置くか、は重要になります) ・考えている解析方法(現時点ではFFT)で、その情報は採集可能か。 ・その際に、留意することはあるか、何か。(たとえば、FFTだとサンプリング周波数、サンプリング期間、もし使うならどんな窓関数を使うか、といったことに関連します。) というのあるていどまとめる必要があるかと思います。 もちろん、とりあえず、手元のデータにFFTをかけてみて、様相を見てみる、というのもありかと思いますが、その後には上記の事項が必要になってくるかと思います。
- zwi
- ベストアンサー率56% (730/1282)
回答者NO.2のzwiです。 フーリエ変換で得られる情報は周波数毎の音の強さですから、主音と倍音を見分ける基準が音の強さしか無いのが問題かなと思います。 音の大きめの楽器と音の小さめの楽器が混じると人間の耳なら聞き分けますが、音の大きな楽器の倍音より小さな音の楽器の主音がフーリエ変換の情報だけで自動で見つけらるアルゴリズムがあるのか疑問ですよね。 >しかし、同じ音を同じタイミングでだしても、そのあわさった音を2,3秒くらい流せば。 時間軸で処理していく場合の問題は、電子音ではない楽器は音の減衰や反響音の変化、あるいはビブラートなど一時として同じ周波数で奏で続けてくれない物です。変化していく音を追いかけるとして、別の音と周波数が交差したらとか、主音と倍音の立場が逆手したらとか。色々やる前から疑問が出てきます。 ですので、フーリエ変換はあくまで入り口でフーリエ変換した情報を収集して、どんな手が打てるか考えていくのが研究になるのかなと思います。
お礼
やはり、交差している変化していく音をおっかけるのは難しいのですね・・・。 基本的に音の強さを見分けるフーリエ変換以外の 解析方法はないものでしょうか。。。
- foobar
- ベストアンサー率44% (1423/3185)
(ご自身の研究テーマですよね?ご自身でそれぞれの解析方法の得失を評価されて、目的にあったものを拾い出すか、新たに考案される必要があるかと思いますが、、) 採譜に使うということは、単に周波数分解をすればいいというわけでなく、時間的な分解も必要になるかと思います。そのあたりも考慮する必要があるかと思います。(フーリエ変換は、原則として時間方向の分解能はないので、、)
お礼
ご回答ありがとうございます。 今回の研究ですが、音の解析にはあまり重点はおいてなく 採譜技術のほうに重点をおいているので 音の解析は既存の解析方法でいいかとおもったのですが その解析方法うんぬんによって後の重点を置いている 採譜技術に色々と影響してくるのではないかとおもって 質問しました。(ちゃんと記述するべきでした、すいませんm(_ _)m) それと音楽というのもほぼ希望的な最終目標なので とりあえずは 単音→和音→ソナタ→ボーカル無し二つ以上の楽器を使用した音楽→音楽 という手順を踏んでいこうとおもっているしだいです。 (さいごの音楽まではたどりつけないでしょうが^^;) ソナタまではどうにかいけそうですが ボーカル無し音楽からは二つ以上の楽器がはいるので 楽器の特徴を表す倍音をつかって 音の長い数点をとって判別しようかと考えています。
- zwi
- ベストアンサー率56% (730/1282)
高速フーリエは専門でも無く詳しくも無いんですが、音楽を周波数に分解したところで楽器が判別できないのでは?と思います。 それどころか主旋律と福旋律を区別することさえ困難かと。 主旋律だけの音楽(単独アカペラや鼻歌)なら採譜は高速フーリエで可能だと思われますので、その方向で検討されてはいかがでしょう? 困難だと思われる事柄を以下にあげておきます。 ・違う楽器が同じ周波数で演奏されることなど当たり前にあるので、楽器の区別が周波数だけでは出来ない。どちらかと言うと「音紋」とかを使った音声認識に近い技術が必要。 ・楽器の区別が出来ないのと同様にボーカルと楽器の区別も困難。 ・1つの楽器でも和音や倍音成分の分析などはフーリエ変換だけでは困難かも知れません。
お礼
ご回答ありがとうございます。 最初の質問で足りない部分を上に書きました、すみません;; やはり二つ以上の楽器が演奏されている音楽を判別するのは 困難なのでしょうか・・・。 しかし、同じ音を同じタイミングでだしても、 そのあわさった音を2,3秒くらい流せば 倍音の違いでみわけられるのではないかとおもったのですが(そんな音楽ほとんどないですが^^;) やはりまだ考えが甘いようです。 これについては研究を進めながら熟考していきたいとおもいます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
Cで書かれた高速フーリエ変換ならネット検索すればいくらでも見つかります。
お礼
ご回答ありがとうございます。 URL先をよくみて解析に役立てたいと思います。 ありがとうございます!!
お礼
度々回答ありがとうございます。 ピアノソナタのような一つの楽器で演奏された音楽を 周波数分解能のよいハミング窓で周波数成分を検出しようと いうところまでは自分の中でおぼろげながらあるのですが やはり、FFTでは二つ以上の楽器が演奏されている音楽の判定には つかえないようですね・・・。 仮にですがその二つの楽器がわかっていて 二つの楽器の倍音の推移が判明して 時間分解能を重点に置いた場合 多少でも二つの楽器の音を追いかけることは不可能なんでしょうか?