Hola, tengo una consulta algo "atrevida", trabajo generalmente en php y mysql pero de tanto andar en los foros surgen ideas y con ellas ando tratando de ponerlas en práctica, buscado logré dar con lo que mas o menos buscaba, crear un applet que pueda grabar el microfono del usuario en un browser y este pueda mandar el archivo del mismo (en este un .wav) al servidor esto "medianamente" lo logro, pero quiero mejorar dicho applet agregandole un control de volumen y un vumetro para que pueda ver si esta correcto el nivel de grabacion del microfono. Espero se entienda lo que quiero, lo que tengo es un applet con un boton grabar y parar que toma el audio del microfono del usuario y genera un archvo wav en la computadora del mismo usuario luego este adjuntaria ese archivo para enviarlo al server, pero me falta resolver lo del control de volumen y el vumetro!!!
Alguién puede darme un empujoncito, un tutorial una ayuda!!! Les aclaro que java no es lo mio, pero le pongo ganas!!!
Aqui les dejo el fuente de lo que tengo realizado.
Desde ya muchas gracias
Código PHP:
package CapturarMic;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;
public class CapturarMic extends JApplet{
AudioFormat audioFormat;
TargetDataLine targetDataLine;
final JButton captureBtn = new JButton("Capturar");
final JButton stopBtn = new JButton("Parar");
final JPanel btnPanel = new JPanel();
final ButtonGroup btnGroup = new ButtonGroup();
final JRadioButton aiffBtn = new JRadioButton("AIFF");
final JRadioButton waveBtn = new JRadioButton("WAV",true);
public void init( String args[]){
new CapturarMic();
}
public CapturarMic(){
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
captureBtn.addActionListener(
new ActionListener(){
public void actionPerformed(
ActionEvent e){
captureBtn.setEnabled(false);
stopBtn.setEnabled(true);
captureAudio();
}
}
);
stopBtn.addActionListener(
new ActionListener(){
public void actionPerformed(
ActionEvent e){
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
targetDataLine.stop();
targetDataLine.close();
}
}
);
getContentPane().add(captureBtn);
getContentPane().add(stopBtn);
btnGroup.add(aiffBtn);
btnGroup.add(waveBtn);
btnPanel.add(aiffBtn);
btnPanel.add(waveBtn);
getContentPane().add(btnPanel);
getContentPane().setLayout(new FlowLayout());
setSize(300,220);
setVisible(true);
}
private void captureAudio(){
try{
audioFormat = getAudioFormat();
DataLine.Info dataLineInfo =
new DataLine.Info(
TargetDataLine.class,
audioFormat);
targetDataLine = (TargetDataLine)
AudioSystem.getLine(dataLineInfo);
new CaptureThread().start();
}catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
private AudioFormat getAudioFormat(){
float sampleRate = 44100.0F;
int sampleSizeInBits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = false;
return new AudioFormat(sampleRate,
sampleSizeInBits,
channels,
signed,
bigEndian);
}
class CaptureThread extends Thread{
public void run(){
AudioFileFormat.Type fileType = null;
File audioFile = null;
if(aiffBtn.isSelected()){
fileType = AudioFileFormat.Type.AIFF;
audioFile = new File("prueba.aif");
}else if(waveBtn.isSelected()){
fileType = AudioFileFormat.Type.WAVE;
audioFile = new File("c:/test1/testfermdp.wav");
}
try{
targetDataLine.open(audioFormat);
targetDataLine.start();
AudioSystem.write(
new AudioInputStream(targetDataLine),
fileType,
audioFile);
}catch (Exception e){
e.printStackTrace();
}
}
}
}