从.wav文件

时间:2018-06-04 22:51:08

标签: python python-3.x winsound

我有以下代码来加载.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)

它播放文件没问题,但现在我想提取一个' chunk'让我们说从233到300只播放那部分。

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

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

1 个答案:

答案 0 :(得分:0)

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

  

SND_MEMORY标志表示lpszSoundName参数是指向WAVE文件的内存中图像的指针

(强调补充)

我没有玩WAV文件的内部结构(尽管你感兴趣的是isn't too hard),但我建议使用更灵活的音频库,比如pygame' s。在那里,您可以使用music module及其set_pos function或使用Sound类来访问原始音频数据并按照您在问题中的建议进行剪切。