Existe alguma forma de reproduzir um som em Java, sem utilizar API nenhuma, passando somente a frequência e a intensidade??
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
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.
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.
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.
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