Como capturar som no java

bom dia :grin:

sou iniciante em java, gostaria de saber como poderia entrar com algum
som e armazenalo em um banco de dados assim criando um algoritmo de
execução de comando baseado no som (voz)
q classe daria esse suporte?
e alguem tem alguma apostila do JSAPI (freeTTS)?

obrigado

[quote=“businesss”]bom dia :grin:

sou iniciante em java, gostaria de saber como poderia entrar com algum
som e armazenalo em um banco de dados assim criando um algoritmo de
execução de comando baseado no som (voz)
q classe daria esse suporte?
e alguem tem alguma apostila do JSAPI (freeTTS)?

obrigado[/quote]

Já passou por aqui ? FreeTTS 1.2

Pode dar uma olhada também em JavaSpeech.
http://java.sun.com/products/java-media/speech/

Se você quer fazer só captura de som, pode ver JMF também.
http://java.sun.com/products/java-media/jmf/

Agora uma dica…
Se você está pensando em criar um banco de dados de áudio para trabalhar com texto pra voz ou voz para texto acho um trabalho interessante porém muito difícil.
Conversei sobre isso com um professor e dei uma pesquisada no assunto, essa API FreeTTS e JavaSpeech, possuem uma gramática da linguagem que ela trabalha (na maioria dos casos Inglês).
Quando você passa uma String para ser sonificada, é feita toda uma verificação de letras, sílabas e fonemas da palavra na gramática da API.
Quando achado o valor equivalente de cada sílaba, este é um conjunto de bits…
Assim, uma palavra pode possuir várias sílabas e quando é verificado cada tipo de som, etc esses bits são concatenados e transformados em um Stream que a API converte para áudio, ou seja…nenhuma API trabalho com arquivos de áudio, o áudio é gerado em tempo de execução.

Talvez isso nem venha a ser o seu caso, mas espero ter ajudado!
Abraço!

Realmente não é fácil, estou desenvolvendo um trabalho sobre Reconhecimento Automático do Locutor mas não é nada fácil. Você pode começar abrindo e executando arquivos wave em Java com este código. Te digo que você deve estudar mais sobre reconhecimento de voz do que java.

Boa sorte

[code]import java.io.;
import javax.sound.sampled.
;

public class SoundJava
{

private AudioFormat format; 
private byte[] samples; 
 
public SoundJava(String filename){ 
    try{ 
        AudioInputStream stream = AudioSystem.getAudioInputStream(new File(filename)); 
        format = stream.getFormat(); 
        samples = getSamples(stream); 
    } 
    catch (UnsupportedAudioFileException e){ 
        e.printStackTrace(); 
} 
catch (IOException e){ 
        e.printStackTrace(); 
    } 
} 
 
public byte[] getSamples(){ 
    return samples; 
} 
 
public byte[] getSamples(AudioInputStream stream){ 
    int length = (int)(stream.getFrameLength() * format.getFrameSize()); 
    byte[] samples = new byte[length]; 
    DataInputStream in = new DataInputStream(stream); 
    try{ 
        in.readFully(samples); 
    } 
    catch (IOException e){ 
        e.printStackTrace(); 
    } 
    return samples; 
} 
 

public void play(InputStream source){ 
    // 100 ms buffer for real time change to the sound stream 
    int bufferSize = format.getFrameSize() * Math.round(format.getSampleRate() / 10); 
    byte[] buffer = new byte[bufferSize]; 
    SourceDataLine line; 
    try{ 
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); 
        line = (SourceDataLine)AudioSystem.getLine(info); 
        line.open(format, bufferSize); 
    } 
    catch (LineUnavailableException e){ 
        e.printStackTrace(); 
        return; 
    } 
    line.start(); 
    try{ 
        int numBytesRead = 0; 
        while (numBytesRead != -1){ 
            numBytesRead = source.read(buffer, 0, buffer.length); 
            if (numBytesRead != -1) 
                line.write(buffer, 0, numBytesRead); 
        } 
    } 
    catch (IOException e){ 
        e.printStackTrace(); 
    } 
    line.drain(); 
    line.close(); 
} 
 
public static void main(String[] args){ 
    SoundJava player = new SoundJava("casa.wav"); 
    InputStream stream = new ByteArrayInputStream(player.getSamples()); 
    player.play(stream); 
    System.exit(0); 
} 

}[/code]

Eu estava proucurando algum topico para poder falar em uma maquina e sair no audio de outra maquina (Stream )

Mas me deparei com esse topico !!

Para capturar audio …
Classe pronta , funcionando !

[code]package com.desenv.logica;

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

public class CapturandoSom {
// record duration, in milliseconds
static final long RECORD_TIME = 60000; // 1 minute

// path of the wav file
File wavFile = new File("C:/Users/Marcos/Desktop/music.wav");

// format of audio file
AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;

// the line from which audio data is captured
TargetDataLine line;

/**
 * Defines an audio format
 */
AudioFormat getAudioFormat() {
    float sampleRate = 16000;
    int sampleSizeInBits = 8;
    int channels = 2;
    boolean signed = true;
    boolean bigEndian = true;
    AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
    return format;
}

/**
 * Captures the sound and record into a WAV file
 */
void start() {
    try {
        AudioFormat format = getAudioFormat();
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

        // checks if system supports the data line
        if (!AudioSystem.isLineSupported(info)) {
            System.out.println("Line not supported");
            System.exit(0);
        }
        line = (TargetDataLine) AudioSystem.getLine(info);
        line.open(format);
        line.start();   // start capturing

        System.out.println("Start capturing...");

        AudioInputStream ais = new AudioInputStream(line);

        System.out.println("Start recording...");

        // start recording
        AudioSystem.write(ais, fileType, wavFile);

    } catch (LineUnavailableException ex) {
        ex.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

/**
 * Closes the target data line to finish capturing and recording
 */
void finish() {
    line.stop();
    line.close();
    System.out.println("Finished");
}

/**
 * Entry to run the program
 */
public static void main(String[] args) {
    final CapturandoSom recorder = new CapturandoSom();

    // creates a new thread that waits for a specified
    // of time before stopping
    Thread stopper = new Thread(new Runnable() {
        public void run() {
            try {
                Thread.sleep(RECORD_TIME);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            recorder.finish();
        }
    });

    stopper.start();

    // start recording
    recorder.start();
}

}[/code]

Agora quem conseguir me ajudar no meu projeto …
Agradeço !!!

Pois está tenso d+ …

Projeto ==>

Falar em uma maquina e o som sair em outra maquina !!
Podendo ser intranet ou internet msmo =)

Obrigado !

ligado a som conheço estes dois métodos…

[code]
public void carregarSom(int posSom) {
AudioInputStream sound = null;
try {

        sound = AudioSystem.getAudioInputStream(this.getClass().getResource(colecao_sons[posSom] + ".WAV"));
    } catch (UnsupportedAudioFileException e) {
        e.printStackTrace();

        JOptionPane.showMessageDialog(null, "problema no som", "problema no som", JOptionPane.INFORMATION_MESSAGE);
    } catch (IOException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "problema no som", "problema no som", JOptionPane.INFORMATION_MESSAGE);
    }
    DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
    try {
        clip = (Clip) AudioSystem.getLine(info);
    } catch (LineUnavailableException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "problema no som", "problema no som", JOptionPane.INFORMATION_MESSAGE);
    }
    try {
        clip.open(sound);
    } catch (LineUnavailableException e) {
        JOptionPane.showMessageDialog(null, "problema no som", "problema no som", JOptionPane.INFORMATION_MESSAGE);
        e.printStackTrace();
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "problema no som", "problema no som", JOptionPane.INFORMATION_MESSAGE);
        e.printStackTrace();
    }
}
public void tocaSom() {
    clip.start();
}
[/code]

[code]
//arquivos para som
private Clip clip;
private String[] colecao_sons = {“CLICK11”,“MAGNETIC_vitoriaBingo”,“MUSHY_novojogo”,"_LASER_trocacartela"};

carregarSom(3);
tocaSom();[/code]

Pow veio , to tentando aqui agora com JavaScript …
No Html 5 da pra fazer isso !!

Ainda estou nessa guerra !

Pq eu tenho que pegar o audio no pc do cliente e jogar para o outro cliente ouvir …
Sendo que o cliente que vai ouvir , ele apenas ouve , pq é um raspeberry pi …

É um sistema de Audio para pessoas falar e sair nas caixas de som dos respectivos raspberrypi :smiley:

É um sistema de Audio simplex , sendo que é necessario passar pelo servidor xD

Não pode ser ponto-a-ponto …