Som com winsound

266 views
Skip to first unread message

willie lawrence

unread,
Jan 10, 2012, 9:37:19 AM1/10/12
to python-brasil
Olá a todos, sou novo no python e tenho "intentado" executar sons pela
biblioteca winsound, embora eu saiba da existencia de outras
bibliotecas de som (assim como o próprio pyGame - pygame.mixer)
gostaria de concluir algo que comecei e não consegui (ainda):
Preciso executar dois sons ao mesmo tempo com o método:
winsound.PlaySound, criei uma thread para executar os sons, porém o
segundo processo só inicia quando o primeiro termina; "eu tenho de
esperar o primeiro sons acabar para escutar o segundo", alguém poderia
me ajudar? Ou realmente não há como fazer isso com o winsound?

Henrique Bastos

unread,
Jan 10, 2012, 10:27:18 AM1/10/12
to python...@googlegroups.com
Bem legal, Willie!

Seria ótimo se vc pudesse compartilhar este código em algum repositório remoto de modo que seria mais simples as pessoas tentarem fazer funcionar e compartilhar soluções com você.

Como sugestão fica o Dropbox para simplesmente compartilhar arquivos, o Github para compartilhar vários arquivos de um projeto, ou se for apenas um pedaço de código, use o Gist.

Abs,
--
Henrique Bastos

Aprenda Python e Django na Prática!



2012/1/10 willie lawrence <williel...@gmail.com>

--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
   http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
   python-brasi...@googlegroups.com

Conrado P. L. Gouvêa

unread,
Jan 10, 2012, 10:48:27 AM1/10/12
to python...@googlegroups.com
2012/1/10 willie lawrence <williel...@gmail.com>:

> Preciso executar dois sons ao mesmo tempo com o método:
> winsound.PlaySound, criei uma thread para executar os sons, porém o
> segundo processo só inicia quando o primeiro termina; "eu tenho de
> esperar o primeiro sons acabar para escutar o segundo", alguém poderia
> me ajudar? Ou realmente não há como fazer isso com o winsound?

Dê uma olhada na documentação da função PlaySound:
http://docs.python.org/library/winsound.html

Ela recebe um segundo parâmetro, flags, que é o "or" de constantes que
especificam várias opções. Uma delas é a SND_ASYNC, que faz a função
retornar imediatamente, sem esperar o som terminar. Por exemplo (não
testei):

winsound.PlaySound("som.wav", winsound.SND_ASYNC);

Conrado

willie lawrence

unread,
Jan 11, 2012, 6:33:31 AM1/11/12
to python-brasil


On 10 jan, 12:48, Conrado P. L. Gouvêa <conrado...@gmail.com> wrote:
> 2012/1/10 willie lawrence <willielawren...@gmail.com>:
____________________________
Desculpem a demora pelo feedback
De fato, SND_ASYNC retorna automaticamente, o que em teoria melhoraria
(ou não) o sistema de threads, vi na documentação uma outra variável
chamada SND_NOWAIT (deve ser essa mesma) que diz executar os sons sem
interromper qualquer outro (com um pequeno e esimples detalhe que não
funciona). Realmente não postei o código (ele ñ eh algo consistente, é
algo bem básico só pra fazer o que digo):

import threading, winsound

>>> class Test(threading.Thread):
... def run(self):
... winsound.PlaySound("file.wav", winsound.SND_ASYNC) # I
already tried with SND_NOWAIT

>>> th1 = Test()
>>> th2 = Test()

th1.start()
th2.start() # executado em linha de comando, pois a segunda thread ser
executada alguns segundos depois (para ver
# a diferença de execução entre os sons)

E ainda assim não funciona! O que estou fazendo de errado?

Dirley

unread,
Jan 11, 2012, 7:11:43 AM1/11/12
to python...@googlegroups.com
Acho que se você usar esses parâmetros, não precisa usar threads. Já tentou isso?

- D


willie lawrence

unread,
Jan 11, 2012, 7:16:07 AM1/11/12
to python-brasil
Tentei sim, (das mais variadas maneiras), o melhor resultado até então
obtido foi que o primeiro som fosse interrompido e automaticamente o
outro tocado, as threads foi uma alternativa que encontrei, mas é como
se o winsound roubasse o processamento de áudio todo só para si, tenho
lá minhas dúvidas sobre tal biblioteca (já que só apresenta duas
funções úteis em todo o módulo: PlaySound e Beep), mas não desistirei.

Leonardo Santagada

unread,
Jan 11, 2012, 7:33:39 AM1/11/12
to python...@googlegroups.com
2012/1/11 willie lawrence <williel...@gmail.com>:

Eu tentaria sem threads mas com o segundo parametro
winsound.SND_ASYNC | winsound.SND_NOWAIT

ou seja:

winsound.PlaySound("file.wav", winsound.SND_ASYNC | winsound.SND_NOWAIT)


Mas na verdade eu largaria tudo de mão e usaria ou a pygame ou a
pyglet, que são bem mais usadas (porque tem suporte a vários os). A
pyglet usa directaudio no windão que é uma api muito melhor do que a
normal do windows.

--

Leonardo Santagada

Reply all
Reply to author
Forward
0 new messages