2008-10-28 8 views
10

Pour le jeu vidéo que je fais, je veux évidemment jouer du son. Jusqu'à présent, j'ai utilisé AudioClip pour lire des fichiers WAV. Bien que cette approche fonctionne bien, les fichiers WAV ont tendance à être gigantesques. Quelques secondes de son finissent par être des centaines de Ko. Je suis confronté à un téléchargement de jeu audio à 95%!Jouer de petits sons dans le jeu Java

L'option évidente ici serait d'utiliser MP3 ou Ogg Vorbis. Mais j'ai eu un succès limité avec ceci - je peux jouer du MP3 en utilisant JLayer (mais il joue dans le même fil). Quant à Ogg, je n'ai pas eu de chance du tout. Pire, le statut juridique de JLayer est un peu du côté douteux. Donc, ma question s'adresse à la fois aux développeurs Java et, en général, aux personnes qui connaissent réellement le son: Qu'est-ce que je fais? Puis-je en quelque sorte "couper la graisse" de mes WAVs? Y a-t-il un moyen de jouer Ogg en Java? Y a-t-il un autre format de son que je devrais utiliser à la place?

Répondre

4

Vous pouvez utiliser la bibliothèque JOrbis pour lire de la musique OGG. Pour l'utilisation de l'exemple de travail, vous pouvez regarder ces fichiers here.

J'ai aussi expérimenté une compression audio sans perte, par exemple j'avais un son mono 16 bits. J'ai séparé les octets supérieur et inférieur de chaque échantillon et les ai mis l'un après l'autre. Puis j'ai appliqué un remplacement différentiel où chaque octet est remplacé par sa différence du dernier octet. Et enfin utilisé GZIP pour compresser les données. J'ai été en mesure de réduire la taille des données à 50-60% de la taille d'origine. Malheureusement, cela ne suffisait pas alors je me suis tourné vers le format OGG. Une chose que j'ai remarquée avec la musique 8 bits est que si je change le volume audio, la lecture devient très bruyante. J'ai résolu ce problème en sur-échantillonnant les données audio à 16 bits juste avant le SourceDataLine.write().

+0

Brillant! J'avais auparavant regardé JOrbis, mais son manque total de documentation me rendait incapable de comprendre comment le pointer sur un fichier .ogg et faire sortir les sons du haut-parleur. – Zarkonnen

+0

J'ai assemblé JOrbis, VorbisSPI et Tritonus-Share dans une seule bibliothèque, ce qui vous permet d'utiliser Java Sound API (AudioSystem) pour décoder les fichiers Java. [link] (http://www.twelvepm.de/vorbis/) – Trilarion

2

Le problème que vous décrivez est résolu par l'interface SPI (Service Provider Interface) pour le son dans Java. Le résultat est que l'ajout de fichiers JAR à votre chemin de classe ajoutera des fonctionnalités à l'API Java Sound par défaut. Cela permet de gérer plus de formats sonores sans changer de code.

La dernière fois que j'ai essayé ceci, les gens Javazoom ont offert un MP3 SPI JAR. Ce qui était basé sur le JLayer que vous avez mentionné.

Pour Vorbis OGG, il semble maintenant également y avoir une bibliothèque SPI. Découvrez les documents sur le Vorbis SPI sur Javazoom.

2

Si vous décidez de rester avec le format wav ...

Il est probablement pas très important d'avoir des fichiers sonores de haute qualité. Vous pouvez utiliser votre éditeur wav favori pour réduire le débit binaire, passer en mono ou les deux. Cela permettra d'économiser beaucoup d'espace et vous ne remarquerez pas la différence de qualité tout en jouant le jeu.

Espérons que cela aide.

Questions connexes