2010-11-09 8 views
4

Après de longues recherches sur le sujet, j'ai atteint un mur de briques. Tout ce que je veux faire est d'ajouter une collection de fichiers .wav dans un tableau d'octets, l'un après l'autre, et de les sortir tous dans un fichier .wav nouvellement créé complet. J'extrais toutes les données .wav dans un tableau d'octets, en sautant l'en-tête .wav et en allant directement pour les données, puis quand il s'agit de l'écrire dans le fichier .wav nouvellement créé, je reçois une erreur comme: Error1: javax.sound .sampled.UnsupportedAudioFileException: n'a pas pu obtenir le flux d'entrée audio du flux d'entrée Error2: n'a pas pu obtenir le flux d'entrée audio du flux d'entréeConversion de Byte Array en fichier Wav

Le code est:

try 
    { 
    String path = "*********"; 
    String path2 = path + "newFile.wav"; 

    File filePath = new File(path); 
    File NewfilePath = new File(path2); 

    String [] folderContent = filePath.list(); 

    int FileSize = 0; 

    for(int i = 0; i < folderContent.length; i++) 
     { 
      RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r"); 
      FileSize = FileSize + (int)raf.length(); 

     } 

    byte[] FileBytes = new byte[FileSize]; 

    for(int i = 0; i < folderContent.length; i++) 
     { 
      RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r"); 
      raf.skipBytes(44); 
      raf.read(FileBytes); 
      raf.close(); 

     } 

    boolean success = NewfilePath.createNewFile(); 

    InputStream byteArray = new ByteArrayInputStream(FileBytes); 

    AudioInputStream ais = AudioSystem.getAudioInputStream(byteArray); 

    AudioSystem.write(ais, Type.WAVE, NewfilePath); 

    } 
+0

Les fichiers audio doivent avoir tous un format (par exemple 22500 KHz, mono, 8 bits). Ils doivent également avoir le même codage (par exemple, loi a ou pcm). La classe AudioSystem fournit des moyens de convertir certains types de flux/formats. Regarde ça. –

+0

Même s'ils avaient tous le même format, les concaténer ne fonctionnerait pas car les fichiers wav ont un en-tête ... et les enchaîner feraient apparaître les en-têtes de manière inattendue au milieu d'un fichier. – Powerlord

+1

Il a dit qu'il a sauté l'en-tête. – AHungerArtist

Répondre

-1

Votre tableau d'octets ne contient pas d'en-tête information qui signifie probablement que AutoSystem.write ne pense pas que ce soit vraiment des données WAV.

Pouvez-vous créer un en-tête approprié pour vos données combinées?

Mise à jour: This question pourrait contenir la réponse pour vous.

+1

Merci Richard, cela peut être la chose la plus proche d'une réponse que je peux trouver. Je continue à être confus quant à la création et le placement des en-têtes wav lors de la division des fichiers. – user501861

+1

La question liée ne traite pas des tableaux d'octets du tout? Vous n'avez pas répondu à la question, je lui ai juste dit pourquoi ça ne fonctionnait pas (ce qu'il savait déjà). Pourquoi est-ce si difficile de trouver une réponse à ??? – CpILL