gpt4 book ai didi

scala - OSGi Karaf Scala UnsupportedAudioFileException

转载 作者:行者123 更新时间:2023-12-04 02:19:10 24 4
gpt4 key购买 nike

这是我在这里的第一篇文章。我目前正在 Apache-Karaf 3.0.0 上的 Scala 中开发一个简单的 http 音频 servlet。我将它部署为一些 bundle 中的功能,这些 bundle 是我使用 Maven 项目构建的。我正在使用“javax.sound.sampled”库来获取音频,并且正在使用“java.io.File”从 AudioSystem 加载文件。

    val file = new File("audioFile.wav")
val audioStream = AudioSystem.getAudioInputStream(file)

这显然不是实际代码,因为我已经删除了所有琐碎的部分。但这是在“getAudioInputStream”调用中失败的地方。

当我将此代码部署到 Karaf 时,它因“UnsupportedAudioFileException”而失败。该文件确实存在,并且是可读的,我已经验证过了。另外,我已经确保这段代码可以在下面运行。 - 斯卡拉 2.10.2、2.10.3 - Java 1.7.0_45(这与我的 Karaf 程序使用的 JRE 相同) - SBT 0.12.4(具有不同的 Scala 版本)

唯一失败的地方是当我将它部署到 Karaf 时。我不知道 Karaf 是否切断了一些随机音频支持,或者发生了什么,因为这在通过 SBT 或使用 Scala 命令行部署时可以正常工作。我也研究过替代库,但无济于事。大多数其他解决方案似乎都是基于通过声音驱动程序实际播放音频,这对我来说毫无用处。我需要实际的字节数据。

此外,请记住,仅将文件发送过来对我来说也是无用的。另一个要求是我需要能够将多个音频文件合并到一个无缝的音频流中。我已经完成了这项工作,我只需要将它移植到 OSGi,由于某种原因我现在收到此错误。我不知道 Karaf 是否与它有关,或者我通过 Maven 项目构建它是否破坏了某些东西。我环顾四周,几乎没有发现问题可能出在哪里的线索。

我使用的音频文件是波形音频。 8,000 采样率,每个样本 16 位。我不认为这实际上会有所作为,但我不是音频格式方面的专家。

我的pom.xml依赖如下。我使用的唯一插件是 Scala 编译器,当然我的根 pom.xml 使用的是 org.apache.felix maven-bundle-plugin。这里真的没有太多魔法,但谜团依然存在。

    <dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

任何线索将不胜感激,谢谢。

最佳答案

我认为 AudioSystem 还没有完全准备好 OSGi。这是我在 Aries Spy Fly 文档中找到的。不确定您究竟需要做什么才能使其正常工作,但这可能会有所帮助。

https://aries.apache.org/modules/spi-fly.html

特殊情况

SPI Fly 可用于大多数使用 TCCL 模式获取实现的 SPI 提供程序/查找系统。但在某些情况下,需要进行一些特殊处理。当API本身与META-INF/services中的资源名称不匹配时,通常需要这种特殊处理,java.util.ServiceLoader就是这种情况,但是SPI-Fly内置了ServiceLoader知识。下面列出了需要特殊处理的已知 API:

javax.sound.sampled.AudioSystem:此类在幕后使用 sun.misc.Service(通过 com.sun.media.sound.JDK13Services),它是 java.util.ServiceLoader 的前身。 SPI Fly 中没有对 sun.misc.Service 进行特殊处理(目前),但是可以通过将 AudioSystem.getAudioInputStream() API 显式列在提供程序包(包含相关 META-INF/服务资源):SPI-Provider: javax.sound.sampled.AudioSystem 在消费者端你可以使用 SPI-Consumer: javax.sound.sampled.AudioSystem#getAudioInputStream

关于scala - OSGi Karaf Scala UnsupportedAudioFileException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com