1. カメラ
  2. カーオーディオ・エレクトロニクス
  3. ホームオーディオ
  4. パーソナルオーディオ
  5. テレビ
  6. スマートホーム
  >> 電子技術 >  >> パーソナルオーディオ >> ミニディスクプレーヤー

ジェネレーターを使用してサウンドウェーブグラフィックを作成するにはどうすればよいですか?

単一のジェネレーター関数を使用して(PNGを生成する単一のPython関数など)、 * True * Sound Waveグラフィックを直接作成することはできません。 音波は本質的に一時的なデータです(圧力は時間とともに変化します)。グラフィックは空間表現です。 *Sound Wave Data *を生成し、そのデータを処理して視覚表現 *を作成する必要があります *。

Pythonを使用してこれを行う方法は次のとおりです。サウンド生成と画像作成のためにライブラリを活用します。

1。サウンドウェーブデータを生成します:

この部分は、音波を表す数値データを作成します。数値計算には「numpy」、さまざまな波形を生成するために「scipy」を使用します。

`` python

npとしてnumpyをインポートします

pltとしてmatplotlib.pyplotをインポートします

scipy.io.wavfileをwavとしてインポートします

Scipy.Signal Import Sawtooth、Squareから

パラメーター

頻度=440#Hz(A4ノート)

持続時間=2#秒

sample_rate =44100#hz(標準オーディオレート)

振幅=0.8#クリッピングを避けるために1未満に保ちます

時間ベクトル

t =np.linspace(0、持続時間、int(sample_rate * duration)、endpoint =false)

波形(Sine、Square、Sawtoothなど)を選択します

#waveform =np.sin(2 * np.pi *頻度 * t) *振幅#sine wave

#waveform =square(2 * np.pi *頻度 * t) *振幅#正方形波

波形=sawtooth(2 * np.pi *頻度 * t) *振幅#sawtooth wave

#optional:ノイズを追加します

ノイズ=np.random.normal(0、0.1、len(波形))

波形 +=ノイズ

クリッピングを避けるために正規化(オーディオ出力にとって重要)

波形=波形 / np.max(np.abs(波形))

#optional:WAVファイルとして保存します

wav.write( "output.wav"、sample_rate、waveform.astype(np.float32)))

`` `

2。グラフィックを作成:

この部分は、生成されたサウンドウェーブデータを取得し、「Matplotlib」を使用してプロットします。

`` python

波形をプロット

plt.figure(figsize =(10、4))

plt.plot(t、波形)

plt.xlabel( "time(s)")

plt.ylabel( "amplitude")

plt.title( "sound waveform")

plt.grid(true)

plt.savefig( "sound_wave.png")#save as png

plt.show()

`` `

完全なコード:

`` python

npとしてnumpyをインポートします

pltとしてmatplotlib.pyplotをインポートします

scipy.io.wavfileをwavとしてインポートします

Scipy.Signal Import Sawtooth、Squareから

パラメーター

頻度=440#Hz(A4ノート)

持続時間=2#秒

sample_rate =44100#hz(標準オーディオレート)

振幅=0.8#クリッピングを避けるために1未満に保ちます

時間ベクトル

t =np.linspace(0、持続時間、int(sample_rate * duration)、endpoint =false)

波形

を選択します

波形=sawtooth(2 * np.pi *頻度 * t) *振幅

#optional:ノイズを追加します

ノイズ=np.random.normal(0、0.1、len(波形))

波形 +=ノイズ

クリッピングを避けるために正規化

波形=波形 / np.max(np.abs(波形))

#optional:WAVファイルとして保存します

wav.write( "output.wav"、sample_rate、waveform.astype(np.float32)))

波形をプロット

plt.figure(figsize =(10、4))

plt.plot(t、波形)

plt.xlabel( "time(s)")

plt.ylabel( "amplitude")

plt.title( "sound waveform")

plt.grid(true)

plt.savefig( "sound_wave.png")

plt.show()

`` `

このコードは次のとおりです。

1.鋸歯状の波を生成します(これを「Scipy.signal」関数を使用して、サイン、スクエア、または他の波形に簡単に変更できます)。

2.オプションでノイズを追加して、より現実的にします。

3.波形を正規化して、クリッピングを防ぎます。

4.オプションで、WAVファイルとして保存します。

5.時間の経過とともに、音波の振幅のPNG画像を作成して保存します。

必要なライブラリを忘れずにインストールすることを忘れないでください:「numpy」、「matplotlib」、および「scipy」。 PIPを使用してインストールできます: `PIPインストールnumpymatplotlib scipy`