質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

4098閲覧

Swiftで似た音を検知するには

Jidousya_364

総合スコア43

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2017/03/15 07:01

編集2017/03/15 07:21

私はマイクを使って検知した音を使うアプリを作ろうとしています。

https://github.com/ooper-shlab/aurioTouch2.0-Swift
こちらのサイトを参考にマイクを使って音は検知して、FFTしたデータは撮ることができました。

そこからなのですがFFTしたデータを既に保存していたデータと比較して似た音(拍手の音なら、拍手)を検知することができるのでしょうか?
いくつか調べててみたのですが、解決方法は分りませんでした

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode Version 8.2.1 (8C1002)
言語 Swift

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/03/15 07:14

タグは、言語や環境で縛らずに、「アルゴリズム」とか、今流行り(?)の「機械学習」とかの方が良いんじゃないでしょうか?
Jidousya_364

2017/03/15 07:20

ありがとうございます。追記させていただきます
guest

回答1

0

ベストアンサー

具体的なコメントでなくてすみませんが・・・

FFTは周波数のスペクトルを分析する手法ですね。これを音波に適用すると倍音がどのような傾向になっているかがわかりますが、いわゆる音の特性のうち音色が倍音の含まれ具合によって決まるのでFFT結果によって原理的に「音色」が判別可能であると言えると思います。

ただ、ご質問を拝見した雰囲気では「録音した波形のある部分のみをFFT変換した単一の結果」により音の識別をしようとしているように感じられました。もしそうだとすると、それは難しいのではないかと思います。なぜなら音の特徴には倍音特性(周波数特性)以外の要素があると思うからです。

例えば単純に楽器の音を考えてみると、同じ周波数特性を持った波形を再生しても、音の立ち上がり(アタック)や最大振幅からの急激な減衰(ディケイ)やその後のなだらかな減衰(サスティン・リリース)の様子やそれぞれの瞬間に(微妙に?)変化する周波数特性などによってかなり違った音に聞こえます。つまり一般に音を識別するには「定常波を単純に周波数分析しただけでは不十分」であり「時間の経過により変化する周波数特性や音の大きさの変化を含めた特徴」を捉える必要があると思います。拍手も断続的かつアタックが早い特徴などもこみで「拍手」に聞こえるのではないでしょうか。

ご存知と思いますが、音声認識や音の識別を達成しているソフトウェアは存在するのでなんらかの手法はあるはずですね。おそらくそういうものは時間的な周波数特性の変化に着目し多くのサンプルから機械学習的手法で得た「拍手の特徴」といったデータに基づいて識別しているのではないかと思います。つまり「ある単一の音声のサンプル(の周波数特性)」どうしを比較することでは(満足できるようなレベルでの)音の識別は難しいのではないかなと思います。

画像認識なんて同様に難しそうなテーマも最近は多くの方が取り組んでおられるようなので、音声認識も自分が考えるほどには敷居は高くないのかも知れません。とはいえこんなページを見ると「「拍手」「咳、くしゃみ」「笑い声」 「大きな息の音」の識別ができます...さらに多様な音を識別する開発を進めています。」なんて書いてあるので、「拍手」を識別するのも簡単ではなさそうだと思いました。

ちなみに「とりあえずサンプル音の倍音特性のみに着目してどこまで識別できるかやってみる」というのも個人的には面白いと思いました。そういうことであればFFTの結果を用いて「基音に対する倍音の成分の大きさの比率」を比較するという手法が取れそうな気がします。あらかじめ用意したいくつかのサンプルの周波数特性と各倍音の比率の差による評価関数を適当に決めて一致の程度により決めるという感じでしょうか。そういう処理なら比較的簡単にできると思います。少なくとも人間の話声とバイオリンの音などは倍音特性が大きく異なるのでそういうものの識別はある程度できるような気がします・・・

投稿2017/03/15 11:53

編集2017/03/16 07:27
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jidousya_364

2017/03/16 07:52

言われている通り、録音した波形のある部分のみをFFT変換した単一の結果をもとに音の識別をしようと思っていました。 このままでは難しそうなので、言われた通りサンプル音の倍音特性でどれくらいの精度が出るか試してみます。もし厳しそうだったら他の方法を考えてみます。 とても詳しい説明ありがとうございます。音についてあまり理解していない私でも理解しやすかったです。精度が出るようでしたらご報告できたらいいなと思っています。
KSwordOfHaste

2017/03/16 10:29

一つ言い忘れてましたが、FFTの結果は基音に対する振幅の比そのものでなく比率の対数を取って比較したほうがよいのではないかと思います。というのはFFT結果のスペクトルのダイナミックレンジが大きすぎて比較しにくくなる気がするからです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問