Задача, в общем, тривиальна: хочется, чтобы в определенные моменты программа издавала определенный звук. Какой именно звук, должно настраиваться, но это непринципиально.
Так как разработка ведется на Python/PyQt, в качестве звукоиздавателя естественным образом напросился Phonon, ибо кроссплатформенный и уже есть в PyQt (в проекте не появляются лишние зависимости)
Мало почитав доку и погуглив, родил простенький класс:
from PyQt4.phonon import Phonon
class SimpleSound(object):
u"""Проигрывает аудиофайл"""
def __init__(self):
self._audioout = Phonon.AudioOutput(Phonon.NotificationCategory)
self._sound = Phonon.MediaObject()
Phonon.createPath(self._sound, self._audioout)
def play(self, fname):
self._sound.setCurrentSource(Phonon.MediaSource(fname))
self._sound.play()
Использовать, так:
sound = SimpleSound() sound.play(u'notify.wav')
Естественно, объект SimpleSound достаточно создать один раз и повсеместно использовать. Для проигрывания единственного файла можно было обойтись и без класса, простым кодом:
sound = Phonon.createPlayer(Phonon.NotificationCategory, Phonon.MediaSource(u'notify.wav')) sound.play()
Но для проигрывания разных файлов для разных ситуаций это несколько неудобно.
Для корректного создания объектов Phonon должен существовать экземпляр QApplication. Есть еще нюанс: весь этот код работает только внутри цикла обработки сообщений приложения (когда выполняется QApplication.exec_). Если просто создать экземпляр приложения, но не стартовать его, приведенный код выполнится без ошибок, но молча.
Приятного прослушивания.
Комментариев нет:
Отправить комментарий