首页 > 解决方案 > 从 .wav 文件中提取片段

问题描述

我有以下代码来加载 .wav 文件并播放它:

import base64
import winsound
with open('file.wav','rb') as f:
    data = base64.b64encode(f.read())


winsound.PlaySound(base64.b64decode(data), winsound.SND_MEMORY)

它播放文件没问题,但现在我想提取一个“块”,比如说从 233 到 300 并只播放该部分。

seg = data[233:300]
winsound.PlaySound(base64.b64decode(seg), winsound.SND_MEMORY)

我得到:TypeError: 'sound' must be str or None, not 'bytes'

标签: pythonpython-3.xwinsound

解决方案


PlaySound()期待一个完整的 WAV 文件,而不是一段 PCM 音频数据。从文档中PlaySound(),Python 调用的底层函数winsound

SND_MEMORY 标志表明 lpszSoundName 参数是指向WAVE 文件的内存映像的指针。

(重点补充)

与其玩弄 WAV 文件的内部结构(虽然这并不难,如果你有兴趣的话),我建议使用更灵活的音频库,比如 pygame 的。在那里,您可以使用音乐模块及其set_pos功能或使用Sound该类来访问原始音频数据并像您在问题中提出的那样对其进行剪切。


推荐阅读