Como agregar vumetro y control de volumen a este applet ?

fermdp
23 de Marzo del 2010
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


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();
}
}
}
}

hector
11 de Mayo del 2010
hola, oye disculpa me intereso tu applet y quise ver su funcionamiento ya lo añadi a un html sin embargo al momento de grabar el sonido no me lo guarda al directorio establecido en el codigo, y aclaro que ya cree el directorio y al hacer las pruebas con netbeans todo jala de maravilla pero al pasarlo al html no guarda el archivo, tengo que firmar el applet o se le tienen que dar parametros al momento de llamarlo en html?, disculpa no poder darte una ayuda por el momento con tu problema pero si encuentro algo te lo hare saber.