2015-09-06 2 views
0

Я использую opencv в настройках видео (кадр за кадром), и у меня есть небольшая часть, которая должна воспроизводить звуковой файл, такой как звук звонка в конце, он может быть в любом формате.Что такое самый быстрый звуковой модуль Python?

В настоящее время я использую pygame, но программа немного отстает при воспроизведении звука. Учитывая тот факт, что я пытаюсь выполнить 1 кадр как можно быстрее, это отставание вызывает беспокойство.

import pygame 
sound=pygame.mixer.Sound('beep.wav') 
sound.play() 

Какой бы самый быстрый модуль мог воспроизводить звуковой файл? Предпочтительно, что я мог бы переносить на компьютеры Windows.

ответ

0

Pygame, вероятно, лучший выбор для аудио. В the documentation for the mixer module вы можете увидеть следующее примечание:

ПРИМЕЧАНИЕ. Чтобы не получить меньше лагированного звука, используйте меньший размер буфера. По умолчанию установлено, чтобы уменьшить вероятность появления царапающих звуков на некоторых компьютерах. Вы можете изменить буфер по умолчанию, вызвав pygame.mixer.pre_init(), предварительно задав аргументы инициализации микшера до того, как pygame.mixer.init() инициализирует модуль микшера или pygame.init() инициализирует все импортированные модули pygame. Например: pygame.mixer.pre_init (44100, -16,2, 1024) Размер по умолчанию был изменен с 1024 на 3072 в pygame 1.8.

У меня есть приложение, которое использует Pygame для звука, и я столкнулся с тем же вопросом, который вы видите. Я изменил размер буфера на 512, инициализируя mixermixer.init(buffer=512).

+1

Как отмечается в примечании, некоторые компьютеры нуждаются в большем буфере или имеют проблемы. На нескольких компьютерах, на которых я тестировал свое приложение, я не видел проблем с качеством звука с меньшим буфером - всего лишь меньше лаг. Интересно, как часто разработчики Pygame испытывали этот скрипучий звук, который заставлял их увеличивать буфер по умолчанию и вводить отставание в _all Pygame audio_. Возможно, он должен быть отменен, с небольшим буфером по умолчанию и примечанием об увеличении его, когда это необходимо. – TigerhawkT3

1

Если вы используете приведенный выше код, когда вам нужен звук, то неудивительно, что вы отстаете. В верхней части файла с остальной частью импорта, используйте

from pygame.mixer import Sound 

так что вы только импортировать то, что вам нужно, а не все pygame модуля. Тогда же перед вами необходимостью звука, запустите

sound = Sound("beep.wav") 

так что готова к работе. Затем, когда вам нужно сыграть в нее, просто запустите

sound.play() 

и должно быть минимальное отставание.

+0

Я предполагал, что OP уже делал это, но, безусловно, возможно, что это не так. – TigerhawkT3

+0

Да, я уже делал это, но полезно добавить кого-то с подобной проблемой – azazelspeaks

0

Я не сравнивал задержки, но вы можете попробовать что-то, что основано на PortAudio, например. python-sounddevice.

Здесь вы можете поиграть с параметрами blocksize и latency, чтобы получить минимально возможную задержку для вашей системы.

В Windows вы также должны убедиться, что используете фоновый сервер, который на самом деле способен к низким задержкам (я думаю, вы должны попробовать WDM/KS, WASAPI или ASIO).

Смежные вопросы