Riproduzioni suoni

di il
12 risposte

Riproduzioni suoni

Buongiorno,
Tra le altre cose mi sono imbattuto in un problema che, nonostante le ore di ricerca passate sul web, non riesco a risolvere. Ho anche guardato il thread simile presente nel forum, ma invano. In sostanza vorrei riprodurre un file audio dopo un ciclo if. Per farlo ho sintetizzato le mie ricerche nel seguente programma:
import java.io.File;
import javax.sound.sampled.Audiosystem;
import javax.sound.sampled.Clip;

class foglioCOMBANET
{
    public static void main (String args[])
    {
        file prova1= new File("prova1.WAV");
        PlaySound(prova1);
    }

    static void PlaySound(File prova1)
    {
        try
        {
            Clip clip= Audiosysystem.getClip();
            clip.open(Audiosystem.getAudioInputStream(prova1));
            clip.start();

            Thread.sleep(clip.getMicrosecondLenght()/100);
        }
        catch(Exception e)
        {

        }
    }
}
Durante la compilazione risulta l'errore "Exception in thread "main" java.lang.Error: Unresolved compilation problem: file cannot be resolved to a type". Sapreste dirmi come poter aggiustare il programma, in modo che funzioni ?
PS: Il ciclo if verrà inserito più avanti.

12 Risposte

  • Re: Riproduzioni suoni

    Cercando su internet il tuo errore, potrei anche sbagliarmi, potrebbe essere dovuto a delle librerie mancanti nel programma prova così:
    
    import java.io.*;
    import javax.sound.sampled.*;
    
    Prova così.
  • Re: Riproduzioni suoni

    Invece di
    file prova1= new File("prova1.WAV")

    non andrebbe meglio
    File prova1= new File("prova1.WAV")
  • Re: Riproduzioni suoni

    Insesperto ha scritto:


    Cercando su internet il tuo errore, potrei anche sbagliarmi, potrebbe essere dovuto a delle librerie mancanti nel programma prova così:
    
    import java.io.*;
    import javax.sound.sampled.*;
    
    Prova così.
    Grazie per la risposta, purtroppo sostituendo le librerie come da consiglio l'errore permane. Ho anche provato a inserirle con le precedenti ma il problema permane.
  • Re: Riproduzioni suoni

    surfernet ha scritto:


    Invece di
    file prova1= new File("prova1.WAV")

    non andrebbe meglio
    File prova1= new File("prova1.WAV")
    La ringrazio per l'ausilio, nonostante abbia apportato le modifiche in questione il problema rimane, anzi sono "spuntati" nuovi codici errore:
    Audiosysystem cannot be resolved
            Audiosystem cannot be resolved
            The method getMicrosecondLenght() is undefined for the type Clip
    
    Ho anche provato a riformulare il collegamento, passando da prova1.wav a "C:\\Users\\...\\prova1.wav". Il problema rimane però insoluto.
  • Re: Riproduzioni suoni

    E il problema è sempre quello: la sintassi.
    
    // Sbagliato:
    import javax.sound.sampled.Audiosystem;
    
    // Corretto:
    import javax.sound.sampled.AudioSystem;   // la S maiuscola!
    
    Ovviamente, da correggere in ogni parte dove l'hai scritto con la S minuscola.

    Poi c'è il metodo: getMicrosecondLength() (la H va alla fine, non tra la G e la T).

    Vai tranquillo: ti stai solo facendo le ossa.

    PS: non esiste il ciclo IF. IF è un costrutto di selezione, non un costrutto ciclico (di iterazione).
  • Re: Riproduzioni suoni

    Qualche indicazione in più: per programmare è necessario prendere confidenza con i messaggi di errore del compilatore (vale per qualsiasi linguaggio) perchè sono loro che ti dicono cosa (e dove) stai sbagliando.

    Vediamo, quindi, alcune indicazioni prendendo come spunto proprio gli errori che hai ottenuto tu:
    Audiosysystem cannot be resolved
    Audiosystem cannot be resolved
    In entrambi i casi il compilatore ti sta dicendo che non riesce a "risolvere" un nome che tu hai usato (può essere il nome di un tipo, come nel caso specifico, o il nome di una variabile). Nel 90% dei casi questo errore viene sollevato perchè si è scritto male qualcosa. Il compilatore ti dice esattamente COSA hai scritto che lui non riesce a trovare (e ti dice anche il numero della linea dove ha trovato ciò che hai scritto tu).
    In questo caso, la prima cosa da fare è controllare di aver scritto giusto. Nei messaggi precedenti era la parola File scritta con la "F" minuscola, in questi due casi hai scritto sempre System con la minuscola (nel primo caso hai anche aggiunto 2 lettere di troppo). Se ritieni di aver scritto giusto, allora è molto probabile che tu stia facendo riferimento ad una classe che però non hai tra gli import. Quindi, la seconda cosa da fare è assicurarsi di aver importato tutto quello che si è cercato di usare (le uniche classi che non serve importare sono quelle del package java.lang, che sono importate di default).
    The method getMicrosecondLenght() is undefined for the type Clip
    Anche qui: il compilatore non trova un metodo che stai cercando di usare all'interno di una classe. Ti dice qual è il metodo che non trova (in questo caso getMicrosecondLenght()) e ti dice anche dove lo sta cercando (nella classe Clip). Stesso discorso: nel 90% dei casi il metodo è stato scritto male, ma potrebbe essere che stai cercando di usare un metodo che non è accessibile (vedi modificatori di accesso "private", "protected", ecc). In questo caso entra in gioco la documentazione (se è un metodo di una classe del core o di una libreria) oppure dovrai andare nel tuo sorgente e controllare la firma di quel metodo. Più raro, ma non impossibile, stai cercando di usare un metodo di una classe che fa parte di una libreria, ma che non esiste nella versione che stai usando. In questo caso o aggiorni la libreria o modifichi il codice per adeguarti a quella che hai.

    Cerca di familiarizzare con questi messaggi di errore. Leggili e cerca di capirne il significato, per sapere cosa, dove e come andare a correggere.
  • Re: Riproduzioni suoni

    LeleFT ha scritto:


    E il problema è sempre quello: la sintassi.
    
    // Sbagliato:
    import javax.sound.sampled.Audiosystem;
    
    // Corretto:
    import javax.sound.sampled.AudioSystem;   // la S maiuscola!
    
    Ovviamente, da correggere in ogni parte dove l'hai scritto con la S minuscola.

    Poi c'è il metodo: getMicrosecondLength() (la H va alla fine, non tra la G e la T).

    Vai tranquillo: ti stai solo facendo le ossa.

    PS: non esiste il ciclo IF. IF è un costrutto di selezione, non un costrutto ciclico (di iterazione).
    Perfetto, ora funziona tutto benissimo!!
  • Re: Riproduzioni suoni

    TIFilippo ha scritto:


    LeleFT ha scritto:


    Qualche indicazione in più: per programmare è necessario prendere confidenza con i messaggi di errore del compilatore (vale per qualsiasi linguaggio) perchè sono loro che ti dicono cosa (e dove) stai sbagliando.

    Vediamo, quindi, alcune indicazioni prendendo come spunto proprio gli errori che hai ottenuto tu:
    Audiosysystem cannot be resolved
    Audiosystem cannot be resolved
    In entrambi i casi il compilatore ti sta dicendo che non riesce a "risolvere" un nome che tu hai usato (può essere il nome di un tipo, come nel caso specifico, o il nome di una variabile). Nel 90% dei casi questo errore viene sollevato perchè si è scritto male qualcosa. Il compilatore ti dice esattamente COSA hai scritto che lui non riesce a trovare (e ti dice anche il numero della linea dove ha trovato ciò che hai scritto tu).
    In questo caso, la prima cosa da fare è controllare di aver scritto giusto. Nei messaggi precedenti era la parola File scritta con la "F" minuscola, in questi due casi hai scritto sempre System con la minuscola (nel primo caso hai anche aggiunto 2 lettere di troppo). Se ritieni di aver scritto giusto, allora è molto probabile che tu stia facendo riferimento ad una classe che però non hai tra gli import. Quindi, la seconda cosa da fare è assicurarsi di aver importato tutto quello che si è cercato di usare (le uniche classi che non serve importare sono quelle del package java.lang, che sono importate di default).
    The method getMicrosecondLenght() is undefined for the type Clip
    Anche qui: il compilatore non trova un metodo che stai cercando di usare all'interno di una classe. Ti dice qual è il metodo che non trova (in questo caso getMicrosecondLenght()) e ti dice anche dove lo sta cercando (nella classe Clip). Stesso discorso: nel 90% dei casi il metodo è stato scritto male, ma potrebbe essere che stai cercando di usare un metodo che non è accessibile (vedi modificatori di accesso "private", "protected", ecc). In questo caso entra in gioco la documentazione (se è un metodo di una classe del core o di una libreria) oppure dovrai andare nel tuo sorgente e controllare la firma di quel metodo. Più raro, ma non impossibile, stai cercando di usare un metodo di una classe che fa parte di una libreria, ma che non esiste nella versione che stai usando. In questo caso o aggiorni la libreria o modifichi il codice per adeguarti a quella che hai.

    Cerca di familiarizzare con questi messaggi di errore. Leggili e cerca di capirne il significato, per sapere cosa, dove e come andare a correggere.
    Buongiorno,
    La ringrazio molto per le spiegazioni, oltre che ben accette anche molto utili. Questa cosa non mi era mai stata spiegata prima, anche se ritengo che il libro laddove sto studiando la dovrebbe trattare pari passo con le altre tematiche.
    Saluti, Filippo.
  • Re: Riproduzioni suoni

    LeleFT ha scritto:


    E il problema è sempre quello: la sintassi.
    
    // Sbagliato:
    import javax.sound.sampled.Audiosystem;
    
    // Corretto:
    import javax.sound.sampled.AudioSystem;   // la S maiuscola!
    
    Ovviamente, da correggere in ogni parte dove l'hai scritto con la S minuscola.

    Poi c'è il metodo: getMicrosecondLength() (la H va alla fine, non tra la G e la T).

    Vai tranquillo: ti stai solo facendo le ossa.

    PS: non esiste il ciclo IF. IF è un costrutto di selezione, non un costrutto ciclico (di iterazione).
    Se possibile vorrei farle ancora una domanda sull'argomento: per quale ragione quando vado a compilare il bytecode, e successivamente ad eseguirlo, il programma si ferma dopo il primo audio?
    Mi spiego meglio, ho creato il seguente codice:
    
    Scanner sc= new Scanner (System.in);
    
            File prova1= new File("C:\\Users\\...\\Voce 001.wav");
            PlaySound(prova1);
            System.out.println("Benvenuto,inserire nome utente e password. Per accedere come visitatore digitare Guest");
            
            File prova2= new File("C:\\Users\\...\\Voce 002.wav");
            PlaySound(prova2);
            System.out.println("Digitare ok per continuare.");
            String val1=sc.nextLine();
    
    Ovviamente tutto racchiuso in public static void main (String args[]). Inoltre la classe a cui gli audio fanno riferimento è la seguente:
    
    public static void PlaySound(File prova1)
        {
            try
            {
                Clip clip= AudioSystem.getClip();
                clip.open(AudioSystem.getAudioInputStream(prova1));
                clip.start();
    
                Thread.sleep(clip.getMicrosecondLength()/100);
            }
            catch(Exception e)
            {
    
            }
        }
    
    Come detto in precedenza, l'audio riesco a riprodurlo ma poi il programma si blocca, impedendo allo scanner di attivarsi.
    Idee?
  • Re: Riproduzioni suoni

    @Filippo, questa affermazione
    La ringrazio molto per le spiegazioni, oltre che ben accette anche molto utili. Questa cosa non mi era mai stata spiegata prima, anche se ritengo che il libro laddove sto studiando la dovrebbe trattare pari passo con le altre tematiche.
    Non ha senso per diversi motivi:

    1) se un singolo libro dovesse comprendere anche aspetti di questo genere, dovrebbe avere 10000/20000 pagine, non tra le 300 e le 500. Considera che ci sono libri da 1200 pagine che trattano singoli argomenti
    2) queste informazioni le trovi tranquillamente facendo una banale ricerca con Google e leggendo la documentazione relativa al compilatore.
    3) il 75/80% delle informazioni che servono per programmare sono 'informazioni di servizio' che uno acquisisce con la pratica e che non richiedono chissa' quale prerequisito teorico. Giusto buon senso.

    Se speri di imparare a programmare semplicemente studiando quello che c'e' su un'unico libro, parti male e finisci peggio. La stragrande maggioranza delle competenze 'operative' te le devi acquisire per conto tuo. Per ogni ora di lezione, probabilmente ne dovrai spendere 10 o anche 100 per acquisire la manualita' operativa legata a quella singola ora. Ma questa e' solo una una super-SOTTO stima!

    Ed il numero di libri che dovrai studiare si aggira sulle MOLTE DECINE, ma puo' arrivare anche a MOLTE CENTINAIA con gli anni , SE vorrai diventare un programmatore bravo.

    Quelli scarsi si fermano a QUALCHE libro.
  • Re: Riproduzioni suoni

    Si ferma perche' il parametro di Thread.sleep e' in millisecondi, tu hai un tempo in microsecondi DIVISO PER 100,

    cioe'

    MILLISECONDI*10

    Questo fa parte dello STUDIO DELLA DOCUMENTAZIONE della libreria Java che NESSUNO ti insegnera' mai perche' sono CENTINAIA DI MIGLIAIA DI PAGINE.
  • Re: Riproduzioni suoni

    migliorabile ha scritto:


    @Filippo, questa affermazione
    La ringrazio molto per le spiegazioni, oltre che ben accette anche molto utili. Questa cosa non mi era mai stata spiegata prima, anche se ritengo che il libro laddove sto studiando la dovrebbe trattare pari passo con le altre tematiche.
    Non ha senso per diversi motivi:

    1) se un singolo libro dovesse comprendere anche aspetti di questo genere, dovrebbe avere 10000/20000 pagine, non tra le 300 e le 500. Considera che ci sono libri da 1200 pagine che trattano singoli argomenti
    2) queste informazioni le trovi tranquillamente facendo una banale ricerca con Google e leggendo la documentazione relativa al compilatore.
    3) il 75/80% delle informazioni che servono per programmare sono 'informazioni di servizio' che uno acquisisce con la pratica e che non richiedono chissa' quale prerequisito teorico. Giusto buon senso.

    Se speri di imparare a programmare semplicemente studiando quello che c'e' su un'unico libro, parti male e finisci peggio. La stragrande maggioranza delle competenze 'operative' te le devi acquisire per conto tuo. Per ogni ora di lezione, probabilmente ne dovrai spendere 10 o anche 100 per acquisire la manualita' operativa legata a quella singola ora. Ma questa e' solo una una super-SOTTO stima!

    Ed il numero di libri che dovrai studiare si aggira sulle MOLTE DECINE, ma puo' arrivare anche a MOLTE CENTINAIA con gli anni , SE vorrai diventare un programmatore bravo.

    Quelli scarsi si fermano a QUALCHE libro.
    Buongiorno @migliorabile, ho capito cosa intende dire e non sono totalmente d'accordo. Certamente se un libro dovesse trattare tutti i singoli errori allora sarebbe una cosa quasi inimmaginabile, o meglio eternamente lunga. Questo non toglie però che un breve excursus sugli errori principali ci debba essere; non sto dicendo che ci dovrebbe essere scritto per filo e per segno ogni possibile variazione, ma almeno il significato di un errore generico come "cannot be resolved to a type" credo sia di dovere inserirlo; basterebbe anche una delucidazione di poche righe.
    Seconda cosa sono dell'idea che un libro serva proprio per evitare inutili ricerche in Google. Mi spiego meglio: un manuale fatto bene, una volta letto attentamente, dovrebbe permettere all'operatore di eseguire le azioni contenute nel libro senza lacune. Se dopo aver completato la lettura di un paragrafo sentissi la necessità di cercare in internet le cose appena viste, allora vuol dire che il trattato ha fallito nel suo scopo.
    La rete è molto utile, senza dubbio alcuno, ma ritengo che debba essere usata in maniera complementare con un eventuale testo, magari per approfondire delle cose che però ci devono comunque essere nel libro.
    Per quanto riguarda la sua affermazione sulle 'informazioni di servizio' sono d'accordo, non bisogna però dimenticare che la pratica deve andare pari passo con la teoria. Einstein diceva sempre che "La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché."; questo per dire che la pratica serve per creare le cose, ma senza la teoria sarebbe impossibile risolvere eventuali problematiche che spuntano durante l'esecuzione del programma.
    Certamente per diventare un bravo programmatore dovrò leggere e studiare decine di libri e passare molte ore davanti a uno schermo, ma per ora ritengo sia meglio cominciare dalle basi, per farsi un idea generale di ciò che mi aspetta e poi approfondire in futuro le varie tematiche.
    Detto questo la ringrazio per le spiegazioni avute su come risolvere il problema posto in precedenza. Saluti.
Devi accedere o registrarti per scrivere nel forum
12 risposte