Python による音楽の簡単な可視化 - 抽出スペクトル法

3e9cb90cd703152805a8397e7b2245b1.png

いくつかの音楽ソフトウェアのスペクトル効果がどのように作られているのか、なぜそれがとても美しいのか疑問に思ったことはありませんか? 自分で音楽のスペクトルを抽出して視覚化してみたいと思ったことはありませんか? 今日は、最後の音楽編集操作を組み合わせてみましょう。

Python編集音楽はとても簡単です

下の曲のスペクトルを大まかに視覚化してみましょう!

1.準備する

開始する前に、Python と pip がコンピューターに正常にインストールされていることを確認する必要があります. インストールされていない場合は、次の記事にアクセスしてください:インストールに関する超詳細な Python インストール ガイド .

Windows 環境では、Cmd (Start-Run-CMD) を開き、Apple システム環境では、ターミナル (コマンド + スペースでターミナルに入る) を開いて、依存関係をインストールするコマンドの入力を開始する準備をします。

もちろん、VSCode エディターを使用して、この記事のコードをコピーし、エディターの下のターミナルに依存モジュールをインストールすることをお勧めします. なんと快適なことでしょう: Python プログラミングのベスト パートナー — VSCode 詳細ガイド.

ターミナルで次のコマンドを入力して、必要な依存モジュールをインストールします。

pip install pydub
pip install librosa

正常にインストールされた xxx が表示された場合、インストールは成功です。

2. スペクトル表示

librosa と matplot を使用すると、10 行のコードでスペクトル全体を表示できます。

52bdf536bb3d66ca3d91ad31e3da98c0.png

import matplotlib.pyplot as plt
import librosa.display
# 音乐文件载入
audio_path = 'Fenn.mp3'
music, sr = librosa.load(audio_path)
# 宽高比为14:5的图
plt.figure(figsize=(14,5))
librosa.display.waveplot(music, sr=sr)
# 显示图
plt.show()

しかし、そのようなスペクトルは音楽全体であり、非常に醜く見えます. 次に、pydub を使用してスペクトルをカットし、より良い結果を得ます。スペクトルを確認するために、0 ~ 1 秒のセグメントに分割してみましょう。

7ec7ee24343b5e697ab53d626ae11556.png

import matplotlib.pyplot as plt
import librosa.display
import numpy as np
from pydub import AudioSegment
# 1秒=1000亳秒
SECOND = 1000
#音乐文件
AUDIO_PATH = 'Fenn.mp3'

def split_music(begin, end, filepath):
    # 导儿音乐
    song = AudioSegment.from_mp3(filepath)
    # 取begin秒至ijend秒间的片段
    song = song[begin*SECOND: end*SECOND]
    # 存储为临时文件做备份
    temp_path = 'backup/'+filepath
    song.export(temp_path)
    return temp_path
music, sr = librosa.load(split_music(0, 1, AUDIO_PATH))
#宽高比为14:5的图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(music, sr=sr)
plt‍.show()

これは詳細ですが、まだ複雑すぎます. 実際、スペクトルを表示するときは、正の値のみが必要な場合があります。

4fb8eff1b6cd95aec987704409db8404.png

次に、0.9 秒から 1 秒の間のスペクトルをさらにズームインできます。

bdac2170261090dfd8907a9b9c86f8a1.png

# 公众号:Python 实用宝典
n0 = 9000
n1 = 10000
music = np.array([mic for mic in music if mic > 0])
plt.figure(figsize=(14, 5))
pit.plot(music[n0:n1])
plt.grid()
#显示图
plt.show()

これで見た目はかなり良くなりましたが、QQ ミュージックの効果を得るには、まだ多くの変更を加える必要があります。

たとえば、絶妙な画像要素を使用して置換を埋め、ゼロ値をどのように処理するか? スペクトルをより安定させるには? また、私たちは静的なイメージであり、イベントに応じて動的にバンドを継続する必要があります。

生産用のコードは、単純なコードよりも明らかに複雑であり、画像を描画するために負の値を削除するのは強引ではありません。興味のある読者は、独自の調査を行うことができます。

今日の Python チュートリアルが気に入った場合は、引き続き Python Practical Collection に注目してください. お役に立ちましたら、以下のようにご覧ください. ご質問がある場合は、下にメッセージを残していただければ、辛抱強くお答えいたします66e820eefbe9770da7f9fb48ca274b57.png!

以下をクリックして元のテキストを読み、すべてのコードとリンクを入手してください。

Python 実用辞書 (pythondict.com)

ただのトピじゃない

公開アカウントへようこそ: Python Practical Collection

b9423559ca36c049243a351757bd94a6.png

おすすめ

転載: blog.csdn.net/u010751000/article/details/125270358