2
1
补 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 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。