Tout d'abord bonjour à tous.
Alors voilà, je suis bloqué sur un point de mon projet de fin d'année. je cherche à enregistrer la voix d'une personne avec l'API javaSound. J'ai trouvé pas mal d'informations sur le site de sun.
Jusqu'alors, j'utilisais un TargetDataLine que je couplais avec un AudioInputStream.
Ensuite je lancais la méthode run de ma classe qui étend la classe Thread.
Cette méthode run utilise AudioSystem.write(audioInputStream, formatAudio, monfichier).
Il me semble que cette méthode est bloquante (je ne suis pas sur du terme).
Jusque là tout allait bien avec cette méthode. J'arrivais à enregistrer un fichier audio en wav.
A présent je cherche à implémenter un analyseur de spectre comme on peut en voir sur winamp. Le problème est que je ne sais pas s'il est facilement possible de récupérer à intervalles réguliers une frame de mon flux en cours d'enregistrement (puique AudioSystem.write est bloquante).
Je cherche également à limiter automatiquement la durée de mes enregistrements (pas de bouton stop pour arrêter le rec). Par exemple je souhaite que la personne qui s'enregistre clique sur le bouton "enregistrer" et que l'enregistrement s'arrête automatiquement au bout de 3 secondes.
Si quelqu'un a une solution ce serait super sympa de m'en faire part.
Voici ma methode run:
public void run() {
try {
line.open(audioFormat);
} catch (LineUnavailableException e1) {
e1.printStackTrace();
return;
}
line.start();
audioInputStream = new AudioInputStream(line);
try {
// ici, la méthode est bloquante
AudioSystem.write(audioInputStream, targetType, file);
} catch (IOException e1) {
e1.printStackTrace();
} finally {
line.close();
try {
audioInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
line.stop();
line.close();
}