quinta-feira, 17 de junho de 2010

Melhor Guia para Placas de Som 3D

Não são apenas as placas de vídeo que possuem efeitos 3D. As placas de som atuais fazem muito mais do que apenas reproduzir sons com qualidade de CD; são capazes de criar efeitos quase reais. Saiba tudo sobre as APIs usadas para gerar efeitos sonoros tridimensionais, conjuntos de caixas acústicas e modelos de placas de som atuais.

Monster Sound
MX200
MX80
MX300
MX400

gdh3


Bom o gui completo das placas explicando cada uma delas está neste link, que foi nele que peguei essas informações.

http://www.guiadohardware.net/analises/placa-som/

Como funcionam as placas de som

Introdução

Antes da invenção da placa de som, um PC conseguia reproduzir um único som: um bip. Embora o computador fosse capaz de alterar a freqüência e a duração do bip, não havia como alterar o volume ou criar outros sons.

Inicialmente, o bip agia como um sinal ou uma advertência. Posteriormente foram desenvolvidas músicas para os primeiros jogos de computador utilizando bips com diferentes espaçamentos e durações. Essas músicas não eram muito realísticas. Você pode ouvir uma amostra de algumas dessas trilhas sonoras em Crossfire Designs (em inglês).


Imagem cedida por HowStuffWorks Shopper
Placa de som de um PC

Felizmente, a capacidade de som dos computadores evoluiu significativamente nos anos 80, quando diversos fabricantes introduziram placas adicionais dedicadas ao controle do som. Hoje, um computador com uma placa de som pode fazer muito mais do que um bip. Pode reproduzir áudio 3D para jogos ou som surround para reprodução de DVDs, além de poder capturar e gravar sons de fontes externas.

Neste artigo, você aprenderá como uma placa de som permite que um computador produza e grave sons reais em alta qualidade

Som 3D x som surround sound

Projetistas de jogos utilizam som 3D para oferecer um som rápido e dinâmico que muda de acordo com a posição de um jogador dentro do jogo. Além de utilizar sons de diferentes direções, essa tecnologia permite reproduções de som realísticas que desviam ou atravessam obstáculos. O som surround também utiliza o som de diversas direções, mas não muda baseado nas ações do usuário. Ele é mais comum em home theaters.

Analógico x digital

Os sons e os dados do computador são fundamentalmente diferentes. Os sons são analógicos, feitos de ondas que viajam pela matéria. As pessoas escutam sons quando essas ondas fazem vibrar seus tímpanos. Computadores, no entanto, comunicam-se digitalmente utilizando impulsos elétricos que representam 0 e 1. Assim como uma placa de vídeo, a placa de som traduz a informação digital de um computador para informações analógicas do mundo exterior e vice-versa.


O som é feito de ondas que viajam por um meio, como a água e o ar

A placa de som básica é uma placa de circuito impresso que utiliza quatro componentes para traduzir as informações analógicas e digitais :

  • um conversor analógico/digital (ADC)
  • um conversor digital/analógico (DAC)
  • uma interface ISA ou PCI para conectar a placa de som à placa-mãe
  • conexões de entrada para o microfone e de saída para os alto-falantes

Em vez de conversores A/D e D/A separados, algumas placas de som utilizam um chip codificador/decodificador, também chamado de CODEC, que realiza as duas funções.


Uma placa de som tem que realizar a tradução entre ondas de som e bits e bytes

Na próxima seção, abordaremos as conversões analógico/digital e digital/analógico que acontecem na placa de som.

X-Fi

Um dos mais recentes avanços na tecnologia de placas de som é o X-Fi, ou Xtreme Fidelity (Extrema Fidelidade), da fabricante da SoundBlaster, a Creative. Abaixo estão relacionadas as características do X-Fi.

  • "Active Modal Architecture" (Arquitetura Modular Ativa), que proporciona opções de som para jogos, lazer ou criação de músicas.
  • Um Processador Digital de Sinais (DSP) com 51 milhões de transistores.
  • Mecanismos de processamento múltiplos, cada um realiza operações específicas de som.
  • Um Cristalizador de 24 bits, que compensa parte da perda de qualidade sonora natural da gravação de CD de 16 bits.

O ExtremeTech (em inglês) possui um artigo didático com detalhes das características do X-Fi.

Conversores analógico/digital e digital/analógico

Imagine utilizar seu computador para gravar sua voz. Primeiro você fala em um microfone conectado à sua placa de som. O conversor analógico/digital traduz as ondas analógicas da sua voz em dados digitais que o computador possa entender. Para fazer isso, ele cria uma amostragem ou digitaliza o som medindo as ondas de maneira precisa em intervalos freqüentes.


O conversor analógico/digital mede as ondas de som em intervalos freqüentes

O número de medidas por segundo, chamado de taxa de amostragem, é medido em Hz. Quanto mais rápida for a taxa de amostragem de uma placa de som, mais precisa será a reconstrução da onda.

Se você fosse reproduzir a sua gravação pelos alto-falantes, o conversor D/A faria o processo inverso do conversor A/D. Com medições precisas e uma rápida taxa de amostragem, o sinal analógico restaurado pode ser quase idêntico à onda de som original.

Contudo, mesmo altas taxas de amostragem causam alguma redução de qualidade no som. O processo físico de transporte do som por cabos também pode causardistorção. Os fabricantes utilizam duas medidas para descrever essa redução na qualidade do som:

  • distorção harmônica total (THD – Total Harmonic Distortion), expressada em percentagem
  • relação sinal/ruído (SNR – Signal to Noise Ratio), medida em decibéis

Tanto para a THD quanto para a SNR, valores menores significam maior qualidade. Algumas placas possuem uma entrada digital, o que permite o armazenamento de gravações digitais sem convertê-las para o formato analógico.

Métodos de produção de som

Computadores e placas de som podem utilizar diversos métodos para produzir sons. Um deles é a síntese por modulação de freqüência (FM), na qual o computador sobrepõe múltiplas ondas sonoras para criar formatos de onda mais elaborados. Outro método é a síntese por tabela de ondas, que utiliza amostragens de instrumentos reais para replicar sons musicais. Esse método utiliza normalmente várias amostragens do mesmo instrumento em diferentes timbres para proporcionar sons mais reais. Geralmente, a síntese por tabela de ondas cria reproduções de som mais fiéis do que a síntese FM.

A seguir, veremos outros componentes normalmente encontrados nas placas de som e o que eles fazem.

Outros componentes da placa de som

Além dos componentes básicos necessários para o processamento do som, muitas placas de som possuem hardware ou conexões de entrada e saída adicionais.

  • Processador Digital de Sinais (DSP): assim como uma unidade de processamento gráfico (GPU), o DSP é um microprocessador especializado. Ele alivia parte do trabalho da CPU (unidade central de processamento) realizando cálculos para conversões analógicas e digitais. Os DSP podem processar simultaneamente múltiplos sons ou canais. As placas de som que não possuem esse processador utilizam a CPU para essa função.
  • Memória: assim como nas placas de vídeo, uma placa de som pode utilizar sua própria memória para proporcionar um processamento de dados mais rápido.
  • Conexões de entrada e saída: a maioria das placas de som possui, no mínimo, conexões para microfone e alto-falantes. Algumas delas apresentam tantas entradas e saídas que possuem uma breakout box, que normalmente é instalada em uma das baias de drive. Ela inclui as seguintes conexões:
    • conexões múltiplas de alto-falantes para som 3D e som surround;
    • interface digital Sony/Philips (S/PDIF), um protocolo de transferência de arquivos para dados de áudio. Esse protocolo utiliza uma conexão ótica ou coaxial para entrada ou saída da placa de som;
    • interface digital para instrumentos musicais (MIDI – Musical Instrument Digital Interface), utilizada para conectar sintetizadores ou outros instrumentos eletrônicos aos computadores;
    • conexões FireWire e USB, que conectam áudio digital ou gravadores de vídeo à placa de som.


Imagem cedida por HowStuffWorks Shopper
Uma placa de som PCI

A seguir, veremos as opções de som integrado na placa-mãe e controle de som externo.

Drivers e APIs

Assim como a placa de vídeo, uma placa de som utiliza um software que a auxilia a se comunicar com os aplicativos e as outras partes do computador. Esse software inclui os drivers da placa de som, que permite a comunicação da placa com o sistema operacional. Ele inclui ainda interfaces de programas aplicativos (APIs – Application Program Interfaces), que são um conjunto de regras ou padrões que facilitam a comunicação do software com a placa de som. As APIs mais comuns são:

  • Microsoft: DirectSound
  • Creative: Environmental Audio Extensions (EAX) e Open AL
  • Sensaura: MacroFX
  • QSound Labs: QSound

Opções para controle de som

Nem todos os computadores possuem uma placa de som. Algumas placas-mãe oferecem suporte de áudio integrado. Uma placa-mãe que possui seu próprio DSP pode processar múltiplos fluxos de dados. Ela pode suportar também som 3D posicional e som Dolby surround. Apesar de todas essas características, no entanto, a maioria dos críticos acredita que placas de som avulsas oferecem melhor qualidade de som.


Imagem cedida por HowStuffWorks Shopper
Controlador de som externo

Os laptops normalmente possuem sistemas de som integrados à placa-mãe ou pequenas placas de som. Contudo, o controle de espaço e temperatura torna o uso das melhores placas de som internas impraticável. Assim, os usuários de laptop podem comprar controladores de som externos, que utilizam conexão USB ou FireWire. Esses módulos externos podem melhorar significativamente a qualidade de som do laptop.

Comprando uma placa de som

Diversos fatores afetam a capacidade da placa de som de oferecer um som claro e de alta qualidade. Quando for comprar uma placa de som, preste atenção aos seguintes itens:

  • capacidade de dados dos conversores A/D e D/A, medida em bits;
  • relação sinal/ruído (SNR) e distorção harmônica total (THD);
  • resposta em freqüência, ou qual o volume máximo que a placa pode reproduzir sons em diferentes freqüências;
  • taxa de amostragem;
  • canais de saída, como som surround 5.1 ou 7.1;
  • APIs suportadas;
  • certificações, como a Dolby Master e a THX.

Qualquer pessoa investindo em uma placa de som top de linha deve possuir também alto falantes de alta qualidade. Mesmo a melhor placa de som não consegue reproduzir um som de alto nível com um alto falante de baixa qualidade.

Tocando som no XNA 3.0

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("");
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("");
A canção, pode ser qualquer um dos tipos abaixo:
.MP3
.WMA
.WAV

Manipulação de áudio com XNA utilizando o XACT 1° Parte - Tutoriais “Como fazer...”

Tutorial de como fazer uma manipulação de audio com XNA........

1. Visão Geral

O framework do XNA permiti a reprodução e manipulação de sons através de uma ferramenta conhecida como XACT (Cross-Platform Audio Creation Tool), e também prove uma API bem simples que não necessita do XACT (no caso do XNA 3.0). Vejam abaixo a forma como o XACT trabalha com os arquivos de áudio:

Wave – È um arquivo de áudio com a extensão .wav.

Wave Bank – É um banco contendo vários arquivos wave agrupados em um só arquivo.

Sound Bank – É um agrupamento lógico de sons (“Wave banks”) e cues.

Cues – Permite ao programador efetivamente tocar os sons. É composto de um ou mais sons, e é referenciado através dos Sound banks.

O XACT através de sua interface funciona como um sistema de edição de conteúdos de áudio, que apesar de simples em certos aspectos, é poderosa o suficiente para criar efeitos interessantes nos sons de um jogo e facilitar a vida do desenvolvedor em nível de programação. O XACT permite o designer de áudio carregar arquivos wave em grupos, organizar os arquivos em cues que podem ser disparados por algum evento do gameplay, e ainda criar transições entre estes cues. O XACT também permite designers definirem variáveis que podem ser modificadas em tempo de execução (pela engine do XACT), para modificar uma determinada característica do som. Com esta ferramenta é possível, por exemplo, um grupo de sons de motor para um jogo de corrida, e através do uso de uma variável do XACT, fazer com que os sons do motor do carro aumentem ou diminuam o volume de acordo com algum evento.

1. Como criar um projeto no XACT

Bom, agora vem um pequeno tutorial de como criar um projeto no XACT, falar um pouco sobre sua interface, e adicionar uns arquivos wave (.wav) para que sejam utilizados em algum jogo.

1° Passo: No menu Iniciar do Windows, clique em Todos os Programas, clique em Microsoft XNA Game Studio 3.0, clique em Ferramentas e depois em Microsoft Cross-Platform Audio Creation Tool (XACT).

2° Passo: Para criar um novo projeto, clique no menu File, e então clique em New Project.

3° Passo: logo em seguida aparecerá uma tela onde você deverá inserir um nome para o projeto e o local onde ele deverá ser criado. Clique em OK. O projeto será criado.

4° Passo: Agora temos a tela principal do XACT com um projeto em branco. Agora na árvore de arquivos do lado esquerdo, clique com o botão direito do mouse em Wave Banks e em seguidaNewWave Bank. Um novo Wave Bank irá surgir na árvore com o nome padrão "Wave Bank".

5° Passo: O novo banco ainda estará selecionado caso você queira alterar o nome, aperteENTER para aceitar o nome padrão.

6° Passo: Para criar um Sound Bank o processo é o mesmo que o descrito acima, botão direito emSound Banks, e então clique em New Sound Bank.

7° Passo: Aperte ENTER para aceitar o nome padrão.

8° Passo: Para facilitar a execução dos passos seguintes organize a tela do XACT para permitir uma melhor visualização da tela deSounds Banks eWave Banks. Para isso clique em Windows, e então clique em Tile Horizontally. Veja como ficou:

9° Passo: Vamos agora adicionar arquivos wave (.wav) ao projeto. Para isso basta clicar com o botão direito do mouse na área branca da janelaWave Banks ou na ramificaçãoWave Bank da árvore ao lado esquerdo, e em seguida clique em Insert Wave Files(s).

10° Passo: Adicione um ou mais arquivos wave ao banco. A telaWave Bank ficará parecida com esta:

11° Passo: Agora para cada arquivo .wav adicionado noWave Bank, arraste o mesmo solte sobe o painel Cue Name na tela Sound Bank. Não é preciso fazer isso individualmente, basta selecionar todos os waves e arasta-los até o painel Cue Name.

O XACT irá automaticamente criar um novo cue, que será relacionado a um novo som que irá tocar o respectivo arquivo wave.

12° Passo: Para salvar o projeto, clique em File, e Save Project.

13° Passo: Já podemos construir o projeto para que possa ser utilizado, clique emFile, e entãoBuild para construir o projeto. Será então gerado o arquivo .xap (XACT Project File).

2. Tocando um som com XACT no Game Studio

Vou utilizar um exemplo que tinha pronto aqui para demonstrar como é fácil tocar um som no XNA usando o XACT, para isso precisaremos apenas inicializar a engine de áudio, carregar os bancos de som e wave (Sound Banks e Wave Banks), e tocar o som usando um objeto Cue. Para prosseguir é necessário que exista salvo um projeto do tipo .xap, que foi criado no capítulo anterior.

1° Passo: Inserir o projeto do XACT (.xap) no nosso projeto no Visual Studio.

· Com seu projeto do XNA carregado no Visual Studio, dê um clique com o botão direito emContent no painel do Solution Explorer.

· Vamos adicionar uma nova pasta, para isso clique em Add, clique New Folder, e então coloque o nome da pasta “Audio” (poderia ser qualquer nome, mas vamos ficar com esse).

· Agora mova o projeto do XACT (.xap) e suas respectivas pastas, que foram criados anteriormente, e o(s) arquivo(s) wave para dentro da pasta “Audio” que foi criada (faça isso no Windows explorer). Observe:

Obs: Caso a pasta Win eXbox não existam ainda, basta salvar seu projeto do XACT e dar um Build que elas serão geradas.

· Mais uma vez, dentro do XNA Game Studio, clique com o botão direito na pasta“Audio” dentro do painel do Solution Explorer.

· Clique emAdd, e Existing Item.

· Selecione o arquivo (.xap) no windows Explorer dentro da pasta [...Content/Audio] do seu projeto. O arquivo do XACT precisa ser adicionado ao nosso projeto, pois por padrão será processado pelo “Content Pipeline” e os “Wave Banks” e “Sound Banks” serão acessados automaticamente quando o jogo for construído.

O próximo passo é trabalhar o código da aplicação para testarmos o projeto do XACT. Para isto estou disponibilizando uma aplicação bem simples para fazermos os testes, a aplicação nada mais é que uma seta de mouse gigante que colide com uma aeronave estática, veja a imagem abaixo:

1° Passo: Primeiramente devemos declarar as variáveis que serão utilizadas:

// Variáveis de Audio

AudioEngine engine;

SoundBank soundBank;

WaveBank waveBank;

2° Passo: Quando o game iniciar, criamos um novo objeto AudioEngine. Na criação do objeto passamos como parâmetro o caminho do arquivo global de configurações gerado pelo projeto do XACT (neste caso disponível na pasta Content\Audio\Win).

// Inicialização dos objetos de audio

engine = new AudioEngine("Content\\Audio\\teste.xgs");

Obs: Lembre-se de verificar o caminho dos arquivos, pois nem sempre serão os mesmo deste artigo.

3° Passo: Ainda no Initialize() do jogo, devemos instanciar outros dois objetos:

soundBank = newSoundBank(engine, "Content\\Audio\\Sound Bank.xsb");

waveBank = newWaveBank(engine, "Content\\Audio\\Wave Bank.xwb");

Para cada wave bank no projeto do XACT, devemos criar um novo objeto WaveBank, e então passar oAudioEngine e o nome do arquivo do Wave bank gerado pelo XACT . Lembrem-se de adicionar a extensão .xwb (observe a imagem acima com os 3 arquivos).

Para cada sound bank no projeto do XACT, devemos criar um novo objeto SoundBank, e então passar o AudioEngine e o nome do arquivo do Sound bank gerado pelo XACT . Lembrem-se de adicionar a extensão .xsb (observe a imagem acima com os 3 arquivos).

Ainda no método Initialize do jogo, para tocarmos a música assim que o jogo inicie basta chamarmos o método PlayCue() do objeto soundbank, e passarmos como parâmetro o nome de algum cue criado no projeto do XACT.

// Toca o som.

soundBank.PlayCue("dk_remix");

Para finalizar, durante o update do jogo, chame o método Update do objeto engine (AudioEngine) para permitir a engine de áudio processar os dados de áudio.

protectedoverride void Update(GameTime gameTime)

{

Input Update

// Atualiza a engine de audio

engine.Update();

base.Update(gameTime);

}

PRONTO! Basta rodar o jogo e ouvir o resultado!!

2.1. Música como plano de fundo no XACT

Especificar um som como música de fundo permitir sobrescrever a musica de fundo com a música escolhida pelo usuário, sem interromper outros sons do jogo como efeitos sonoros. Isto é feito alterando a categoria dosoundbank no XACT como music. Arquivos de músicas geralmente são maiores que os arquivos com outros tipos de sons, então normalmente é feito o streaming destes arquivos. No XACT, é preciso criar e usar um Wave Bank de streaming para carregar a música, falaremos mais sobre isto em outro tópico.

1° Passo: Abra um projeto que já tenha sido criado no XACT, para isso clique duas vezes em um arquivo .xap ou dentro do XACT, escolha o menuFile, e então clique em Open Project.

2° Passo: Com o projeto carregado, dê um duplo clique em “Sound Bank” na árvore de navegação do lado esquerdo (escolha o sound bank onde se encontra a música). Isto fará com que seja exibido o painel do Sound bank.

3° Passo: Agora clique no som que você desejar colocar como música de fundo. Ao selecionar um som, será exibido um painel com suas propriedades do lado esquerdo do XACT.

4° Passo: Nodrop down Box selecione a opçãomusic, salve o projeto.

2.2. Como pausar ou parar um som

Para prosseguir é necessário que já exista um projeto no XACT criado e devidamente carregado no XNA Game Studio (siga o que foi feito nas etapas anteriores). Continuaremos utilizando o projeto do XNA do capítulo anterior.

1° Passo: Declarar uma variável do tipo Cue e outra do tipo KeyboardState para armazenarmos o último estado de entrada do teclado.

Cue cue;

KeyboardState oldState;

2° Passo: O método Initialize() sofrerá algumas pequenas modificações, desta vez para podermos tocar a música iremos utilizar um objeto do tipo Cue que funcionará como um “player” de música, gerenciando seu começo, pausa e fim. Veja abaixo como deve ficar:

protectedoverride void Initialize()

{

base.Initialize();

// Inicialização dos objetos de audio

engine = newAudioEngine("Content\\Audio\\teste.xgs");

soundBank = new SoundBank(engine, "Content\\Audio\\Sound Bank.xsb");

waveBank = new WaveBank(engine, "Content\\Audio\\Wave Bank.xwb");

// Iniciaiza o cue e toca o som.

cue = soundBank.GetCue("dk_remix");

cue.Play();

}

No método de Update() do jogo adicionaremos apenas uma linha, a responsável por chamar o método que irá atualizar o som do jogo baseado na entrada do teclado do usuário.Veja abaixo:

UpdateSoundInput();

Agora vamos ver como ficará o método responsável pelo gerenciamento do áudio:

/// /// Atualiza o controle de audio///

protectedvoid UpdateSoundInput()

{

KeyboardState currentState = Keyboard.GetState(PlayerIndex.One);

if (currentState.Equals(oldState))

{

return;

}

if (currentState.IsKeyDown(Keys.Space))

{

if (cue.IsPaused)

{

cue.Resume();

}

else if (cue.IsPlaying)

{

cue.Pause();

}

else

{

//Se estiver parado criado um novo cue

cue = soundBank.GetCue(cue.Name);

cue.Play();

}

}

if (currentState.IsKeyDown(Keys.S))

{

cue.Stop(AudioStopOptions.AsAuthored);

}

oldState = currentState;

}

Vamos explicar o que acontece no código acima, a idéia é bem simples.

1.span style="font:7.0pt "Times New Roman""> Inicialmente capturamos o estado da entrada do teclado para sabermos se o que está sendo pressionado.

2. O primeiro if testa se o atual estado é igual ao último estado capturado, para evitar uma captura em série de uma mesma tecla num mesmo frame do jogo. Sem isto, mesmo um rápido pressionamento de teclas pode resultar em eventos repetidos.

3. No segundo if testamos se a tecla de espaço esta sendo pressionada, se o som estiver pausado (), então tocamos, caso já esteja tocando damos uma pausa, se nenhuma destas duas situações for verificada é porque o som está parado, então criamos um cue novo.

4. E finalizando, no último if, caso a tecla S seja pressionada o som será parado.

2.3. Alterar o volume dos sons

Vamos mostrar agora como inicializar a engine de áudio e como usar categorias para mudar o volume da reprodução de um grupo de sons. As categorias controlam o volume de grupos de sons no XACT, estas categorias são coleções que podem armazenar uma ou mais referências para cues. Neste tópico trabalharemos com grupos de sons, mas para alterar o volume individual dos cues basta utilizar variáveis globais atreladas a parâmetros de controle em tempo de execução (RPC - Runtime Parameters controls). Não demonstrarei aqui como criar uma categoria, utilizaremos uma categoria (“Music”) já existente no projeto que criamos anteriormente.

1° Passo: Declarar as variáveis que serão utilizadas:

AudioCategory musicCategory;

// Volume da música

float musicVolume = 1.0f;

2° Passo: Para selecionarmos a categoria de sons cujo volume queremos alterar, chamamos o método GetCategory() do AudioEngine no método Initialize(), e passamos como parêmetro o nome da categoria que criamos no projeto do XACT.

//Seleciona a categoria

musicCategory = engine.GetCategory("Music");

3° Passo: Agora basta criar dentro do método UpdateSoundInput() o código responsável por capturar a entrada do teclado ( neste caso a seta direcional para cima (aumenta volume) e para baixo (diminui volume)) e setar o volume da categoria que foi calculado, bastando para isso chamar o método SetVolume(float) pertencente ao objeto da categoria e passar como parâmetro de entrada o valor em float do novo volume.

if (currentState.IsKeyDown(Keys.Up))

{

musicVolume = MathHelper.Clamp(musicVolume + 0.5f, 0.0f, 30.0f);

}

if (currentState.IsKeyDown(Keys.Down))

{

musicVolume = MathHelper.Clamp(musicVolume - 0.5f, 0.0f, 30.0f);

}

// Set the category volume.

musicCategory.SetVolume(musicVolume);