No tutorial de hoje iremos aprender como tocar arquivos de áudio do tipo MIDI (Musical Instrument Digital Interface)!!! É bem interessante usar esse tipo de arquivo de áudio, facilmente vocês irão encontrar por ai programas para compor melodias e salvar no formato .mid, sugiro que baixem ai algum teclado virtual que dê suporte a este recurso, ou pesquisem e baixe por aí sons já prontos! (são muito pequenos e rápido de baixar!!!), exite formas de tocar formatos diferentes de áudio como .mp3, .au, .wav, mas não será tema desse tutorial!
Então vamos lá!
Para tocar um arquivo de áudio .mid, a primeira coisas que iremos precisar é de um arquivo de áudio do tipo .mid!!!
Depois iremos precisar de um objeto do tipo Sequence para carregar dentro dele o arquivo que iremos tocar, e de um objeto do tipo Sequencer, ele é que irá tocar nossas sequences!
Nosso exercício de hoje será o seguinte: crie um pacote chamado tutoria7 dentro do nosso projeto JAVAGAMES2D, cole dentro do pacote o arquivo Game.java, do pacote tutorial3 que é o nosso template!
Agora nós vamos declarar nosso Sequencer (tocador) e Sequence (música), e em seguida iremos criar um método para tocar a trilha sonora de nossos games!
(Nota: ao declarar o Sequencer e Sequence lembre de importar! use o autoplete que será feito automático! Ctrl+Barra de espaço)
Abaixo segue o código:
1: import java.awt.*;
2: import java.awt.image.BufferedImage;
3: import java.io.File;
4: import javax.sound.midi.MidiSystem;
5: import javax.sound.midi.Sequence;
6: import javax.sound.midi.Sequencer;
7: import javax.swing.ImageIcon;
8: import javax.swing.JFrame;
9: public class Game extends JFrame {
10: BufferedImage backBuffer;
11: int FPS = 30;
12: int janelaW = 500;
13: int janelaH = 500;
14: Sequencer player; //ESSE É O NOSSO TOCADOR
15: String musica1 = "src/tutor7/batalha.mid"; //ISSO É SÓ A URL DA NOSSA MÚSICA
16: String musica2 = "src/tutor7/campo.mid"; //ISSO AQUI TAMBÉM É OUTRA URL
17: public void tocarMusica(String nome, int repetir){
18: try{
19: player = MidiSystem.getSequencer(); //INICIA O TOCADOR
20: Sequence musica = MidiSystem.getSequence(new File(nome));//CARREGA A MÚSICA A SER TOCADA
21: player.open(); //ABRE O TOCADOR
22: player.setSequence(musica); //PASSA A MÚSICA QUE VAI SER TOCADA PARA O TOCADOR
23: player.setLoopCount(repetir); //DEFINE QUANTAS VEZES VAI TOCAR A MÚSICA OBS: 0 = 1 vez; 1 = 2 vezes; 2 = 3 vezes...
24: player.start(); //COMEÇA A TOCAR.... CASO QUEIRA PARAR DE TOCAR A MÚSICA BASTA: player.stop();
25: }catch(Exception e){
26: System.out.println("Erro ao tocar: "+nome);
27: }
28: }
29: public void atualizar() {
30: }
31: public void desenharGraficos() {
32: Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI
33: Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...
34: //AQUI VAMOS MANDAR DESENHAR ALGUNS IMAGENS NA TELA
35: //==================================================================================
36: g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!
37: }
38: public void inicializar() {
39: setTitle("Titulo do Jogo!");
40: setSize(janelaW, janelaH);
41: setResizable(false);
42: setDefaultCloseOperation(EXIT_ON_CLOSE);
43: setLayout(null);
44: setVisible(true);
45: backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
46: //===========================================================================
47: //========== É AQUI QUE EU TO CHAMANDO O MÉTODO tocarMusica()================
48: tocarMusica(musica1, 999); //CHAMAMOS O TOCADOR DENTRO DO MÉTODO inicializar()
49: //ENTÃO AO INICAR O GAME, ESSA SERÁ A NOSSA MÚSICA DE FUNDO
50: //===========================================================================
51: }
52: public void run() {
53: inicializar();
54: while (true) {
55: atualizar();
56: desenharGraficos();
57: try {
58: Thread.sleep(1000/FPS);
59: } catch (Exception e) {
60: System.out.println("Thread interrompida!");
61: }
62: }
63: }
64: public static void main(String[] args) {
65: Game game = new Game();
66: game.run();
67: }
68: }
Muito bem.... vamos entender alguns pontos... o método tocarMusica() que criamos vai receber 2 argumentos o nome da música e o número de vezes que ela se repetirá, só reforçando, se você passar 0 (zero) ele vai tocar 1 vez, se você passar 1(um) ele vai tocar 2... então ele vai tocar (n+1) vezes!!!!
Caso você queira tocar um som de um BIP ao clicar, basta chamar o método tocarMusica() dentro do evento de click (estudaremos sobre eventos mais adiante...), outro exemplo, caso você queira emitir um som de tiro em um jogo de nave, basta chamar o mesmo método quando for disparar o tipo, finalizando.... você pode usar o mesmo método para tocar qualquer parte da trilha sonora dos nossos games!!!
(executem aí para ouvir o som tocando!!!)
Até o próximo!!
Nenhum comentário:
Postar um comentário