Concaténer 2 fichiers MP3 [Résolu]

imasho 39 Messages postés vendredi 18 avril 2014Date d'inscription 29 novembre 2015 Dernière intervention - 9 août 2014 à 04:27 - Dernière réponse : leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention
- 10 août 2014 à 21:13
Bonjour,
Svp je cherche un moyen pour mettre 2 fichiers mp3 dans un même fichiers, de tel façon qu'il suffit de lancer le fichier résultant et entendre les 2 mp3 l'un après l'autre en utilisant java.
Mercii pour chaque aide, je serai très reconnaissante.
Afficher la suite 

5 réponses

Répondre au sujet
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 9 août 2014 à 19:29
0
Utile
1
Salut Imasho,
il s'agit des flux d'entrée/sortie. Le package java.io contient des classes pour la gestion de ces genres de flux. Voici une proposition de réponse à ton problème.
public class FusionFichiers 
{
    /** Chemin vers le fichier1  */
    public static final String FICHIER1 = "a.mp3";
    /** Chemin vers le fichier2  */
    public static final String FICHIER2 = "b.mp3";
    /**Chemin où sera produit le fichier fusion*/
    public static final String FUSION = "c.mp3";
    
    public static void main (String [] args)
    {
        //nous déclarons nos objets en dehors du
        //bloc try/catch
        BufferedInputStream bis1 = null;
        BufferedInputStream bis2 = null;
        BufferedOutputStream bos = null;        
        try
        {
            //on instancie nos objets :
            //bis1 va lire le fichier1
            //bis2 va lire le fichier2
            //bos va ecrire le nouveau fichier            
            bis1 = new BufferedInputStream(new FileInputStream(new File(FICHIER1)));
            bis2 = new BufferedInputStream(new FileInputStream(new File(FICHIER2)));
            bos = new BufferedOutputStream(new FileOutputStream(new File(FUSION)));
                        
            //on crée un tableau de byte
            //pour indiquer le nombre de bytes
            //lus à chaque tour de boucle
            byte [] buf = new byte[8];
            
            //Tant que l'affectation dans la variable est pssible, on boucle
            // Lorsque la lecture du fichier est terminée, l'affectation n'est
            //plus possible et on sort de la boucle
            System.out.println("Lecture de "+FICHIER1);
            while(bis1.read(buf) != -1)
            {
                //on écrit dans le fichier de sortie
                bos.write(buf);
                buf = new byte[8];                
            }
             System.out.println("Lecture de "+FICHIER2);
             while(bis2.read(buf) != -1)
            {
                //on écrit dans le fichier de sortie
                bos.write(buf);
                buf = new byte[8];                
            }
            System.out.println(" Fussion terminée");            
        }
        catch(FileNotFoundException e)
        {
            //Cette exception est levée si 
            // l' objet  BufferedInputStream ne trouve 
            //aucun fichier
            System.out.println(e.getMessage());
        }
        catch(IOException e)
        {
            //celle ci se produit lors d'une erreur
            // d'écriture et de lecture
            System.out.println(e.getMessage());
        }
        finally
        {
            //on ferme nos fux de données dans un bloc finally
            //pour s'assurer que ces instructions seront exécutées
            // dans tous les cas même si une exception  est levée
            try 
            {
              if(bis1 != null)
                  bis1.close();
              
              if(bis2 != null)
                  bis2.close();
              
              if(bos != null)
                  bos.close();
            } 
            catch (IOException e) 
            {
                System.out.println(e.getMessage());
            }
        }
    }
    
}

NHenry 14135 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 24 avril 2018 Dernière intervention - 9 août 2014 à 20:02
Sauf erreur de ma part, tu concatènes brutalement les fichiers, alors que selon la description, il faudrait analyser les fichiers afin de faire un assemblage des 2 fichier audio.
Avec ta méthode, tu ignores les entêtes, et si les 2 fichiers ne sont pas configurés pareil (cadence d'échantillonnage, débit, ... différent) ça ne fonctionnera pas.
Commenter la réponse de leplutonien
imasho 39 Messages postés vendredi 18 avril 2014Date d'inscription 29 novembre 2015 Dernière intervention - 10 août 2014 à 14:23
0
Utile
2
Salut Leplutonien;
Merciii infiniment pour la réponse , en fait je venais de trouver la solution, c'est en fait le même principe , un tt petit détail : c'est que j'ajoute le 1er fichier à la fin du 2ème sans écraser les données dans le 2ème fichier pour cela il faut juste ajouter un true dans la déclaration du FileInputStream :)
voila ma méthode :
    public void ecrireFichier( File f1, File f2 ) {
        BufferedInputStream entree1 = null;
        BufferedOutputStream sortie = null;
        int TAILLE_TAMPON = 1000;
        try { /* Ouvre les flux. */

            entree1 = new BufferedInputStream( new FileInputStream( f1 ), TAILLE_TAMPON );
            sortie = new BufferedOutputStream( new FileOutputStream( f2, true ), TAILLE_TAMPON );
            /*
             * Lit le fichier reçu et écrit son contenu dans un fichier sur le
             * disque.
             */
            byte[] tampon = new byte[TAILLE_TAMPON];
            int longueur = 0;

            while ( ( longueur = entree1.read( tampon ) ) > 0 ) {
                sortie.write( tampon, 0, longueur );

            }

        } catch ( IOException e ) {

            e.printStackTrace();
        } finally {

            try {

                entree1.close();
            } catch ( IOException ignore ) {
            }
        }

    }

PS: NHenry: en fait ça fonctionne parfaitement , le fichier résultat est fonctionnel :)
Mercii bien à vous ^^
Whismeril 11442 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 10 août 2014 à 14:32
Bonjour si le sujet est résolu merci de le marquer comme tel avec le lien sous le titre de la discussion
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 10 août 2014 à 21:13
imasho,
certes la solution qu'on a chacun proposée fonctionne. Mais ce n'est pas la meilleure
manière de procéder. Pour dire ainsi de prendre en concidération le remarque de NHenry.
En effet,en marge du fichier audio, dans un MP3 on peut aussi trouver des Tags ou informations texte sur le contenu du MP3. Il existe 3 types de Tag :
- Le Tag ID3 v1 en fin de fichier.
- Le Tag ID3 v2 en début de fichier.
- Le Tag APE en fin de fichier mais avant le Tag ID3 v1.
Pour faire simple dans un fichier MP3 on a séquentielement : Tag ID3 v2 ,fichier audio ,Tag APE ,Tag ID3 v1.
Il y a un projet sur sourceforge.Je viens de regarder la Javadoc et à mon avis, ça va t'intéresser
Télécharge les sources que tu trouveras sur cette page :
http://sourceforge.net/projects/jd3lib/

bon courage.
Commenter la réponse de imasho

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.