Concaténer 2 fichiers MP3

Résolu
imasho Messages postés 38 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 29 novembre 2015 - 9 août 2014 à 04:27
leplutonien Messages postés 21 Date d'inscription mardi 31 juillet 2012 Statut Membre Dernière intervention 29 juin 2015 - 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.

2 réponses

leplutonien Messages postés 21 Date d'inscription mardi 31 juillet 2012 Statut Membre Dernière intervention 29 juin 2015
9 août 2014 à 19:29
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());
            }
        }
    }
    
}

0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
Modifié par NHenry le 9/08/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.
0
imasho Messages postés 38 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 29 novembre 2015
10 août 2014 à 14:23
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 ^^
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
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
0
leplutonien Messages postés 21 Date d'inscription mardi 31 juillet 2012 Statut Membre Dernière intervention 29 juin 2015
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.
0
Rejoignez-nous