Introdução
Até o XNA 2.0, para manipular o som do jogo, eranecessário preparar o som através da ferramenta XACT(Microsoft Cross-Platform Audio Creation Tool). O processo de inicio até o uso, de fato, do som almejado no jogo era relativamente trabalhoso. O XNA 3.0 traz consigo, o suporte à alguns formatos de arquivos de áudio, sem a necessidade de preparar esses taisformatos na ferramenta XACT para um formato suportado no XNA. A seguir, a lista de arquivos de áudio que podem ser importado diretamente para o seu jogo - na pasta Content: - .MP3
- .WMA
- .WAV
- Além do formato salvo no XACT, o formato .XAP, que era utilizado exclusivamente em versões passadas do XNA.
Um breve resumo abordando o que era feito até o XNA 2.0 Uma vez criado um projeto XACT e salvo isso para o formato de arquivo .xap, o arquivo .xap é adicionado e qualquer arquivos waves(.wav) o projeto XACT usa comoentrada para o seu jogo no XNA, e o Content Pipeline construirá os arquivos necessários para acessar o conteúdoem “run time”. Um projeto XACT constrói um conjunto de arquivos, listados abaixo: - Um arquivo global de ajustes - .xgs
- Um ou mais bancos de wave (wave Banks) - .xwb
- Um ou mais bancos de Som (sound Banks) – .xsb
Esses arquivos listados acima podem ser providos para os contrutores respectivos a cada tipo correspondente no XNA FrameWork(AudioEngine, WaveBank, and SoundBank). Tocando Som no XNA 3.0 Basicamente, existem 2 tipos de classes que podem representar o recurso de som lido: Utilizando a classe SoundEffect
Um SoundEffect é criado por chamar o método ContentManager.Load e uso do tipo SoundEffect e o nome do conteúdo de um arquivo de áudio. O arquivo de áudio precisa ser parte do projeto Content e usar o content processor SoundEffect – XNA Framework.
Um SoundEffect contém os dados de áudio e metadata(semelhante a dados wave e informação de loop) lido a partir de um arquivo de som. Múltiplos objetos SoundEffectInstance podem ser criados e tocados provenientes de um único SoundEffect. Esses objetos compartilham os recursos desse SoundEffect. Obtendo um objeto SoundEffect e SoundEffectInstance Após ter “carregado” um objeto SoundEffect, faça uma chamada ao método Play do objeto soundEffect. Suponha que no escopo da classe existam os 2 objetos a seguir: SoundEffect mySoundEffect; SoundEffectInstance mySoundEffectInstance;
E no método LoadContent, teríamos conforme comentado anteriormente: this.mySoundEffect = this.Content.Load<SoundEffect>("<my Sound Effect in wave format>"); this.mySoundEffectInstance = this.mySoundEffect.Play();
Tenha em mente que no momento que o método Play de um SoundEffect é chamado, o estado da instância(SoundEffectInstance) retornada, é porpadrão que o som esteja tocando(SoundState.Playing). Para tocar o efeito de som quando desejado, basta invocar o método Play do objeto(SoundEffectInstance.Play). Um exemplo no método Update:
KeyboardState keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.A)) { this.mySoundEffectInstance.Play(); } if (keyboard.IsKeyDown(Keys.S)) { this.mySoundEffectInstance.Stop(); }
O método Play, de um SoundEffect, ainda possui uma sobrecarga de método que provê várias opções de aplicabilidade de efeitos ao som, abaixo a sobrecarga: public SoundEffectInstance Play ( float volume, float pitch, float pan, bool loop ) volume – o volume do som, esse valor deve estar entre 0f e 1f. 1f equivale ao volume máximo. pitch – informa se o efeito de som vai está 1 oitava abaixo ou 1 oitava acima. Se você quer que o som não esteja 1 oitrava abaixo ou acima, basta colocar 0f. O valor -1f, indica que o efeito de som vai está 1 oitava abaixo, e o valor +1f, indica que o efeito de som vai está 1 oitava acima. pan – indica como o som será ouvido nas caixas de som(ou fone de ouvido). O valor -1f indica que o som será ouvido totalmente da caixa de som esquerda. Já, o valor +1f, indica que o som vai sair totalmente na caixa de som direita. O valor 0f, indica que o som sairá centralizado; será possível ouvir o som por ambas as caixas de som. O ajuste deste valor pode ser interessante para simular um ambiente de Áudio 3D. loop – Indica se o som será repetido automaticamente ou não. Tal como um SoundEffect, um SoundEffectInstance também é dotado de outros método além do Play, como Stop e Pause. Existe uma diferença sútil, que se o som for manipulado diretamente através do objeto SoundEffect, um som ao ser pausado, para ele ser “resumido”, um SoundEffect possui um método Resume, entretanto, utilizando um SoundEffectInstance, para “resumir” o som, basta invocar o método Play.
Utilizando a classe Song Para executar operações sobre o som representado através da classe Song, você precisa fazer chamadas aos métodos estáticos(static) da classe também estática – MediaPlayer. Efetuando Operações com suas canções(Song) Utilize: - O método MediaPlayer.Play para Tocar uma canção;
- O método MediaPlayer.Pause para pausar uma canção;
- O método MediaPlayer.Resume para resumir uma canção que foi previamente pausada;
- O método MediaPlayer.Stop para parar uma canção.
Obtendo uma canção A maneira é bem semelhante ao que foi apresentado anteriormente quando tratou-se sobre o objeto SoundEffect. Observe a instrução a seguir: this.mySong = this.Content.Load<Song>("<my song>"); A canção, pode ser qualquer um dos tipos abaixo: Conclusão
A partir do XNA 3.0, o trabalho de incorporar Sons e efeitos de som em jogos produzidos no XNA, ficou bastante simples. Ainda existem vários aspectos a serem abordados, relativos a som, no que diz respeito à plataforma Zune. Eu não possou um Zune, então, este artigo não foi produzido pensando no tópico "SOM" na plataforma Zune.
|