コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
はやピー ◆cNXcKm243Rna
2019/5/5 17:07
質問
マイクについて
どうも
はやピーです
いま、マイクを使ったやつを作っているのですが、マイクから音階を認識できるようにしたいんですよね
http://wiki.hosiken.jp/petc3gou/?Mame%2FMic

http://wiki.hosiken.jp/petc3gou/?Toukou%2FHUMMING%20CONVERTER
を改造してもわけわかめ
詳しい人、教えてください

コメント

アバター
hanzo 2019/5/6 9:16 ◆A6odzB/cEbps
音階は、その音の主要な周波数で決まります。時報の低い方の音は440Hzであり、音階で言うと、オクターブ3の「ラ」です。また音階が半音上がると、周波数は2の12乗根倍になり、1オクターブ(12半音)上がると、2の12乗根の12乗倍、つまりちょうど2倍になります。2の12乗根と言うのが分かりにくい場合は、
http://wiki.hosiken.jp/petc3gou/?Toukou%2F%C0%E4%C2%D0%B2%BB%B4%B6%A5%DC%A5%A4%A5%B9%A5%C8%A5%EC%A1%BC%A5%CB%A5%F3%A5%B0
にある表をご参照ください。
アバター
hanzo 2019/5/6 9:28 ◆A6odzB/cEbps
そもそも「その音の主要な周波数」とは何か?ですが、世の中のすべての音は、あらゆる周波数の正弦波の集まりである、と言う考え方があり、コンピューターを使って、音の中にどの周波数の正弦波がどのくらいの大きさで含まれているのかを計算で求める「高速フーリエ変換」と言うアルゴリズムがあります。
「高速フーリエ変換」は、「高度サウンドユニット」があれば、より速く簡単にできますが、「高度サウンドユニット」がなくてもできないことはありません。拙作「ハミングコンバータ」でも、「高度サウンドユニット」なしで「高速フーリエ変換」を行っています。
「ハミングコンバータ」では、「高速フーリエ変換」によって、最も大きな正弦波の周波数を求め(変数Fにその周波数が格納される)、前述の表と照合して、音階を求めています。
アバター
はやピー 2019/5/6 16:56 ◆cNXcKm243Rna
高速フーリエ変換...
では、リアルタイムで高速フーリエ変換をする(求める)プログラムの例があればとても助かります
できますかね
わかりやすい説明、ありがとうございます。
アバター
hanzo 2019/5/6 18:37 ◆A6odzB/cEbps
高速フーリエ変換を行うには、2の累乗個のサンプリング(録音)データが必要です。例えばサンプリング周波数8180Hzで2048個のサンプリングデータを集めるには、2048÷8180≒0.25秒間の録音時間が掛かります。録音が終わらなければ高速フーリエ変換を開始できず、あまつさえ高速フーリエ変換そのものにも一定の時間が掛かるので、厳密な意味でのリアルタイム、と言うのは、とりわけプチコンでは難しいのですが、録音時間を極力短くすることで、録音→高速フーリエ変換→録音→・・・のサイクルが速く回り、リアルタイムに近づけることはできると思います。
アバター
hanzo 2019/5/6 19:12 ◆A6odzB/cEbps
さて、高速フーリエ変換の実例について、「ハミングコンバータ」で説明したいところなんですが、なにぶん、かなり昔に行き当たりばったりで作ったプログラムなので、変数の意味とかを失念してしまっておりまして・・・恐縮です。
ものすごくざっくり言えば、配列変数SMPRに、サンプリング周波数8180Hzで、1024個または2048個のサンプリングデータを格納し、高速フーリエ変換を行うことで、配列変数DSPに、どの周波数の正弦波がどのくらい含まれているかの情報(パワースペクトル密度)を格納します。
配列変数DSPの要素数は、サンプリングデータ数と同じ(1024個または2048個)で、0Hzからサンプリング周波数(8180Hz)を等分に分けたデータが入っています。要素数が1024個のとき、DSP[10]は、10×8180÷1024≒79.9Hzの正弦波のパワースペクトル密度を表します。
なお、高速フーリエ変換の性質上、DSPの半分より上の要素(要素数が1024個のときのDSP[512]〜DSP[1023])は、それより下の要素を対称にコピーしただけのもので、情報としては意味がありません。要するに、サンプリング周波数の半分より上の周波数の情報は、正しく取得できません。このことを「サンプリング定理」と言います。
アバター
こういち 2019/5/6 19:19 ◆ou0jbJnEJ0Kb
基本波を取り出すだけならローパスフィルタを掛けまくるだけでも良さそうな気がする(詳しくは知らんけど)
アバター
こういち 2019/5/8 23:50 ◆ou0jbJnEJ0Kb
ただ、ローパスフィルタよりも高速フーリエ変換の方が速い。
フィルタの実装方法にもよるけど…

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -