[解決済み] Pythonによるピッチ検出
2022-02-10 16:48:44
質問
私が取り組んでいるプログラムのコンセプトは、特定の周波数(人間の音声周波数80-300hz)を検出し、データベースからチェックすることによって、文章のイントネーションを表示するPythonモジュールです。SciPyを使って音声ファイルの周波数をプロットしているのですが、ピッチを分析するために特定の周波数を設定することができません。どうすればよいでしょうか?
より詳しく 音声のパターン(例:上昇、下降)を設定し、プログラムがサウンドファイルが特定のパターンに従っているかどうかを検出できるようにしたいのですが、可能でしょうか?
どのように解決するのですか?
次のことを試してみてはいかがでしょうか。人間の声にも300Hzをはるかに超える倍音があることはご存じだと思います。それでも、オーディオファイルにウィンドウを移動させ、最大パワー(下図)の変化や、ウィンドウ内の周波数のセットを見ることができます。以下のコードは、直感的に理解するためのものです。
import scipy.fftpack as sf
import numpy as np
def maxFrequency(X, F_sample, Low_cutoff=80, High_cutoff= 300):
""" Searching presence of frequencies on a real signal using FFT
Inputs
=======
X: 1-D numpy array, the real time domain audio signal (single channel time series)
Low_cutoff: float, frequency components below this frequency will not pass the filter (physical frequency in unit of Hz)
High_cutoff: float, frequency components above this frequency will not pass the filter (physical frequency in unit of Hz)
F_sample: float, the sampling frequency of the signal (physical frequency in unit of Hz)
"""
M = X.size # let M be the length of the time series
Spectrum = sf.rfft(X, n=M)
[Low_cutoff, High_cutoff, F_sample] = map(float, [Low_cutoff, High_cutoff, F_sample])
#Convert cutoff frequencies into points on spectrum
[Low_point, High_point] = map(lambda F: F/F_sample * M, [Low_cutoff, High_cutoff])
maximumFrequency = np.where(Spectrum == np.max(Spectrum[Low_point : High_point])) # Calculating which frequency has max power.
return maximumFrequency
voiceVector = []
for window in fullAudio: # Run a window of appropriate length across the audio file
voiceVector.append (maxFrequency( window, samplingRate))
さて、声のイントネーションによって、最大出力周波数が変化することがありますが、これを登録し、あるイントネーションに対応させることができます。これは必ずしも常に正しいとは限りませんし、多くの周波数のシフトを一緒に監視する必要があるかもしれませんが、これで始めることができるはずです。
関連
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】C言語のライブラリをPythonでラッピングする。C、Cython、またはctypes?