IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

Temps d'exécution d'un son wav variable


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 27
    Par défaut Temps d'exécution d'un son wav variable
    Salut
    Mon probleme est le suivant :
    Avec un programme de découpage de son j ai mesuré la duré d un wav qui est 122ms . normalement quand il se déclenche a 2878ms il doit terminé vers 3000ms.
    Or j ai trouve un dépassement variable du temps d exécution dans mon programme:

    *1ere essai:
    -> temps au déclenchement du bip : temp :2878ms
    -> temps a l arrêt du bip : 3156ms.
    *2eme essai:
    -> temps au déclenchement du bip : 2878ms
    -> temps a l arrêt du bip : 3329 ms
    3 eme essai:
    -> temps au déclenchement du bip : 2878 ms
    -> temps a l arrêt du bip :3250ms

    Le temps d exécution du bip n est pas constant et dépasse se qui est convenu . Cette erreur s accumule et a la fin du programme le déclenchement devient décalé de plusieurs secondes se qui est pour mes besoins indésirable.
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Si tu nous disais avec quoi tu fait tes essais ? (code, librairie, etc ...)

    Parce que la c'est un peu vague comme problème. Tu mesures comment tes delai etc ...

    tu comptes faire un sequenceur ou un truc qui doit rester synchronisé a un timer ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 27
    Par défaut
    désolé d etre aussi vague, voila se que j ai fais:
    j utilse cette class pour le wav :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    package son;
     
    import java.io.*;
    import java.net.URL;
     
    import javax.activation.MailcapCommandMap;
    import javax.sound.sampled.*;
     
     
    public class sound {
     
    	private AudioFormat format;
    	private byte[] samples;
     
    	public sound(String filename){
    		try{
    			/*URL url = this.getClass().getClassLoader().getResource(filename);
    	         AudioInputStream stream = AudioSystem.getAudioInputStream(url);*/
    			//AudioInputStream stream = AudioSystem.getAudioInputStream(new File(	getClass().getResource(filename).getFile()));
    			//ca m a vraiment cassé le cul se truc esperant que ca marche :)
    			AudioInputStream stream = AudioSystem.getAudioInputStream(sound.class.getResourceAsStream("/ressources/"+filename));
    			//AudioInputStream stream = AudioSystem.getAudioInputStream(new File(filename));
    			format = stream.getFormat();
    			samples = getSamples(stream);
    		}
    		catch (UnsupportedAudioFileException e){
    			e.printStackTrace();
    	}
    	catch (IOException e){
    			e.printStackTrace();
    		}
    	}
     
    	public byte[] getSamples(){
    		return samples;
    	}
     
    	public byte[] getSamples(AudioInputStream stream){
    		int length = (int)(stream.getFrameLength() * format.getFrameSize());
    		byte[] samples = new byte[length];
    		DataInputStream in = new DataInputStream(stream);
    		try{
    			in.readFully(samples);
    		}
    		catch (IOException e){
    			e.printStackTrace();
    		}
    		return samples;
    	}
     
     
    	public void play(InputStream source){
    		// 100 ms buffer for real time change to the sound stream
    		int bufferSize = format.getFrameSize() * Math.round(format.getSampleRate() / 10);
    		byte[] buffer = new byte[bufferSize];
    		SourceDataLine line;
    		try{
    			DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
    			line = (SourceDataLine)AudioSystem.getLine(info);
    			line.open(format, bufferSize);
    		}
    		catch (LineUnavailableException e){
    			e.printStackTrace();
    			return;
    		}
    		line.start();
    		try{
    			int numBytesRead = 0;
    			while (numBytesRead != -1){
    				numBytesRead = source.read(buffer, 0, buffer.length);
    				if (numBytesRead != -1)
    					line.write(buffer, 0, numBytesRead);
    			}
    		}
    		catch (IOException e){
    			e.printStackTrace();
    		}
    		line.drain();
    		line.close();
    	}
     
     
    }
    Pour la mesure des delais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long begin = System.currentTimeMillis();
    InputStream stream = new ByteArrayInputStream(player.getSamples());
    						player.play(stream);
    long end = System.currentTimeMillis();
    long delai=end-begin ;
    J utilse les Thread pour déclecher le son:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public void run() {
     
    		try
    		{
                         while(on)
    			{
     
    						Thread.sleep(2878);
     
    						InputStream stream = new ByteArrayInputStream(player.getSamples());
    						player.play(stream);
     
    			}
    		}
    	}

Discussions similaires

  1. [2005] Temps d'exécution d'une requête variable suivant le contexte utilisé
    Par mic.gil dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/05/2014, 15h05
  2. [Débutant] jouer deux sons wav en meme temps
    Par dcolin dans le forum Signal
    Réponses: 1
    Dernier message: 11/07/2011, 13h18
  3. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48
  4. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39
  5. Existe t'il un composant permettant de jouer un son wav?
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/06/2002, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo