Les bibliothèques que j'ai créées jusqu'ici ont seulement des méthodes pour décoder à partir d'un fichier ou InputStream
. J'ai un ByteBuffer
avec des données OGG vorbis et j'en ai besoin décodé à PCM sans avoir à l'écrire dans un fichier en premier.Comment puis-je décoder les données OGG vorbis d'un ByteBuffer?
0
A
Répondre
3
Il semble y avoir 2 parties à ce problème. 1) Obtenir Java Sound pour faire face au format OGG Vorbis. 2) Éviter le fichier. Pour (1), l'API Java Sound permet l'ajout de formats supplémentaires via l'interface du fournisseur de services. L'idée est de placer un codeur/décodeur dans un Jar et d'utiliser un chemin et un format de fichier standard pour identifier la classe qui effectue le codage/décodage. Pour (2), il suffit de fournir un InputStream et l'AudioFormat requis aux méthodes pertinentes des fonctions statiques AudioSystem. PAR EXEMPLE. (Code pseudo ..)
byte[] b = byteBuffer.array();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputStream is = new InputStream(bais);
AudioInputStrream aisOgg = AudioSystem.getAudioInputStream(is);
AudioInputStrream aisPcm = AudioSystem.
getAudioInputStream(pcmAudioFormat, aisOgg);
1
Vous pouvez utiliser ByteArrayInputStream qui est une sous-classe de InputStream. Si votre flux est très important, vous devrez probablement écrire dans un fichier.
oh je ne savais pas que je pouvais créer un inputtream à partir d'un bytearray merci, mais j'ai vraiment eu seulement 1 problème, le pcm va directement à openal, java spi ne le touchera pas. – Anon