Audio

5 respostas
U

Existe alguma forma de reproduzir um som em Java, sem utilizar API nenhuma, passando somente a frequência e a intensidade??

5 Respostas

J

Oi ununes.
Sem api não. No windows existe uma função chamada beep
Você pode mapear a dll responsável, mas imagino que usar uma api mais adequada como o javasound seja a melhor opção.

public static void Beep( int frequency, int duration )

http://www.oracle.com/technetwork/java/index-139508.html

Se quiser ir mais longe aconselho a usar a arquitetura vst da steinberg:
api em object pascal
http://www.axiworld.be/vst.html

api original c++
http://ygrabit.steinberg.de/~ygrabit/public_html/index.html

U

O que eu preciso é algo parecido com o Beep do C++ mesmo, dexia eu explicar:

Preciso emitir um beep de Z segundos em uma frequência X e numa intensidade (volume) Y, porém, na saída de audio do PC, para sair nas caixas de som.

M

Tem um esquema que toca na caixa de som do PC.
Com MIDI.

Vai um codigo de exemplo.

import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.sound.midi.MidiChannel;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Synthesizer;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class SoundTest extends JPanel {
	private static final long serialVersionUID = 1L;

	public SoundTest() throws Exception {
		setBorder(new TitledBorder("Click to Focus"));
		addKeyListener(new Player());
		setFocusable(true);
	}

	private class Player extends KeyAdapter {
		private MidiChannel channel;

		public Player() throws Exception {
			Synthesizer synth = MidiSystem.getSynthesizer();
			synth.open();
			channel = synth.getChannels()[0];
		}

		public void keyTyped(KeyEvent e) {
			channel.noteOn((int) e.getKeyChar(), 100);
			System.out.println((int) e.getKeyChar() + ":" + e.getKeyCode());
		}
	}

	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame("JPiano");
		frame.setMinimumSize(new Dimension(100, 100));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setContentPane(new SoundTest());
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}

Execute, clique na caixa e aperte os botoes do teclado.

V

Dê uma pesquisada na API javax.sound. É uma das APIs padrão do Java, não precisa de nenhum .jar externo. Ela permite um controle bastante fino dos canais de áudio. Com certeza dá para fazer exatamente o que você quer.

U

Valeu a ajuda galera, após uma pesquisa exaustiva sobre as várias APIs estou usando o JASS http://www.cs.ubc.ca/~kvdoel/jass/ com excelência de resultados.

Obrigado

Criado 25 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 5
Participantes 4