Java API son incapable d'arrêter l'enregistrement sur un bouton clic de l'interface utilisateur d'une application Web

voix
1

J'utilise Java API son pour créer une application Web .user Interface (UI) a un bouton qui, clic commence à enregistrer le discours, l'audio enregistré est enregistré dans un fichier audio (.wav ext) .ui a également un bouton de lecture qui les accès au même fichier audio et joue l'enregistrement en arrière. Actuellement, je suis l'enregistrement audio pendant une durée déterminée qui est dans ma demande hardcoded ou se passer de l'interface utilisateur comme paramètre alors que l'enregistrement starts.But maintenant l'exigence est d'arrêter l'enregistrement sur un simple clic sur l'interface utilisateur.

Maintenant, la question est tout en capturant l'audio que je suis l'ouverture d'un targetline en utilisant le code ci-dessous:


publique capture void (int record_time) {

        try {
         AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
         DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
         if(!AudioSystem.isLineSupported(info))
         {
             System.out.println(Line not supported);}

         final TargetDataLine targetDataLine =        (TargetDataLine)AudioSystem.getLine(info);

         targetDataLine.open();
          targetDataLine.start();
         Thread thread = new Thread()
         {
             @Override public void run() 

             {
                 AudioInputStream audioStream = new AudioInputStream(targetDataLine);
                 File audioFile = new File(fileName);

                System.out.println(Recording is going to get saved in path :::: + audioFile.getAbsolutePath());
                 try{
                     AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
                 }
                 catch (IOException e){
                     e.printStackTrace();
                 }
                 System.out.println(Stopped Recording);
             }
         };
         thread.start();
         Thread.sleep(record_time*1000); 
         targetDataLine.stop();
         targetDataLine.close();
        System.out.println(Ended recording test);
        } catch (LineUnavailableException e) {
          System.err.println(Line unavailable:  + e);
          System.exit(-2);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}


Au-dessus du code va arrêter l'enregistrement une fois que le temps d'enregistrement est écoulé.

Mais je veux une autre méthode comme ci-dessous qui, lorsqu'il est appelé à partir jsp (bouton d'arrêt clic) devrait être en mesure d'obtenir le même objet targetline qui est responsable de l'enregistrement en cours et d'arrêter l'enregistrement en cours.

Ci-dessous le code ne fonctionne pas pour moi et l'enregistrement se poursuit


public void stop(){
    try{
        System.out.println(stop :: in stop);
         AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
         DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
         if(!AudioSystem.isLineSupported(info))
         {
             System.out.println(Line not supported);}

         final TargetDataLine targetDataLine = (TargetDataLine)AudioSystem.getLine(info);
         System.out.println(stop Recording....);

         System.out.println(targetDataLine.getLineInfo() in stop:::::::+targetDataLine.getLineInfo());
         System.out.println(targetDataLine.isActive() in stop:::::::+targetDataLine.isActive());
         System.out.println(targetDataLine.isOpen() in stop:::::::+targetDataLine.isOpen());

         targetDataLine.stop();
         targetDataLine.close();
    }
     catch (Exception e) {
          System.err.println(Line unavailable:  + e);
     }
}

S'il vous plaît suggérer une résolution.

Une chose qui pourrait ..pas sûr mais pourrait a un rôle à jouer est la façon dont je fais appel à ces méthodes de mon servlet ..below est le code ....

doPost vide protégé (HttpServletRequest demande, la réponse HttpServletResponse) lance ServletException, IOException {

    String action = request.getParameter(buttonName);
    String record_time = request.getParameter(time);
    System.out.println(action:::+action +time in minutes:::+ record_time);
    int record_time_int =(Integer.parseInt(record_time));
    String fileName = studentXYZ.wav;

    System.out.println(action:::+action +----wavfile:::+fileName+time in minutes:::+ record_time);

    Recorder01 record = new Recorder01();


    if (action != null && (action.equalsIgnoreCase(Capture)) ){

        record.capture(fileName, action,record_time_int);
                request.setAttribute(fileName, fileName);
                request.getRequestDispatcher(/recordAudio.jsp).forward(request, response);

    }

    else if (action != null && action.equalsIgnoreCase(play)) {
        Recorder01 playsound = new Recorder01();
        playsound.play(fileName);
        System.out.println(finished playing recording);
        request.setAttribute(fileName, fileName);
            request.getRequestDispatcher(/recordAudio.jsp).forward(request, response);

    }

    else if(action!=null && action.equalsIgnoreCase(Stop)){
        System.out.println(stop recording called);
        record.stop();
            request.getRequestDispatcher(/recordAudio.jsp).forward(request, response);

    }
}
Créé 26/05/2015 à 06:27
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0
private TargetDataLine targetDataLine;

public void capture() {

    if (targetDataLine == null) {

        try {
            AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
            if (!AudioSystem.isLineSupported(info)) {
                System.out.println("Line not supported");
            }

            targetDataLine = (TargetDataLine) AudioSystem.getLine(info);

            targetDataLine.open();
            targetDataLine.start();
            Thread thread = new Thread() {
                @Override
                public void run() {
                    AudioInputStream audioStream = new AudioInputStream(targetDataLine);
                    File audioFile = new File(fileName);

                    System.out.println("Recording is going to get saved in path :::: " + audioFile.getAbsolutePath());
                    try {
                        AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Stopped Recording");
                }
            };
        } catch (LineUnavailableException e) {
            System.err.println("Line unavailable: " + e);
            System.exit(-2);
        }
    }
}

public void stop() {
    if (targetDataLine != null) {
        System.out.println("stop :: in stop");
        targetDataLine.stop();
        targetDataLine.close();
        targetDataLine = null;
    }
}
Créé 26/05/2015 à 10:12
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more