J'essaie de capturer l'audio de l'entrée ligne de mon PC, pour ce faire, j'utilise la classe AudioSystem. Il existe deux choix possibles avec la méthode statique AudioSystem.write: Écrire dans un fichier ou Écrire dans un flux. Je peux l'obtenir pour écrire dans un fichier très bien, mais chaque fois que j'essaie d'écrire dans un flux, java.io.IOException est lancé (la longueur du flux n'est pas spécifiée). En ce qui concerne mon tampon, j'utilise un ByteArrayOutputStream. Y a-t-il un autre type de flux que je suis censé utiliser ou faire des erreurs ailleurs?Java AudioSystem et TargetDataLine
En outre dans un sujet connexe, on peut échantillonner la ligne audio (TargetDataLine) directement en appelant read. Est-ce la manière préférée de faire de la capture audio ou de l'utilisation de AudioSystem?
Mise à jour code source qui a été demandé:
final private TargetDataLine line;
final private AudioFormat format;
final private AudioFileFormat.Type fileType;
final private AudioInputStream audioInputStream;
final private ByteArrayOutputStream bos;
// Constructor, etc.
public void run()
{
System.out.println("AudioWorker Started");
try
{
line.open(format);
line.start();
// This commented part is regarding the second part
// of my question
// byte[] buff = new byte[512];
// int bytes = line.read(buff, 0, buff.length);
AudioSystem.write(audioInputStream, fileType, bos);
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("AudioWorker Finished");
}
// Stack trace in console
AudioWorker Started
java.io.IOException: stream length not specified
at com.sun.media.sound.WaveFileWriter.write(Unknown Source)
at javax.sound.sampled.AudioSystem.write(Unknown Source)
at AudioWorker.run(AudioWorker.java:41)
AudioWorker Finished
pouvez-vous poster un peu de code? –
Publiez la trace de la pile, au moins les premières images, jusqu'à votre application. – erickson