Arquivos de som suportados pelo Java

2 respostas
r_Jovelli

Alô, alô pessoal… :slight_smile: :slight_smile: :slight_smile:

Meu nome é Rômulo, faço curso técnico em desenvolvimento e decide a dois meses atrás mais ou menos estudar Java a fundo…

Comprei o famoso livro da Kathy Sierra e Bert Bates pela dica de um amigo e baixei a Documentação Java 6 na minha máquina, cheguei em um capítulo no livro que fala sobre a API Java Sound, achei interessante, mas no livro só aborda os pacote javax.sound.midi e então comecei a ler um guia de som q vem junto a documentação…

Verifiquei alguns códigos disponíveis na net e talz, até ai de boa, mas quando executo o player abaixo na linha de comando mesmo… me aparece a RuntimeException mais abaixo, então me veio a dúvida, Quais arquivos de som Java suporta, ou é o meu código q simplesmente não está correto???

Já utilizei os formatos, .avi, .wav, .mpeg, .aiff, .au, .riff, etc, (não utilizei mp3 por que sei q nativamente não suporta, mas esses outros deveria), eh isso ae um abraço, se alguém conseguir me ajudar com algum texto de referência ou coisa do tipo estarei muito grato…

Um Abraço…

import javax.sound.sampled.*;
import java.io.*;

public class Player {
	public void tocar() {

		try {

			AudioInputStream stream1 = AudioSystem.getAudioInputStream(new File("C:/Teste.wav"));

			AudioFormat formato = stream1.getFormat();
			int teste1 = formato.getFrameSize();
			long teste2 = stream1.getFrameLength();
			int teste3 = (int) (teste1 * teste2);

			if (formato.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
				formato = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
								          formato.getSampleRate(),
								          formato.getSampleSizeInBits() * 2,
								          formato.getChannels(),
								          formato.getFrameSize(),
								          formato.getFrameRate(),
								          true);
				stream1 = AudioSystem.getAudioInputStream(formato, stream1);
			}

			DataLine.Info infoOfDataLine = new DataLine.Info(Clip.class, stream1.getFormat(), teste3);
			Clip clip = (Clip) AudioSystem.getLine(infoOfDataLine);

			clip.start();

		} catch(Exception ex) {
			ex.printStackTrace();
			System.out.println("fdsfsa");
		}
	}

	public static void main(String[] args) {
		Player p = new Player();
		p.tocar();
	}
}

Exceção lançada:

c:\JAVA\Classes\Player>java Player

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input str

eam from input file

at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)

at Player.tocar2(Player.java:46)

at Player.main(Player.java:80)

fdsfsa

2 Respostas

r_Jovelli

up
:wink:
:wink:
:wink:

GeekJava

Veja se este código que encontrei na net funciona aí, ele funcionou perfeito comigo, é para som .WAV

import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
 
public class AePlayWave extends Thread {
 
    private String filename;
 
    private Position curPosition;
 
    private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
 
    enum Position {
        LEFT, RIGHT, NORMAL
    };
 
    public AePlayWave(String wavfile) {
        filename = wavfile;
        curPosition = Position.NORMAL;
    }
 
    public AePlayWave(String wavfile, Position p) {
        filename = wavfile;
        curPosition = p;
    }
 
    public void run() {
 
        File soundFile = new File(filename);
        if (!soundFile.exists()) {
            System.err.println("Wave file not found: " + filename);
            return;
        }
 
        AudioInputStream audioInputStream = null;
        try {
            audioInputStream = AudioSystem.getAudioInputStream(soundFile);
        } catch (UnsupportedAudioFileException e1) {
            e1.printStackTrace();
            return;
        } catch (IOException e1) {
            e1.printStackTrace();
            return;
        }
 
        AudioFormat format = audioInputStream.getFormat();
        SourceDataLine auline = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
 
        try {
            auline = (SourceDataLine) AudioSystem.getLine(info);
            auline.open(format);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
            return;
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
 
        if (auline.isControlSupported(FloatControl.Type.PAN)) {
            FloatControl pan = (FloatControl) auline
                    .getControl(FloatControl.Type.PAN);
            if (curPosition == Position.RIGHT)
                pan.setValue(1.0f);
            else if (curPosition == Position.LEFT)
                pan.setValue(-1.0f);
        } 
 
        auline.start();
        int nBytesRead = 0;
        byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
 
        try {
            while (nBytesRead != -1) {
                nBytesRead = audioInputStream.read(abData, 0, abData.length);
                if (nBytesRead >= 0)
                    auline.write(abData, 0, nBytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        } finally {
            auline.drain();
            auline.close();
        }
 
    }
}

Se quiser rodar a classe adicione um método main e dentro dele coloque:

new AePlayWave("caminho_para_um_som.wav").start();

Até mais!

Criado 6 de julho de 2009
Ultima resposta 5 de jan. de 2010
Respostas 2
Participantes 2