Задача, в общем, тривиальна: хочется, чтобы в определенные моменты программа издавала определенный звук. Какой именно звук, должно настраиваться, но это непринципиально.
Так как разработка ведется на 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_). Если просто создать экземпляр приложения, но не стартовать его, приведенный код выполнится без ошибок, но молча.
Приятного прослушивания.
Комментариев нет:
Отправить комментарий