使用Python和Matplotlib在圖表上繪製各種聲音


在音訊處理和分析領域,視覺化聲波波形可以提供寶貴的見解。Python 是一種流行的程式語言,結合強大的繪相簿 Matplotlib,提供了一個多功能的平臺來繪製和分析不同型別的音訊。

在本文中,我們將探討如何為各種聲音(例如正弦波、方波、鋸齒波和噪聲訊號)生成和繪製波形。透過利用 Python 和 Matplotlib,我們可以視覺化聲音資料,並更深入地瞭解其特性和模式。

如何使用Python和Matplotlib在圖表上繪製各種聲音?

按照以下步驟使用 Python 和 Matplotlib 在圖表上繪製各種聲音:

  • 我們首先匯入必要的庫:NumPy 和 Matplotlib。NumPy 是 Python 的數值運算庫,Matplotlib 是我們將用於視覺化聲音波形的繪相簿。

  • 接下來,我們定義一個名為 plot_sound(sound, sample_rate) 的函式,它接受兩個引數:sound(聲音陣列)和 sample_rate(聲音的取樣率)。此函式將繪製聲音波形。

  • 在 plot_sound 函式內部,我們首先透過將聲音陣列的長度除以取樣率來計算聲音的持續時間。這將給我們聲音的總持續時間(以秒為單位)。

  • 然後,我們使用 NumPy 的 linspace 函式建立一個時間軸。linspace 函式在指定範圍內生成均勻間隔的數字。在本例中,我們建立一個時間軸,其範圍從 0 到聲音的持續時間,點數與聲音陣列的長度相同。

  • 現在,我們可以使用 Matplotlib 繪製聲音波形。我們使用 Matplotlib 的 plot 函式在 x 軸上繪製時間軸,在 y 軸上繪製聲音陣列。

  • 我們分別使用 xlabel 和 ylabel 函式為 x 軸和 y 軸新增標籤。

  • 我們使用 title 函式設定繪圖的標題。

  • 我們使用 grid 函式啟用繪圖上的網格。

  • 最後,我們使用 show 函式顯示繪圖。

  • 定義 plot_sound 函式後,我們將透過生成四種不同型別的音訊並繪製其波形來演示其用法。

  • 我們首先設定聲音的取樣率和持續時間。

  • 在下面的程式中,我們使用 NumPy 的 sin 函式生成一個正弦波。sin 函式根據指定的頻率和時間陣列生成正弦波。

  • 我們透過將符號函式應用於正弦波來生成方波。符號函式對於負值返回 -1,對於正值返回 1,有效地將正弦波轉換為方波。

  • 我們透過使用模運算子將線性間隔陣列的值包裝在 -1 和 1 之間來生成鋸齒波。這將建立一個鋸齒狀波形。

  • 我們透過從 -1 和 1 之間的均勻分佈中取樣隨機值來生成噪聲訊號。

  • 最後,我們為每個生成的音訊呼叫 plot_sound 函式以繪製其波形。

示例

以下是使用上述步驟的程式:

import numpy as np
import matplotlib.pyplot as plt

def plot_sound(sound, sample_rate):
   duration = len(sound) / sample_rate
   time = np.linspace(0, duration, len(sound))
    
   plt.plot(time, sound)
   plt.xlabel("Time (seconds)")
   plt.ylabel("Amplitude")
   plt.title("Sound Waveform")
   plt.grid(True)
   plt.show()

# Example usage
sample_rate = 44100  # Sample rate of the sound
duration = 2  # Duration of the sound in seconds

# Generate a sine wave
frequency = 440  # Frequency of the sine wave in Hz
t = np.linspace(0, duration, int(sample_rate * duration))
sine_wave = np.sin(2 * np.pi * frequency * t)

# Generate a square wave
square_wave = np.sign(np.sin(2 * np.pi * frequency * t))

# Generate a sawtooth wave
sawtooth_wave = np.linspace(-1, 1, int(sample_rate * duration)) % 2 - 1

# Generate a noise signal
noise = np.random.uniform(-1, 1, int(sample_rate * duration))

# Plotting the sound waveforms
plot_sound(sine_wave, sample_rate)
plot_sound(square_wave, sample_rate)
plot_sound(sawtooth_wave, sample_rate)
plot_sound(noise, sample_rate)

輸出

在上面的程式中,我們演示了plot_sound 函式的用法,透過生成和繪製四種不同型別的音訊:

  • 頻率為 440 Hz 的正弦波。

  • 具有相同頻率的方波。

  • 具有相同頻率的鋸齒波。

  • 隨機噪聲訊號。

每個聲音都是使用 NumPy 函式生成的,生成的波形使用plot_sound 函式繪製。

結論

透過使用 Python 和 Matplotlib,我們展示了建立和描繪各種聲音波形圖案的能力。Python 的靈活性和 Matplotlib 的視覺化功能的結合使我們能夠檢查和理解各種聲音屬性,包括頻率和振幅的變化。

這些獲得的知識在音訊處理、音樂製作和聲音工程等領域具有重要價值,為進一步研究和實驗提供了無限可能。

更新於:2023年7月25日

435 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告