Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Registrare da uscita audio o altoparlanti

    Ho cercato su internet ma non sono riuscito a trovare una soluzione. Vorrei presentare una domanda per registrare il suono proveniente dagli altoparlanti. Ho provato questo codice, ma mi permette di registrare solo dal microfono. Ringrazio tutti coloro che mi aiutano
    codice:
    try {
        AudioFormat format = getAudioFormat();
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
    
        // checks if system supports the data line
        if (!AudioSystem.isLineSupported(info)) {
            System.out.println("Line not supported");
            System.exit(0);
        }
        line = (TargetDataLine) AudioSystem.getLine(info);
    
        line.open(format);
        line.start();   // start capturing
    
        System.out.println("Start capturing...");
    
        AudioInputStream ais = new AudioInputStream(line);
    
        System.out.println("Start recording...");
    
        // start recording
        AudioSystem.write(ais, fileType, wavFile);
    
    } catch (LineUnavailableException ex) {
        ex.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Tecnologiamiky Visualizza il messaggio
    Ho cercato su internet ma non sono riuscito a trovare una soluzione. Vorrei presentare una domanda per registrare il suono proveniente dagli altoparlanti.
    Non sono molto ferrato sulla Java Sound API ma innanzitutto dire "il suono proveniente dagli altoparlanti" è un pelino improprio.

    Comunque, per registrare ciò che va in uscita, dovresti registrare da un "mixer". Ogni sistema può avere un set di mixer differenti, quindi dovresti perlomeno farlo scegliere all'utente.

    A grandi linee (e spero sensato), qualcosa tipo:

    codice:
    Mixer.Info mixerInfoScelto = //........
    
    DataLine.Info dataLineInfo = //....... più o meno come hai già fatto
    
    Mixer mixer = AudioSystem.getMixer(mixerInfoScelto);
    
    TargetDataLine targetDataLine = (TargetDataLine) mixer.getLine(dataLineInfo);

    Grosso modo eh ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Ho provato con questo codice
    codice:
    try {
                
                Mixer.Info mixers[] = AudioSystem.getMixerInfo();
                Mixer.Info mixer_info = null;
                
                for(int i=0;i<mixers.length;i++)
                    if(mixers[i].getName().contains("altoparlanti"))
                    {
                        mixer_info=mixers[i];
                    }
                
                Mixer mixer = AudioSystem.getMixer(mixer_info);
    
                
                AudioFormat format = getAudioFormat();
                DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
                //Port.Info info = Port.Info.MICROPHONE;
     
                // checks if system supports the data line
                if (!AudioSystem.isLineSupported(info)) {
                    System.out.println("Line not supported");
                    System.exit(0);
                }
                //line = (TargetDataLine) AudioSystem.getLine(info);
                
                line = (TargetDataLine) mixer.getLine(info);
              
                line.open(format);
                line.start();   // start capturing
     
                System.out.println("Start capturing...");
     
                AudioInputStream ais = new AudioInputStream(line);
     
                System.out.println("Start recording...");
     
                // start recording
                AudioSystem.write(ais, fileType, wavFile);
     
            } catch (LineUnavailableException ex) {
                ex.printStackTrace();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }

    E mi dà questo errore, la riga dell'errore è quella in grasetto e in corsivo
    codice:
    Exception in thread "main" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 16000.0 Hz, 8 bit, stereo, 2 bytes/frame, 
        at com.sun.media.sound.DirectAudioDevice.getLine(DirectAudioDevice.java:174)
        at JavaSoundRecorder.start(JavaSoundRecorder.java:65)
    Come potrei risolvere?

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.