Re: [python] Přehrávání v pyAudio
jj. Díky moc vám oběma. Ten první odkaz mi pomohl a už mi to funguje. Akorát teď řeším další problém - jak spustit více vláken. Ale myslím, že jsem našel: http://212.47.236.10/doku.php?id=python:misc:wxpython_postevent_threading Ještě jednou díky moc. Ctibor -- Původní e-mail -- Od: Petr Blahoš Komu: python@py.cz Datum: 5. 12. 2018 9:21:19 Předmět: Re: [python] Přehrávání v pyAudio " No, jde o to, že ta funkce PrehrajSoubor se zavolá jen jednou, pokaždé, když zmáčkneš tlačíto Prehraj. Takže při každém stisku tlačítka přehraje jeden chunk. Jak radí Jirka, nastuduj si thready. Pozor, u wxpythonu můžeš volat funkce wxpythonu jenom z hlavního threadu - musíš nějak posílat tomu hlavnímu threadu zprávy, ať to udělá. Myslím, že by se Ti hodily tyto 2 texty: https://wiki.wxpython.org/Non-Blocking%20Gui (https://wiki.wxpython.org/Non-Blocking%20Gui) https://wiki.wxpython.org/LongRunningTasks (https://wiki.wxpython.org/LongRunningTasks) -- Petr On Tue, Dec 4, 2018 at 7:34 PM Ctibor.Plasek mailto:ctibor.pla...@seznam.cz)> wrote: " 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 ___ Python mailing list python@py.cz(mailto:python@py.cz) http://www.py.cz/mailman/listinfo/python (http://www.py.cz/mailman/listinfo/python) Visit: http://www.py.cz(http://www.py.cz) " -- https://blahos.com/(https://blahos.com/) https://traceability.cz/(https://traceability.cz/) ___ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz "___ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz
Re: [python] Přehrávání v pyAudio
No, jde o to, že ta funkce PrehrajSoubor se zavolá jen jednou, pokaždé, když zmáčkneš tlačíto Prehraj. Takže při každém stisku tlačítka přehraje jeden chunk. Jak radí Jirka, nastuduj si thready. Pozor, u wxpythonu můžeš volat funkce wxpythonu jenom z hlavního threadu - musíš nějak posílat tomu hlavnímu threadu zprávy, ať to udělá. Myslím, že by se Ti hodily tyto 2 texty: https://wiki.wxpython.org/Non-Blocking%20Gui https://wiki.wxpython.org/LongRunningTasks -- Petr On Tue, Dec 4, 2018 at 7:34 PM Ctibor.Plasek wrote: > 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 > > > ___ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz > -- https://blahos.com/ https://traceability.cz/ ___ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz
Re: [python] Přehrávání v pyAudio
Ani wx.python ani audio jsem nikdy nedelal. Ale pripada mi, ze si budes muset nastudovat thready (v jednom prehravat, v druhem ovladat) nebo rovnou procesy (pres multiprocessing). Ale ber to s rezervou, o wx.python nic nevim. Jirka On Tue, 4 Dec 2018 at 19:35, Ctibor.Plasek wrote: > 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 > > > ___ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz > ___ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz
[python] Přehrávání v pyAudio
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