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

如何将WAV文件读取为shape=(12,)的np.ndarray?

实现指导:将WAV文件转为shape=(12,)的numpy数组

问题分析

你当前读取的WAV文件是双声道音频,输出的data形状为(N, 2)(N为音频采样点数,远大于12),需要先处理声道,再将数据转换为12维的一维数组。

步骤1:将多声道转为单声道

首先把双声道音频转为单声道,可选两种方式:

  • 取其中一个声道
  • 对双声道数据求均值

代码示例:

from scipy.io.wavfile import read
import numpy as np

samplerate, data = read("./music/audio1.wav")
# 方式1:取第一个声道
mono_data = data[:, 0]
# 方式2:对双声道取均值
# mono_data = np.mean(data, axis=1)

步骤2:提取12维音频特征(推荐方案)

直接截取原始音频的12个采样点没有实际音频语义,推荐提取12维梅尔频率倒谱系数(MFCC),这是音频任务中常用的固定维度特征,刚好符合shape=(12,)的要求。需要使用librosa库(未安装的话执行pip install librosa)。

完整代码:

import librosa
import numpy as np

# 读取音频,自动转为单声道并指定采样率
y, sr = librosa.load("./music/audio1.wav", sr=44100, mono=True)
# 提取12维MFCC特征,对时间轴取均值得到单条12维特征
mfcc_features = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=12)
X = np.mean(mfcc_features, axis=1)

print(X.shape)  # 输出 (12,)

步骤3:单纯满足形状要求的备选方案

如果仅需要满足形状要求、不需要音频语义,可以直接对单声道数据进行截断或均匀采样:

# 取前12个采样点
X = mono_data[:12].flatten()
# 或者从整个音频中均匀采样12个点
X = np.linspace(mono_data[0], mono_data[-1], 12)

print(X.shape)  # 输出 (12,)

内容的提问来源于stack exchange,提问作者tyfreed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:01:26