From ba3261b76bc1673f40c31e46a37e56a76e1b11a9 Mon Sep 17 00:00:00 2001 From: ingvar1995 Date: Sun, 10 Apr 2016 15:27:35 +0300 Subject: [PATCH] sound notifications --- README.md | 3 ++- src/notifications.py | 34 +++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b7405c8..6452e39 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,12 @@ Toxygen is simple [Tox](https://tox.chat/) client written on pure Python 2.7 - [x] Avatars - [x] Multiprofile - [x] Multilingual +- [x] Sound notifications - [ ] Inline images -- [ ] Sound notifications - [ ] Audio - [ ] Video - [ ] Save file encryption +- [ ] File resuming - [ ] Typing notifications - [ ] Changing nospam - [ ] Group chats diff --git a/src/notifications.py b/src/notifications.py index d129538..643d35c 100644 --- a/src/notifications.py +++ b/src/notifications.py @@ -1,7 +1,7 @@ from PySide import QtGui, QtCore -from PySide.phonon import Phonon from util import curr_directory -# TODO: rewrite sound notifications +import wave +import pyaudio SOUND_NOTIFICATION = { @@ -32,6 +32,30 @@ def tray_notification(title, text, tray, window): tray.connect(tray, QtCore.SIGNAL("messageClicked()"), message_clicked) +class AudioFile(object): + chunk = 1024 + + def __init__(self, fl): + self.wf = wave.open(fl, 'rb') + self.p = pyaudio.PyAudio() + self.stream = self.p.open( + format=self.p.get_format_from_width(self.wf.getsampwidth()), + channels=self.wf.getnchannels(), + rate=self.wf.getframerate(), + output=True + ) + + def play(self): + data = self.wf.readframes(self.chunk) + while data: + self.stream.write(data) + data = self.wf.readframes(self.chunk) + + def close(self): + self.stream.close() + self.p.terminate() + + def sound_notification(t): """ Plays sound notification @@ -43,6 +67,6 @@ def sound_notification(t): f = curr_directory() + '/sounds/file.wav' else: f = curr_directory() + '/sounds/contact.wav' - m = Phonon.MediaSource(f) - player = Phonon.createPlayer(Phonon.MusicCategory, m) - player.play() + a = AudioFile(f) + a.play() + a.close()