オーディオファイル(mp3ファイルなど)内で見つかった「最高の音波の周波数」を特定できるWindowsプログラムはありますか?
たとえば、ファイルDog-Whistle-0を分析し、ファイル内で見つかった最高周波数が約12000 Hzであると判断できる必要があります。
また、Piano.mp3を分析して最高音を判別できる必要があります。
オーディオファイル(mp3ファイルなど)内で見つかった「最高の音波の周波数」を特定できるWindowsプログラムはありますか?
たとえば、ファイルDog-Whistle-0を分析し、ファイル内で見つかった最高周波数が約12000 Hzであると判断できる必要があります。
また、Piano.mp3を分析して最高音を判別できる必要があります。
回答:
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が必要です。
Audacityを試しましたか?Analyze-> Plot Spectrum ...からアクセスできるPlot Spectrumコマンドを含む、かなり洗練された分析ツールを備えたフリーウェアツールです。
MP3圧縮により波形が変更され、アーチファクト/エイリアシングが導入されたため、MP3バージョンのファイルではWAVバージョンと異なる結果が得られることに注意してください。
編集:リンクするサウンドファイルは、この良い例ではありません。より高い周波数のファイルは、人間の聴力に合わせて調整された44.1KHzでのみサンプリングされます(最大で約20KHz)。サンプルレートを上げずに超音波周波数を表すことはできません。
fpeaks
、時間に対して周波数のグラフをプロットする関数があるかどうかを知っていますか?