如何在R或Python中可视化wav文件中混合的多路音频信号
多声道WAV文件信号读取与查看解决方案
报错原因说明:
- 代码中WAV文件名拼写错误,你写的是
luckky.wav,实际文件名是lucky.wavhdr$nSignals语法对应的头对象你没有提前定义,tuneR包的readWave返回的S4对象也不存在hdr属性,无法直接调用nSignals- 你代码中的
sdata变量没有赋值,直接调用length(sdata)也会报错
R 实现(基于tuneR包)
读取所有声道信号
library(tuneR) # 读取WAV文件 audio_obj <- readWave("lucky.wav") # 查看总信号路数(声道数) n_signals <- audio_obj@channels print(paste("总信号路数:", n_signals)) # 提取所有信号矩阵,每一列对应一路独立信号 signal_matrix <- audio_obj@data # 查看单路信号的采样点长度 print(paste("单路信号采样点数量:", nrow(signal_matrix))) # 提取指定路数的信号,示例提取第3路 target_signal <- signal_matrix[, 3]
批量可视化所有信号
library(seewave) par(mfrow = c(n_signals, 1), mar = c(2, 4, 1, 1)) for (i in 1:n_signals) { plot(signal_matrix[,i], type = "l", ylab = "幅值", xlab = "", main = paste("第",i,"路信号")) }
Python 实现(基于scipy)
读取所有声道信号
from scipy.io import wavfile # 读取WAV文件,返回采样率和信号数组 sample_rate, signals = wavfile.read("lucky.wav") # 判断信号路数,单声道时signals为一维数组,多声道为二维数组,列数对应路数 n_signals = signals.shape[1] if len(signals.shape) > 1 else 1 print(f"总信号路数:{n_signals}") print(f"单路信号采样点数量:{signals.shape[0]}") # 提取指定路数的信号,示例提取第2路(Python索引从0开始,所以取第1位) target_signal = signals[:, 1]
批量可视化所有信号
import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] # 解决中文显示问题,不需要可以删除 fig, axs = plt.subplots(n_signals, 1, figsize=(10, 2*n_signals)) for i in range(n_signals): axs[i].plot(signals[:, i]) axs[i].set_title(f"第{i+1}路信号") axs[i].set_ylabel("幅值") plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

