2015-01-11 3 views
0

, поэтому я пытаюсь воспроизвести звук (mp3-файлы) через библиотеку mp3spi. Я должен добавить, что этот проект предназначен для запуска внутри другой программы (например, и надстройки), поэтому у нее нет основных классов, кроме класса debug. Когда я запускаю проект из этого класса отладки, все работает отлично, но при запуске изнутри основной программы (я должен добавить, что надстройка экспортируется как банка и как zip-файл, zip-файл будет загружен в основная программа) Я получаю javax.sound.sampled.UnsupportedAudioFileException. Я думаю, что проблема связана с тем, что надстройка не была правильно подключена к библиотекам, но все баннеры mp3spi включены в папку lib.AudioInputStream не работает после экспорта как jar/zip

Мы используем maven для создания всех надстроек и основной программы, поэтому я также попытался добавить путь к файлу манифеста. (В maven-jar-плагине, как и во многих других переполнениях стека) Как-то это работает для других, но не для меня. Другие также предложили сделать jar runnable, поэтому я добавил класс debug в качестве основного класса и снова попытался, что тоже не сработало.

В любом случае, я совершенно потерялся, так как у меня заканчиваются идеи, чтобы попробовать. Любая помощь приветствуется!

Вот код, который вызывает ошибку снова:

String path = soundFileMap.get(soundId); 
    try { 
     inputStream = AudioSystem.getAudioInputStream(new File(path)); 
    ... (rest not shown) 

А вот исключение:

javax.sound.sampled.UnsupportedAudioFileException: format not supported 
    at javax.sound.sampled.AudioSystem.getAudioInputStreamImpl(AudioSystem.java:1023) ~[tritonus share-0.3.7-2.jar:?] 
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1005) ~[tritonus-share-0.3.7-2.jar:?] 
    at jundl77.izou.izousound.outputplugin.SoundEngine.playSoundFile(SoundEngine.java:298) [classes/:?] 
    at jundl77.izou.izousound.outputplugin.SoundEngine.run(SoundEngine.java:382) [classes/:?] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_20] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_20] 
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_20] 

А вот что мой Maven-банку-плагин выглядит следующим образом:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <archive> 
      <manifestEntries> 
       <Plugin-Id>${plugin.id}</Plugin-Id> 
       <Plugin-Class>${plugin.class}</Plugin-Class> 
       <Plugin-Version>${plugin.version}</Plugin-Version> 
       <Plugin-Provider>${plugin.provider}</Plugin-Provider> 
       <Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies> 
      </manifestEntries> 
      <manifest> 
       <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
       <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
       <addClasspath>true</addClasspath> 
       <mainClass>jundl77.izou.izousound.Debug</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

В любом случае, еще раз любая помощь будет очень признательна.

ответ

0

Лучше создать AudioInputStream непосредственно из URL или файла, а не из InputStream. Учитывая, что ресурс упакован в Jar, вы должны использовать URL-адрес, поскольку невозможно прочитать файл из банки.

+0

Хорошо, дело в том, что звуковой файл не находится в папке ресурса, звуковой файл должен лежать в любом месте системы. Также входной поток уже представляет собой поток аудиовхода. Также я думаю, что проблема связана с java, так или иначе относящейся к библиотеке javax.sound.sampled по умолчанию, а не к той, которая поставляется с тритоном, может быть, так? И если да, знаете ли вы, как я могу сообщить об этом компилятору? – jundl77

+0

Существует известная проблема с использованием InputStream в качестве входа в getAudioInputStream. Если вы обратитесь к API для AudioSystem.getAudioInputStream, вы увидите, когда в InputStream есть параметр, добавлены тесты на входной файл, например, на маркировку, возможность сброса. Аудиофайлы, как правило, не проходят эти тесты. Входной параметр URL является наиболее надежным, imho. AudioSystem IS javax.sound.sampled. Я рекомендую вам сначала попробовать, исключить это, прежде чем вникать в проблемы Tritonus. –

+0

Ах, спасибо! Оказывается, это ничего не изменило :(Но все в порядке, я использую медиа-медиа javafx и медиаплеер, которые теперь работают, но благодарю за помощь! Один быстрый вопрос, хотя если вы знаете ответ, знаете ли вы, медиаплеер передает звук или все это заполняет? (Другими словами, он относительно лёгкий в системе?) – jundl77

Смежные вопросы