オーディオファイル内の最高音を決定できるプログラムはありますか?


14

オーディオファイル(mp3ファイルなど)内で見つかった「最高の音波の周波数」を特定できるWindowsプログラムはありますか?

たとえば、ファイルDog-Whistle-0を分析し、ファイル内で見つかった最高周波数が約12000 Hzであると判断できる必要があります。

また、Piano.mp3を分析して最高音を判別できる必要があります。

回答:


13

Rはクロスプラットフォームであり、無料/オープンソースです。

それをロードし、tuneRおよびseewaveライブラリをロードします(まだインストールされていない場合は、パッケージマネージャーからインストールします)。

library(tuneR)
library(seewave)

次に、MP3またはWAVファイルをロードします。

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

次に、スペクトルとそのピークをプロットしましょう。

fpeaks(meanspec(w), nmax=1)

結果:

数値結果:

fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859

上記は非音楽データでのみ機能します。音楽の周波数を分析すると、関連する楽器に応じて、最高周波数が常に約12〜20 kHzになることがわかります。ただし、楽器で演奏されると音符は複数の周波数で構成されるため、この最高周波数では演奏されている音の推定値は得られません。

これは楽器のいわゆる「音色」であり、フルートによる440 HzのAには、エレキギターで演奏されるAと比較して異なる周波数成分が含まれることがわかります。

最善の策は、スライディング時間ウィンドウで周波数ピークを調べて支配的な周波数分析を実行し、最も高い周波数が発生する場所を確認することです。

ただし、「時間の経過に伴う頻度」などはありません。特定のスライディング時間ウィンドウでのみ平均(または支配的な)周波数をプロットできます。Seewaveは、時間枠の選択に関してかなりの数の機能を提供しますが、かなり複雑になります。

使用できます

s = specprop(meanspec(w, from=10, to=11)) 

10〜11秒のスペクトルプロパティを取得し、特定の時間ウィンドウの重心周波数または平均周波数を取得するか、s$centroidまたは呼び出しs$meanます(ただし、1秒はオーディオ分析では非常に大きくなります)。

Waveファイルで44.1 kHzのサンプリングを使用している場合、それをダウンサンプリングして、計算の労力を、たとえば16 kHzに減らすことができます。

w = downsample(w, 16000)

ただし、ナイキストの定理によれば、現在表現できる最大周波数は8 kHzです。

また、ピッチ検出ソフトウェアを探すこともできます。このように、MATLABが必要です。


ところで、代わりにfpeaks、時間に対して周波数のグラフをプロットする関数があるかどうかを知っていますか?
12

私の更新を参照してください。それほど些細なことではありません。私はオーディオの仕事をしていませんが、周りにもっと良いものがあるかどうかを知るために、申し訳ありません。
slhck

8

Audacityを試しましたか?Analyze-> Plot Spectrum ...からアクセスできるPlot Spectrumコマンドを含む、かなり洗練された分析ツールを備えたフリーウェアツールです

スクリーンショット

MP3圧縮により波形が変更され、アーチファクト/エイリアシングが導入されたため、MP3バージョンのファイルではWAVバージョンと異なる結果が得られることに注意してください。

編集:リンクするサウンドファイルは、この良い例ではありません。より高い周波数のファイルは、人間の聴力に合わせて調整された44.1KHzでのみサンプリングされます(最大で約20KHz)。サンプルレートを上げずに超音波周波数を表すことはできません。


うーん、ファイルPiano.mp3では動作しないようです。私にとっては、10121 Hz(D#9)screenshoot.me/uZZ2N0を示していますが、ピアノの最大のキーはC8(4186Hz)であるため、これはほとんどありません。何か間違ったことをしていますか?
12

3
@Pacerierいいえ、しかし質問を少し変更しました。犬のホイッスルのサンプルは、スペクトル内で最高のピークを持つ周波数も最高周波数であると同時に支配的な音であるため、簡単に識別できます。音楽の場合、楽器で演奏される音符は複数の周波数で構成されているため、最高周波数は必ずしも最高音ではありません。
slhck

@slhck Icは、私たちは考えていただろうと思い、それのように見えますが、それほど単純ではありません..我々は周波数を持っていた場合には注意を
Pacerier

@Pacerier:サイズをより高い値に設定すると、より正確な結果が得られ、一部の高調波が除去される可能性があると思います。
ジェームズP

2
@Pacerierいいえ、実際にはそれほど単純ではありません。ピッチ検出では、最初に波形を周波数スペクトルに変換し(高速フーリエ変換)、次にフィルターを適用します(主にローパス)、さらにもう1ラウンドのフィルターを適用する必要があります。時間の経過とともにピッチを追跡するツールを見つけない限り、探しているものは本当に難しいでしょう。Melodyneのようなボーカル補正ツールを調べることができます。
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.