Я пытаюсь добавить возможности MP3 в проект Netbeans Platform в Netbeans 8.0. Я понимаю, что это можно легко добавить в библиотеки javax.sound.sampled, используя ServiceLoader и SPI для кодеков MP3.
Поэтому я загрузил MP3 SPI и распаковал его, затем в Netbeans я создал модуль оболочки Jar с тремя банками, которые были в zip файле (одна банка была в корне zip, а две были под lib/
). Затем я сделал модули, которые нуждаются в функциях MP3, зависит от этого модуля-обертки. Но когда я называю AudioSystem.getAudioFileTypes()
в этих модулях, "MP3" не является одним из типов (только "WAVE", "AU" и "AIFF")
Что мне не хватает?
Я проверил, что правильные файлы перечислены в META-INF/services
в основной банке.
мне нужно воссоздать lib/
структуру в моем модуле обертки? Имеет ли значение, какая база кода я использую для модуля обертки? Мне нужно как-то оповестить ServiceLoader в моем коде?
Вот метаданные проекта для модуля обертки:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
<code-name-base>org.sil.wrapper.mp3spi</code-name-base>
<suite-component/>
<module-dependencies/>
<public-packages>
<package>javazoom.jl.converter</package>
<package>javazoom.jl.decoder</package>
<package>javazoom.jl.player</package>
<package>javazoom.jl.player.advanced</package>
<package>javazoom.spi</package>
<package>javazoom.spi.mpeg.sampled.convert</package>
<package>javazoom.spi.mpeg.sampled.file</package>
<package>javazoom.spi.mpeg.sampled.file.tag</package>
<package>org.tritonus.share</package>
<package>org.tritonus.share.midi</package>
<package>org.tritonus.share.sampled</package>
<package>org.tritonus.share.sampled.convert</package>
<package>org.tritonus.share.sampled.file</package>
<package>org.tritonus.share.sampled.mixer</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/mp3spi1.9.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/mp3spi1.9.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tritonus_share.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tritonus_share.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jl1.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jl1.0.1.jar</binary-origin>
</class-path-extension>
</data>
</configuration>
</project>
Оказывается, SPI работает нормально. Он может читать и воспроизводить MP3 файл. Однако AudioSystem.getAudioFileTypes()
перечисляет типы файлов, которые можно перезаписывать, и SPI не предоставляет возможность записи файлов MP3. Он не включает поставщика для javax.sound.sampled.spi.AudioFileWriter