Java getAudioInputStream пытается прочитать аудиофайл, получая javax.sound.sampled.UnsupportedAudioFileException, - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь загрузить wav-файл в моей java-программе, используя код, который я нашел здесь:
Как узнать общее время звукового файла в Java?

Однако в строке 14:

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);

я получаю сообщение об ошибке

"Необработанные исключения: javax.sound.sampled.UnsupportedAudioFileException, java.io.IOException"

Это мой код:

import java.nio.file.FileSystems;
import java.io.File;
import java.nio.file.Path;
import javax.sound.sampled.*;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class Main {

    public static void main(String[] args) {
        Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
        File file = new File(path+"/sample/loop1.wav");
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
        AudioFormat format = audioInputStream.getFormat();
        long audioFileLength = file.length();
        int frameSize = format.getFrameSize();
        float frameRate = format.getFrameRate();
        float durationInSeconds = (audioFileLength / (frameSize * frameRate));
    }

}

Я хочу создать метод выбора начальной точки воспроизведения в аудиофайле (например, начать воспроизведение файла через 30 секунд).Вот почему я не хочу получать продолжительность моего файла.

Когда я делаю System.out.println(file);, он печатает правильный путь моего файла.Однако, так как я получаю сообщение об ошибке, я, очевидно, что-то делаю неправильно.

Я уже пытался найти решение в Интернете, но ничего не нашел, поэтому разместил здесь.

Спасибо за внимание.

1 Ответ

0 голосов
/ 25 ноября 2018

AudioSystem.getAudioInputStream выдает эти исключения.

Это проверенные исключения , поэтому вы должны либо использовать блок try ... catch для перехвата исключения, либо добавить предложение throws в объявление метода.

Базовыйtry ... catch будет:

try
 {
   Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
   File file = new File(path + "/sample/loop1.wav");

   AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);

   AudioFormat format = audioInputStream.getFormat();

   long audioFileLength = file.length();
   int frameSize = format.getFrameSize();
   float frameRate = format.getFrameRate();
   float durationInSeconds = (audioFileLength / (frameSize * frameRate));
 }
catch (UnsupportedAudioFileException | IOException ex)
 {
   ex.printStackTrace();
 }
...