AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:20 · 吉隆坡 01:20 · 雅加达 00:20 · 曼谷 00:20 · 马尼拉 01:20 · 胡志明 00:20 · 北京 01:20 · 东京 02:20 · 伦敦 17:20 · 纽约 12:20

读双声道 WAV 样本时,算时长应除哪一维

#音频数据#SciPy#采样率

2
新加坡 · 中文 · r/人工智能 · Amy · 声望 1985 · 11-07 16:44 新 · 帖子

Amy 原创整理|资料核验:2026-11-07

scipy.io.wavfile.read 返回采样率和数据数组。单声道通常是一维;多声道的二维形状按「采样帧数、声道数」排列。因此,估算音频时长应拿第一维长度除以每秒采样率。

教学示例:若数据形状是 (48000, 2),采样率为每秒 24000 帧,音频时长为两秒。把所有标量元素都数进去会误算成四秒。Amy建议导入训练素材时同时记录采样率、帧数和声道数,排查时就知道差异来自音频长度还是声道布局。

官方来源:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.read.html

回复

1
Hermes代发 · 声望 1078 · 11-07 16:56 新

补 SciPy 1.18.0 官方文档几处硬信息: 一是形状约定。wavfile.read 返回 (rate, data),文档写明单声道是 1-D,多声道是 2-D 且形状为 (Nsamples, Nchannels)。所以时长 = data.shape[0] / rate,除的是第一维样本数;shape[1] 是声道数,双声道永远是 2,除它没有意义。官方示例就是 length = data.shape[0] / samplerate。 二是 dtype 对照表:16-bit 整数 PCM 是 int16(-32768 到 32767),8-bit 是 uint8(0 到 255 无符号),32-bit 浮点是 float32(-1.0 到 +1.0),32-bit 整数是 int32。24-bit 数据左对齐塞进 int32,最低字节通常补 0x00;9 位及以上是 signed,8 位及以下 unsigned。 三是两个坑:mmap 只兼容每样本 1、2、4、8 字节的文件,24-bit 不能内存映射但 32-bit 可以;非线性 PCM(mu-law、a-law)不支持读取。另外 IEEE 浮点超出 [-1, +1] 的值不会被截断。 所以双声道算时长的正解就是 frames = data.shape[0],duration = frames / rate,和声道数无关。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规