def print_ttstime(fpath): duration = Player(fpath).duration min = duration // 60 sec = duration % 60 rtstr = f' * Actual. {min: .0f} min {sec: .0f} sec' print(rtstr) return rtstr
player.play() # do background stuff... # when you're done: player.stop() # -------------------- # sound.Player.number_of_loops = -1 # -------------------- from sound import Player player = Player('') player.number_of_loops = -1 player.play() # -------------------- from objc_util import * from time import sleep from datetime import datetime # "Imports" AVAudioSession = ObjCClass('AVAudioSession') AVPlayer = ObjCClass('AVPlayer') AVPlayerItem = ObjCClass('AVPlayerItem') NSURL = ObjCClass('NSURL')
class TimerDialog: keep_annoying = False sounds_and_files = { _('Ringing Sound'):'phone.wav', _('Warning Sound'):'warning.wav', _('Error Sound'):'error.wav', } def __init__ (self): self.init_player() self.ui = gtk.Builder() self.ui.add_from_file(os.path.join(gglobals.uibase,'timerDialog.ui')) self.timer = TimeSpinnerUI( self.ui.get_object('hoursSpinButton'), self.ui.get_object('minutesSpinButton'), self.ui.get_object('secondsSpinButton') ) self.timer.connect_timer_hook(self.timer_done_cb) for w in ['timerDialog','mainLabel', 'soundComboBox','repeatCheckButton', 'noteEntry','expander1','timerBox','resetTimerButton', 'timerFinishedLabel','keepAnnoyingLabel' ]: setattr(self,w,self.ui.get_object(w)) cb.set_model_from_list(self.soundComboBox,self.sounds_and_files.keys()) cb.cb_set_active_text(self.soundComboBox,_('Ringing Sound')) self.ui.connect_signals( {'reset_cb':self.timer.reset_cb, 'pause_cb':self.timer.pause_cb, 'start_cb':self.timer.start_cb, 'note_changed_cb':self.note_changed_cb, } ) self.timerDialog.connect('response',self.response_cb) self.timerDialog.connect('close',self.close_cb) self.timerDialog.set_modal(False) self.note = '' def set_time (self, s): self.timer.set_time(s) def note_changed_cb (self, entry): txt = entry.get_text() self.note = txt if txt: txt = _('Timer')+': '+txt else: txt = _('Timer') self.timerDialog.set_title(txt) self.mainLabel.set_markup('<span weight="bold" size="larger">' + xml.sax.saxutils.escape(txt) + '</span>') def init_player (self): self.player = Player() def play_tune (self): sound_file = self.sounds_and_files[cb.cb_get_active_text(self.soundComboBox)] sound_file = os.path.join(gglobals.data_dir,'sound',sound_file) self.player.play_file(sound_file) def annoy_user (self): if self.keep_annoying: self.play_tune() return True def timer_done_cb (self): if hasattr(self.timerDialog,'set_urgency_hint'): self.timerDialog.set_urgency_hint(True) self.play_tune() if self.repeatCheckButton.get_active(): self.keep_annoying = True gobject.timeout_add(3000,self.annoy_user) self.timerBox.hide() self.expander1.hide() self.timerFinishedLabel.show() self.resetTimerButton.show() if self.keep_annoying: self.keepAnnoyingLabel.show() def stop_annoying (self): self.keep_annoying = False if hasattr(self.timerDialog,'set_urgency_hint'): self.timerDialog.set_urgency_hint(False) def refresh (self, *args): self.stop_annoying() self.timer.reset_cb() self.timerFinishedLabel.hide() self.keepAnnoyingLabel.hide() self.timerBox.show() self.resetTimerButton.hide() self.expander1.show() def response_cb (self, dialog, resp): if resp == gtk.RESPONSE_APPLY: self.refresh() else: self.close_cb() def close_cb (self,*args): self.stop_annoying() if (not self.timer.running) or de.getBoolean(label=_('Stop timer?'), sublabel=_("You've requested to close a window with an active timer. You can stop the timer, or you can just close the window. If you close the window, it will reappear when your timer goes off."), custom_yes=_('Stop _timer'),custom_no=_('_Keep timing') ): self.timer.running = False self.timerDialog.hide() self.timerDialog.destroy() else: self.timer.connect_timer_hook(self.timerDialog.show,1) self.timerDialog.hide() def run (self): self.timerDialog.run() def show (self): self.timerDialog.show()
def init_player (self): self.player = Player()