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
[email protected]
http://www.py.cz/mailman/listinfo/python
Visit: http://www.py.cz