Artigo
Tocando som no XNA 3.0
Manipulação do som no XNA 3.0
Enviado por Luciano José em 17/8/2008 0:00:00

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:

  • Song
  • SoundEffect

 
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:

 

  • .MP3
  • .WMA
  • .WAV

 

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.


Sobre o Autor

lucianoJose
Luciano José
MCP, MCTS. Administrador do SharpGames. Sou de Pernambuco! Meu Blog: lucianojosefj.spaces.live.com

Clique para avaliar:

Comentários
" Uma das grandes revoluções do XNA 3.0 é a capacidade de usar sons em formato mp3, bem aceito no mercado. Excelente proposta!"
Enviado por ANDERSON FERREIRA em 12/11/2008 9:25:38:
 
" mt bom cara, o xact era mesmo ruim de se trabalhar. Agora tudo faz sentido!!! eheheheh ficou bem melhor"
Enviado por joqus em 18/8/2008 14:22:32:
 

Adicione seu Comentário  Voltar
Translator
AdSense

Amazon

Logos do XBox 360, XNA e Games For Windows
Copyright 2008 por SharpgamesPolítica de Privacidade  |  Termos de Uso