Java - lire, manipuler et écrire des fichiers WAV
Dans un programme Java, ce qui est le meilleur moyen de lire un fichier audio (WAV fichier) pour un tableau de nombres (float[]
short[]
...), et d'écrire un fichier WAV à partir d'un tableau de nombres?
source d'informationauteur yonatan
Vous devez vous connecter pour publier un commentaire.
Plus de détails sur ce que vous souhaitez réaliser serait utile. Si raw WAV de données est correct pour vous, il suffit d'utiliser un FileInputStream et probablement un Scanner pour le transformer en nombres. Mais laissez-moi essayer de vous donner des exemples de code pour vous aider à démarrer:
Il y a une classe appelée com.soleil.médias.son.WaveFileWriter à cette fin.
Vous pouvez implémenter votre propre AudioInputStream qui fait tout ce que le vaudou pour transformer votre nombre de tableaux en données audio.
Comme @stacker mentionné, vous devriez obtenir vous-même familiariser avec l'API de cours.
La javax.son.exemple de package n'est pas adapté pour le traitement des fichiers WAV si vous avez besoin d'avoir accès aux valeurs de l'échantillon. Le forfait vous permet de modifier le volume, le taux d'échantillonnage, etc., mais si vous voulez d'autres effets (par exemple, l'ajout d'un echo), vous êtes sur votre propre. (La Java tutoriel conseils, il devrait être possible de traiter les valeurs d'échantillon directement, mais la technologie de l'écrivain overpromised.)
Ce site dispose d'une classe simple pour le traitement des fichiers WAV: http://www.labbookpages.co.uk/audio/javaWavFiles.html
WAV Fichier de Spécification
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
Il existe une API pour votre but
http://code.google.com/p/musicg/
C'est le code source pour écrire directement dans un fichier wav.
Vous avez juste besoin de connaître les mathématiques et l'ingénierie du son pour produire le son que vous voulez.
Dans cet exemple, l'équation calcule un battement binaural.
Si tu pouvais le modifier pour créer un hip-hop sous basse qui serait cool, parce que c'est actuellement ce que je suis en train de modifier ce programme pour le faire.
Tout d'abord, vous devez savoir les en-têtes et les données des positions d'une structure d'ONDE, vous pouvez trouver les spec ici.
Être conscient que les données sont en little endian.
Il y a un API qui peut vous aide à atteindre votre objectif.
Vague de fichiers sont pris en charge par le javax.son.exemple de package
Depuis n'est pas triviale API, vous devriez lire un article /tutoriel qui présente les API comme
Java Sound, Une Introduction
- Je utiliser
FileInputStream
avec un peu de magie:Vos valeurs de l'échantillon sont dans
short[] input
!