Код, который я написал, не прекращает запись, когда я нажимаю кнопку «console stop». Я не понимаю, что я сделал неправильно. Не могли бы вы посмотреть на код ниже и предложить, где моя ошибка?Остановить запись звука - Java
Здесь:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
public class Main {
final static int MONO = 1;
private static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
public static void main(String[] args) {
AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
16000, 16, MONO, 2, 16000, true);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
int numb = 1;
String files = "C:\\test\\music\\lala" + numb + "." + fileType;
File fileOut = new File(files);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Line nit supporot!");
}
System.out.println("To stop recording a sound lead - stop");
Scanner sc = new Scanner(System.in);
String scc;
TargetDataLine mike = null;
try {
mike = (TargetDataLine) AudioSystem.getLine(info);
mike.open(format);
AudioInputStream sound = new AudioInputStream(mike);
mike.start();
AudioSystem.write(sound, fileType, fileOut);
scc = sc.nextLine();
if (scc.equals("stop")) {
System.out.println("recording is stopped!");
mike.stop();
sound.close();
System.exit(0);
}
} catch (LineUnavailableException e) {
System.out.println("line not avaible");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Это не работает:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
public class Main implements Runnable {
final static int MONO = 1;
private static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
private static TargetDataLine mike;
private static AudioInputStream sound;
public static void main(String[] args) {
AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
16000, 16, MONO, 2, 16000, true);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
int numb = 1;
String files = "C:\\test\\music\\lala" + numb + "." + fileType;
File fileOut = new File(files);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Line nit supporot!");
}
System.out.println("Для остановки записи звука введите - g");
try {
mike = (TargetDataLine) AudioSystem.getLine(info);
mike.open(format);
sound = new AudioInputStream(mike);
mike.start();
AudioSystem.write(sound, fileType, fileOut);
} catch (LineUnavailableException e) {
System.out.println("line not avaible");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
Scanner sc = new Scanner(System.in);
String scc;
scc = sc.nextLine();
if (scc.equals("g")) {
System.out.println("Запись звука остановлена");
mike.stop();
try {
sound.close();
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
}
}
}
Думаю, может быть, вам нужна тема здесь. –
ErstwhileIII, спасибо) – user3384347
parsa-porahmad, честно говоря, в потоках я не очень хорошо понимаю) – user3384347