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

Odpovedet emailem