Извлечь сегмент из файла .wav - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующий код для загрузки и воспроизведения файла .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'

1 Ответ

0 голосов
/ 05 июня 2018

PlaySound() ожидает полностью сформированный файл WAV, а не сегмент аудиоданных PCM.Из документов для PlaySound() базовая функция, вызываемая Python winsound:

Флаг SND_MEMORY указывает, что параметр lpszSoundName является указателем на изображение в памяти WAVEfile .

(выделение добавлено)

Вместо того, чтобы играть с внутренними файлами WAV (хотя это не слишком сложно , есливы заинтересованы), я бы предложил более гибкую аудио-библиотеку, как Pygame.Там вы можете использовать музыкальный модуль и его set_pos функцию или использовать класс Sound для доступа к необработанным аудиоданным и обрезать их, как выпредложенный в вашем вопросе.

...