• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Python 以 SciPy 讀取 WAV 檔案繪製波形圖、時頻譜圖教學與範例

介紹如何在 Python 中使用 scipy 與 matplotlib 模組讀取 wav 聲音檔案,並繪製波形圖(waveform)、頻譜圖(spectrum)與時頻譜圖(spectrogram)。

讀取 WAV 聲音檔案

若要讀取一般的 wav 聲音檔案,可以使用 scipy 模組:

from scipy.io.wavfile import read

# 讀取 WAV 檔案
rate, data = read("bubbs.wav")

讀取出來的資料包含取樣頻率(rate)與取樣資料(data)。

查看取樣頻率:

# 取樣頻率
print("Sample rate: {} Hz".format(rate))
Sample rate: 11000 Hz

查看取樣資料的類型:

# 資料類型
print("Data type: {}".format(data.dtype))
Data type: uint8

繪製波形圖

將取樣資料的前 1024 點資料取出,以 matplotlib 繪製波形圖:

import matplotlib.pyplot as plt

# 繪製前 1024 點資料的波形圖
plt.figure(figsize=(15, 5))
plt.plot(data[0:1024])
plt.show()
波形圖
波形圖

繪製頻譜圖

經過傅立葉轉換之後,繪製頻譜圖(spectrum):

# 傅立葉轉換
from scipy.fftpack import fft
dataFFT = fft(data[0:1024])
dataFFTAbs = abs(dataFFT[1:512])

# 繪製頻譜圖
plt.figure(figsize=(15, 5))
plt.plot(dataFFTAbs, 'r')
plt.show()
頻譜圖
頻譜圖

波形與時頻譜圖

將全部資料的波形圖與時頻譜圖(spectrogram)繪製在一起:

import matplotlib.pyplot as plt
import numpy as np

# 產生時間資料
time = np.arange(0, len(data)) / rate

plt.figure(figsize=(15, 5))

# 繪製波形圖
plotA = plt.subplot(211)
plotA.plot(time, data)
plotA.set_ylabel("Amplitude")
plotA.set_xlim(0, len(data) / rate)

# 繪製時頻譜圖
plotB = plt.subplot(212)
plotB.specgram(data, NFFT=1024, Fs=rate, noverlap=900)
plotB.set_ylabel("Frequency")
plotB.set_xlabel("Time")

plt.show()
波形與頻譜圖
波形與時頻譜圖

參考資料:StackOverflow

分類:Python 標籤:Visualization

讀者互動方式

留言

  1. 弘岳 表示:

    2021-05-2611:22:32

    繪製時頻譜圖的部分有些問題

    plotB.specgram(data, NFFT=1024, Fs=rate, noverlap=900)

    only 1-dimensional arrays can be used

    data應該是二維陣列

    • HoLeeson 表示:

      2022-04-2517:32:45

      沒問題唷, 立體聲才是2維, 分別處理就好

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide