質問: ### 前提・実現したいこと androidで音声解析を行っていて、周波数を求めているのですが、度数というもの求めることができません。具体的なソースコードをご教授いただけないでしょうか? ### 試したこと 周波数は出せました。100Hz~2000Hzまで取得できるようにしてあります。
回答: もしcoco_bauerさんがおっしゃる度数を求められるような分解能の周波数分析を目的にしているなら(若干蛇足なコメントですが) 音楽でいう度数は半音と全音が入り混じってややこしいので、まずはノート番号を求めるとし、 周波数=f、ノート番号=n、440Hzでn=69と仮定すると `f = 440 * 2^((n - 69) / 12)` ... (ただし`^`はべき乗) ですので、nを左辺に持ってきて周波数fから以下の式でノート番号が得られます。 `n = 12 * log(f / 440) / log(2) + 69` 最初に戻って音楽の度数を考えると、ベースになる音程のノート番号を60とすれば ノート番号60=完全1度、ノート番号61=短2度, ノート番号62=長2度... のようにする感じでしょうか・・・ 自分は度数を和音の表現でしか見たことがないので、上記のような表現があっているかはよく分かりません。もし音名(国際式)を求めるなら、ノート番号を整数にできたものと仮定し、以下のように求めることができます。 ``` String[] names = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; int noteNumber = ...; // ノート番号を整数として求められたと仮定 int oct = (int)Math.floor((noteNumber - 12) / 12); String noteName = names[noteNumber % 12] + oct; // 音名 ``` この質問を最初見たとき、度数って音の大きさか、スペクトルの角度か何が正解なのだろうと思ってました・・・