Página 1 de 1
Como colocar sons para tocar?
Enviado: 23 Set 2009 23:29
por clodoaldomonteiro
Olá amigos!
Queria saber se tem alguma função que toque os sons do windows, definidos pelo usuário no painel de controle?
Grato pela atenção.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 00:08
por Maligno
Você pode usar a função PlaySound() da API do Windows. Veja o MSDN para mais detalhes. Link:
http://msdn.microsoft.com/en-us/library/aa909766.aspx
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 00:44
por clodoaldomonteiro
Maligno!
Pelo q entendi essa função é para windows CE ou coisa parecida.
Ela existe em alguma lib do xharbour?
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 01:30
por Maligno
Engano meu. Peguei o endereço do Google. É que só uso o MSDN que instalei no HD. O
link mais certo é:
http://msdn.microsoft.com/en-us/library ... S.85).aspx (melhor colar esse
link no seu navegador. Está cortando o final dele).
Mas note que todas as informações são as mesmas, incluindo os parâmetros de chamada. Ou seja, é a mesma.
Essa função, especificamente, você não encontrará em qualquer LIB, uma vez que ela já existe na sua máquina, na biblioteca WINMM.DLL. Ela faz parte da API do Windows. A não ser que alguém tenha feita alguma função similar com algum recurso diferente, com uma passagem de argumento diferente, mais compatível com a linguagem XBase, por exemplo.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 10:52
por alaminojunior
Um exemplo prático de como fazer:
Código: Selecionar todos
procedure main()
DLLCall("WINMM.DLL",32,"sndPlaySoundA", "Inicialização do Windows XP.wav", 0 )
return
O parâmetro final "0" faz o sistema esperar a execução do som, se for "1" [se não me engano] permite a execução normal do sistema enquanto se toca.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 11:04
por Maligno
Os códigos:
Código: Selecionar todos
00 (SND_SYNC ) -> a função retorna só após o som terminar
01 (SND_ASYNC ) -> a função retorna antes do som terminar
02 (SND_NODEFAULT) -> silêncio, se a fonte não for encontrada
04 (SND_MEMORY ) -> o primeiro argumento aponta para a memória
08 (SND_LOOP ) -> entra em looping até re-executar a função
16 (SND_NOSTOP ) -> não pára o som sendo executado
Pelo valores, dá pra perceber que eles podem ser combinados.
Mas a função sndPlaySound() existe hoje em dia apenas para retrocompatibilidade. Ela vem sendo substituída por PlaySound().
Curiosidade: no [x]Harbour é necessário usar uma função de chamada de DLL? Não se poderia executar a função da API diretamente?
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 11:22
por alaminojunior
Maligno escreveu:no [x]Harbour é necessário usar uma função de chamada de DLL?
Não necessariamente.
Maligno escreveu:Não se poderia executar a função da API diretamente?
Tenho quase certeza que sim (não dou certeza por não dominar o assunto), pois o Leonardo me passou um código em C que faz uso da API do Windows para travamento do teclado e mouse, que usei para homologar o TEF.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 11:25
por Maligno
Imagino que não precise. Mas se tem dúvida, faça uma experiência simples com um WAV qualquer. E poste o resultado aqui.

Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 21:55
por clodoaldomonteiro
Olá amigos!
Peguei a rotina que o Alamino passou e não deu certo, o único som que sai é um de erro, mesmo que eu coloque os daminhos dos arquivos.
Já a função que o Malígno informou, não sai nem som som de erro.
Tentei usar a função getenv() para pegar o conteúdo dos eventos de sons do windows, e também não retornou nada.
Tentei também usar a função loadlibrary() para ver se as funções das dlls poderiam ficar visíveis, mas ainda assim não deu.
To usando a gtwvw.lib, mas acho que não tem nenhuma função para tocar sons nela.
Vou continuar tentando aki.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 22:08
por alaminojunior
Acabei de testar e funcionou certinho. Por via das dúvidas coloque a DLL junto com o programa. Vai ver o seu path não está apontando para a pasta de sistema do Windows.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 22:13
por Maligno
De que jeito deu certo? Execução direta da função ou através da função DLLCall()?
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 22:23
por alaminojunior
Funcionou do jeito que eu exemplifiquei lá em cima.
Re: Como colocar sons para tocar?
Enviado: 24 Set 2009 23:30
por clodoaldomonteiro
Alamino, deu certo.
Não precisei colocar a dll na pasta do meu sistema, era o seguinte:
Tava colocando a linha de comando assim:
DLLCall("WINMM.DLL",32,"sndPlaySoundA", "c:\windows\media\Desligamento do Windows.wav", 0 )
E deveria ser colocado assim:
DLLCall("WINMM.DLL",32,"sndPlaySoundA", "c:\windows\media\Windows Shutdown.wav", 0 )
com o nome dos arquivos .wav em ingles.
Vi que quando copiei o arquivo da pasta c:\windows\midea para a pasta do meu sistema, foi mudado o nome do arquivo para ingles.
Deve ser porque eu uso o Windows 7.
Coisas do windows.
Agora vou fazer uma função para chamar os sons que eu quero.
Valeu mesmo a ajuda de voces.
Como colocar sons para tocar?
Enviado: 30 Jan 2015 15:35
por SandroBelarmino
Ressuscitando o tópico,
Existe alguma forma de fazer isso em clipper?
Se for o caso abro um tópico na seção do clipper.
Obrigado
Como colocar sons para tocar?
Enviado: 22 Mar 2015 08:46
por clodoaldomonteiro
Acho que sim Sandro, se me lembro, comecei a fazer isso com Clipper, compilado com o Blinker, mas aconselho ao amigo a migrar para (x)Harbour.
Hoje está muito fácil a migração.