You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R或Python中可视化wav文件中混合的多路音频信号

多声道WAV文件信号读取与查看解决方案

报错原因说明:

  • 代码中WAV文件名拼写错误,你写的是luckky.wav,实际文件名是lucky.wav
  • hdr$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:39:01