Ahoj. Ve wx.python když po stisknutí tlačítka přehrávám stream tímto způsobem:
chunk = 1024 filePyAudio = wave.open(wavefile,"rb") stream = p.open(format = p.get_format_from_width(filePyAudio.getsampwidth()) , channels = filePyAudio.getnchannels(), rate = filePyAudio.getframerate(), output = True) data = filePyAudio.readframes(chunk) while data: stream.write(data) tak to sice krásně přehrává, ale nedá se už nic jiného dělat, než to dohraje.( v zásadě to okno jakoby vytuhne) Tak jsem si myslel, že bych nějak v okně kontroloval druhé tlačítko Stop a přehrával to vždy po těch kouscích. Jenže po klinutí na Play se vždy přehraje pouze jeden chunk a pak se zastaví. Všechno jsem zglobalizoval (což myslím není nejlepší nápad), ale stejně nic. Mohli byste mi, prosím, poradit? Vše viz přiložený soubor. Díky Ctibor
import pyaudio import wave import wx import wx.lib.agw.aquabutton as AB # globální proměnné hraje = False filePyAudio ='' stream = '' p = pyaudio.PyAudio() def PrehrajSoubor(wavefile): global hraje global filePyAudio global stream global p chunk = 1024 if hraje == False: # Nehraje, tak musím aktivovat a spustit filePyAudio = wave.open(wavefile,"rb") #open stream stream = p.open(format = p.get_format_from_width(filePyAudio.getsampwidth()), channels = filePyAudio.getnchannels(), rate = filePyAudio.getframerate(), output = True) data = filePyAudio.readframes(chunk) hraje = True else: #Teď už hraje, tak načtu další data data = filePyAudio.readframes(chunk) #play stream if data: # pokud není konec souboru tak přehraju stream.write(data) def ZastavPrehravani(): global stream global p stream.stop_stream() stream.close() p.terminate() class PlayerPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, style=wx.NO_BORDER) self.prehraj = AB.AquaButton(self, label="Play", pos=(100,100),size=(100,40)) self.prehraj.SetForegroundColour("black") self.zastav = AB.AquaButton(self, label="Stop", pos=(200,100),size=(100,40)) self.zastav.SetForegroundColour("black") self.prehraj.Bind(wx.EVT_BUTTON, self.playButton) self.zastav.Bind(wx.EVT_BUTTON, self.stopButton) def playButton(self, event): PrehrajSoubor("pokus.wav") def stopButton(self, event): ZastavPrehravani() class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="Wave player", pos=(0,0),size=(600,400)) panel = PlayerPanel(self) self.Show() if __name__ == "__main__": app = wx.App() frame = Frame() app.MainLoop()
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz