Jump to content
GRSa

[Curiosidade] Áudio em pascal

Recommended Posts

GRSa

Olá colegas. Depois de uma pesquisa encontrei uma forma de executar sons em programas escritos em pascal. Este método funciona somente em programas compilados e executados no Windows. Não se trata de invocar uma determinada freqüência, como o disponível através do procedimento sound(freq), mas da execução de ficheiros .wav disponíveis em algum diretório acessível.

Aqui será tratada a função SndPlaySound(). Esta função está disponível na unit MMSystem, que faz interface com a biblioteca padrão do Windows. Há muitas outras funções que funcionam similarmente, mas essa é a mais simples e fácil de usar e entender. Este recurso é disponibilizado, por exemplo, pelo freepascal. Alguns compiladores como o Pascalzim NÃO fazem uso deste recurso.

O uso desta função é extremamente simples, tão simples que chega a ser irritante. A função tem retorno do tipo BOOLEAN e basicamente retorna true se for possível tocar o áudio ou false se não for possível tocar o áudio.

Veja o exemplo:

SndPlaySound('C:\click.wav', 1); //Executa o arquivo especificado

Para explicar um pouco mais tecnicamente veja o protótipo da função:

function SndPlaySound(pszSound: STRING; fdwSound: INTEGER): BOOLEAN;

Parâmetros

pszSound: Recebe o caminho até o arquivo como uma string

fdwSound: Flags para reproduzir o áudio. (Confira as constantes abaixo)

Constantes para atribuição à fdwSound

SND_ASYNC: O som é reproduzido de maneira assíncrona e a função retorna imediatamente após o início do som. Para finalizar um som de forma assíncrona chame a função atribuindo ao parâmetro pszSound o valor NIL.

SND_LOOP: O som é reproduzido repetidamente até a função ser invocada novamente com o parâmetro pszSound definido como NIL.

SND_NODEFAULT: Especifica que se o som não puder ser encontrado, a função deve retornar silenciosamente sem tocar o som padrão.

SND_NOSTOP: Se algum áudio já estiver sendo executado no mesmo processo, a função retorna imediatamente FALSE, sem reproduzir o som solicitado.

SND_SYNC: O som é reproduzido de forma síncrona e a função não retorna até que o som termina.

Exemplo:

Program Sounds;
Uses CRT, MMSystem;
Begin
 SndPlaySound('.\click.wav', SND_ASYNC + SND_LOOP);
 Readkey;
End.

Outros:

SndPlaySound('.\click', SND_ASYNC);
SndPlaySound('C:\audio\click.wav', SND_SYNC + SND_NOSTOP);

É importante salientar que há outras funções que fazem isso de forma similar, mas essa é, ao meu ver, a mais fácil de usar e de entender. Para mais funções e constantes acesse o link http://msdn.microsoft.com/en-us/library/windows/desktop/dd798676(v=vs.85).aspx. Lá é possível encontrar mais informações sobre a função aqui tratada assim como ver detalhes sobre todas as funções da biblioteca do Windows disponível para o pascal através da unit MMSystem. Confira a página http://wiki.freepascal.org/Multimedia_Programming para verificar mais formas de usar recursos multimídia com o pascal.

Grande abraço.

Edited by GRSa
  • Vote 1

Share this post


Link to post
Share on other sites
I-NOZex

boa dica :D se na altura soubesse tinha usado isso no meu projecto, mas tambem nao usei porque so da mesmo para wav ne?

formato decomprimido... tamanhos abusados...


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.