Вопрос Воспроизведение звуков 1.16.5

Начинающий
Статус
Оффлайн
Регистрация
29 Авг 2023
Сообщения
97
Реакции[?]
4
Поинты[?]
2K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Всем привет, я хочу проигрывать звуки при включении модулей, однако, у меня выходит ошибка
Код:
[09:03:45] [Thread-22/INFO]: [STDERR]: java.io.IOException: Stream closed
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.RIFFReader.read(RIFFReader.java:125)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.RIFFReader.<init>(RIFFReader.java:60)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.internal_getAudioFileFormat(WaveFloatFileReader.java:65)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.getAudioFileFormat(WaveFloatFileReader.java:55)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:121)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at fun.rich.utils.SoundUtility.lambda$playSound$0(SoundUtility.java:24)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.lang.Thread.run(Thread.java:750)
я так понимаю это из-за того что файл не найден, подскажите как мне указать путь к звукам в коде правильно?

путь в интелидже:
1696141665261.png
код SoundUtility:
Java:
    public static void playSound(String sound, float volume) {
        new Thread(() -> {
            try {
                Clip clip = AudioSystem.getClip();
                System.out.println(new ResourceLocation("assets/rich/icons/target.png").getPath()+sound);
                File audio = new File(new ResourceLocation("assets/rich/icons/target.png").getPath());

                System.out.println(audio.exists()); //<-- всегда фолс
                InputStream audioSrc = SoundUtility.class.getResourceAsStream(new ResourceLocation("rich/sounds/").getPath() + sound);
                BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);

                clip.open(inputStream);
                clip.start();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2022
Сообщения
23
Реакции[?]
0
Поинты[?]
0
Да, ошибка "java.io.IOException: Stream closed" может возникнуть из-за того, что файл с звуком не найден или закрыт. Для указания пути к звукам в коде вам нужно убедиться, что вы используете правильный относительный или абсолютный путь к файлу. Вот как это можно сделать:



Убедитесь, что файл с звуком находится в директории вашего проекта или в определенной поддиректории проекта. Затем вы можете использовать относительный путь для доступа к файлу. Например, если файл находится в поддиректории "sounds" вашего проекта, то код может выглядеть так:

String soundFilePath = "sounds/ваш_звук.wav"



если файл с звуком находится в другом месте на вашем компьютере, вы можете использовать абсолютный путь к файлу. Например:

String soundFilePath = "c/impossible:/полный[I]путь/к[/I]вашему_звуку.wav";

После того как у вас есть правильный путь к файлу, вы можете использовать его для создания объекта File и затем передать этот объект в AudioSystem.getAudioInputStream().

пример кода

import java.io.File; import java.io.IOException; import javax.sound.sampled.*; public class SoundUtility { public static void playSound(String soundFilePath) { try { File soundFile = new File(soundFilePath); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); clip.start(); } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) { e.printStackTrace(); } } public static void main(String[] args) { String soundFilePath = "путь[I]к[/I]вашему_звуку.wav"; playSound(soundFilePath); } } //by impossible



Убедитесь, что путь к файлу указан правильно, и файл с звуком существует в указанном месте.
Всем привет, я хочу проигрывать звуки при включении модулей, однако, у меня выходит ошибка
Код:
[09:03:45] [Thread-22/INFO]: [STDERR]: java.io.IOException: Stream closed
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.RIFFReader.read(RIFFReader.java:125)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.RIFFReader.<init>(RIFFReader.java:60)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.internal_getAudioFileFormat(WaveFloatFileReader.java:65)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.getAudioFileFormat(WaveFloatFileReader.java:55)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:121)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at fun.rich.utils.SoundUtility.lambda$playSound$0(SoundUtility.java:24)
[09:03:45] [Thread-22/INFO]: [STDERR]:     at java.lang.Thread.run(Thread.java:750)
я так понимаю это из-за того что файл не найден, подскажите как мне указать путь к звукам в коде правильно?

путь в интелидже:
Посмотреть вложение 260414
код SoundUtility:
Java:
    public static void playSound(String sound, float volume) {
        new Thread(() -> {
            try {
                Clip clip = AudioSystem.getClip();
                System.out.println(new ResourceLocation("assets/rich/icons/target.png").getPath()+sound);
                File audio = new File(new ResourceLocation("assets/rich/icons/target.png").getPath());

                System.out.println(audio.exists()); //<-- всегда фолс
                InputStream audioSrc = SoundUtility.class.getResourceAsStream(new ResourceLocation("rich/sounds/").getPath() + sound);
                BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);

                clip.open(inputStream);
                clip.start();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
Java:
public static void playSound(String sound, float volume) {

new Thread(() -> {

try {

Clip clip = AudioSystem.getClip();
String soundPath = "rich/sounds/" + sound; // Путь относительно корня классов в JAR-файле

System.out.println(soundPath);
InputStream audioSrc = SoundUtility.class.getClassLoader().getResourceAsStream(soundPath);

if (audioSrc != null) {
BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);
clip.open(inputStream);
clip.start();
} else {
System.out.println("Звуковой ресурс не найден: " + soundPath);
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();

}
В этом коде мы строим путь к звуку относительно корня классов в JAR-файле, используя getClassLoader().getResourceAsStream. Затем мы проверяем, найден ли звуковой ресурс, прежде чем попытаться его проиграть.
Учтите, что вам не нужно включать расширение файла (например, .wav) в путь, когда используете getResourceAsStream. Метод getResourceAsStream работает с потоками данных, а не с файлами на диске.
 
Последнее редактирование модератором:
Начинающий
Статус
Оффлайн
Регистрация
29 Авг 2023
Сообщения
97
Реакции[?]
4
Поинты[?]
2K
Да, ошибка "java.io.IOException: Stream closed" может возникнуть из-за того, что файл с звуком не найден или закрыт. Для указания пути к звукам в коде вам нужно убедиться, что вы используете правильный относительный или абсолютный путь к файлу. Вот как это можно сделать:



Убедитесь, что файл с звуком находится в директории вашего проекта или в определенной поддиректории проекта. Затем вы можете использовать относительный путь для доступа к файлу. Например, если файл находится в поддиректории "sounds" вашего проекта, то код может выглядеть так:

String soundFilePath = "sounds/ваш_звук.wav"



если файл с звуком находится в другом месте на вашем компьютере, вы можете использовать абсолютный путь к файлу. Например:

String soundFilePath = "c/impossible:/полныйпуть/квашему_звуку.wav";

После того как у вас есть правильный путь к файлу, вы можете использовать его для создания объекта File и затем передать этот объект в AudioSystem.getAudioInputStream().

пример кода

import java.io.File; import java.io.IOException; import javax.sound.sampled.*; public class SoundUtility { public static void playSound(String soundFilePath) { try { File soundFile = new File(soundFilePath); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); clip.start(); } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) { e.printStackTrace(); } } public static void main(String[] args) { String soundFilePath = "путьквашему_звуку.wav"; playSound(soundFilePath); } } //by impossible



Убедитесь, что путь к файлу указан правильно, и файл с звуком существует в указанном месте.


public static void playSound(String sound, float volume) {
new Thread(() -> {
try {
Clip clip = AudioSystem.getClip();
String soundPath = "rich/sounds/" + sound; // Путь относительно корня классов в JAR-файле

System.out.println(soundPath);
InputStream audioSrc = SoundUtility.class.getClassLoader().getResourceAsStream(soundPath);

if (audioSrc != null) {
BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);
clip.open(inputStream);
clip.start();
} else {
System.out.println("Звуковой ресурс не найден: " + soundPath);
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}

В этом коде мы строим путь к звуку относительно корня классов в JAR-файле, используя getClassLoader().getResourceAsStream. Затем мы проверяем, найден ли звуковой ресурс, прежде чем попытаться его проиграть.
Учтите, что вам не нужно включать расширение файла (например, .wav) в путь, когда используете getResourceAsStream. Метод getResourceAsStream работает с потоками данных, а не с файлами на диске.
вот код, ошибка та же. Если что-то все равно не так поправьте
Java:
    public static void playSound(String sound, float volume) {
        new Thread(() -> {
            try {
                Clip clip = AudioSystem.getClip();
                
                InputStream audioSrc = SoundUtility.class.getResourceAsStream("rich/sounds/enable");
                BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);

                clip.open(inputStream);
                clip.start();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
 
Начинающий
Статус
Оффлайн
Регистрация
11 Май 2022
Сообщения
70
Реакции[?]
10
Поинты[?]
10K
вот код, ошибка та же. Если что-то все равно не так поправьте
Java:
    public static void playSound(String sound, float volume) {
        new Thread(() -> {
            try {
                Clip clip = AudioSystem.getClip();
              
                InputStream audioSrc = SoundUtility.class.getResourceAsStream("rich/sounds/enable");
                BufferedInputStream bufferedIn = new BufferedInputStream(audioSrc);
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);

                clip.open(inputStream);
                clip.start();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
/assets/rich/sounds/enable.wav
если не зработает значит это изза интелидж переходи на эклипс там работает + рич сразу в IDE встроен
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
29 Авг 2023
Сообщения
97
Реакции[?]
4
Поинты[?]
2K
Сверху Снизу