Convertir les pistes audio pour WAV tableau d'octets en Java sans les fichiers temp
Donné un InputStream
appelé in
qui contient des données audio dans un format compressé (MP3 ou OGG), je souhaite créer un byte
tableau contenant un WAV conversion des données d'entrée. Malheureusement, si vous essayez de le faire, JavaSound mains, vous avez l'erreur suivante:
java.io.IOException: stream length not specified
J'ai réussi à le faire fonctionner par écrit le wav en un fichier temporaire, puis de le lire, comme indiqué ci-dessous:
AudioInputStream source = AudioSystem.getAudioInputStream(new BufferedInputStream(in, 1024));
AudioInputStream pcm = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, source);
AudioInputStream ulaw = AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, pcm);
File tempFile = File.createTempFile("wav", "tmp");
AudioSystem.write(ulaw, AudioFileFormat.Type.WAVE, tempFile);
//The fileToByteArray() method reads the file
//into a byte array; omitted for brevity
byte[] bytes = fileToByteArray(tempFile);
tempFile.delete();
return bytes;
C'est évidemment moins souhaitable. Est-il un meilleur moyen?
OriginalL'auteur Robert J. Walker | 2008-10-13
Vous devez vous connecter pour publier un commentaire.
Le problème est que la plupart des AudioFileWriters besoin de connaître la taille du fichier à l'avance si l'écriture d'un OutputStream. Parce que vous ne pouvez pas fournir ce, il échoue toujours. Malheureusement, la valeur par défaut de Java son implémentation de l'API n'ont pas de solutions de rechange.
Mais vous pouvez essayer d'utiliser le AudioOutputStream de l'architecture de l'Tritonus plugins (Tritonus est une implémentation open source de Java API sound): http://tritonus.org/plugins.html
OriginalL'auteur Simon Lehmann
Je remarque que celui-ci a été demandé depuis très longtemps. Dans le cas de toute nouvelle personne (à l'aide de Java 7 et ci-dessus) trouvé ce fil, remarque il y a une meilleure nouvelle façon de le faire via des Fichiers.readAllBytes API. Voir:
Comment faire pour convertir .fichier wav en tableau d'octets?
OriginalL'auteur Superziyi
Trop tard, je sais, mais j'avais besoin de cela, alors c'est mes deux cents sur le sujet.
OriginalL'auteur HolloW
Le problème est facile à résoudre si vous préparez de la classe qui permettra de créer en-tête correcte pour vous. Dans mon exemple Exemple comment lire l'entrée audio en wav tampon données dans la mémoire tampon, après que j'ai créer en-tête et d'avoir le fichier wav dans la mémoire tampon. Pas besoin de bibliothèques supplémentaires. Il suffit de copier le code à partir de mon exemple.
Exemple, comment utiliser la classe qui crée en-tête correcte dans le tableau tampon:
Et de la classe NewWaveWriter vous pouvez trouver sous mon lien.
OriginalL'auteur Kanaris007
C'est très simple...
L' .tmp fichier est RAW d'un fichier audio, le résultat est un fichier WAV avec en-tête.
OriginalL'auteur Gábor Dikán