Re: [python] Přehrávání v pyAudio

2018-12-05 Tema obsahu Ctibor.Plasek
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

2018-12-05 Tema obsahu Petr Blahoš
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

2018-12-04 Tema obsahu Jirka Vejrazka
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

2018-12-04 Tema obsahu Ctibor.Plasek
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