You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8在JBoss EAP 6.4遭遇UnsupportedAudioFileException问题求助

音频转换在JBoss EAP 6.4环境下的UnsupportedAudioFileException问题

问题背景

使用Java 8开发应用,接收Base64格式的.wav音频文件并转换为PCM_SIGNED格式,本地运行正常,但部署到JBoss EAP 6.4时抛出UnsupportedAudioFileException。

错误堆栈信息

java.lang.RuntimeException: Audio processing failed
       at com.assistt.voicecloneservice.service.AudioConverter.convertBase64ToPcmSigned(AudioConverter.java:42)
       at com.assistt.voicecloneservice.service.AudioProcessingService.processAndUploadAndInsert(AudioProcessingService.java:35)
       at com.assistt.voicecloneservice.api.TtsTextCheckService.doPost(TtsTextCheckService.java:57)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
       at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
       at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:559)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
       at java.lang.Thread.run(Thread.java:750)
Caused by: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
       at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1121)
       at com.assistt.voicecloneservice.service.AudioConverter.convertBase64ToPcmSigned(AudioConverter.java:20)
       ... 18 more

报错核心代码

public void convertBase64ToPcmSigned(String base64Audio) throws Exception {
    byte[] audioByte = Base64.getDecoder().decode(base64Audio);

    try (InputStream inputStream = new ByteArrayInputStream(audioByte);
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {

        // Get AudioInputStream from the input stream
        AudioInputStream inputAudioStream = AudioSystem.getAudioInputStream(inputStream);

        // Define the target audio format
        AudioFormat sourceFormat = inputAudioStream.getFormat();
        AudioFormat targetFormat = new AudioFormat(
                AudioFormat.Encoding.PCM_SIGNED,  // PCM_SIGNED format
                8000.0f,                          // Sample rate
                16,                               // Sample size in bits
                1,                                // Channels (Mono)
                2,                                // Frame size
                8000.0f,                          // Frame rate
                false                             // Big-endian
        );

        AudioInputStream convertedAudioStream = AudioSystem.getAudioInputStream(targetFormat, inputAudioStream);

        File outputFile = new File("output.wav");
        AudioSystem.write(convertedAudioStream, AudioFileFormat.Type.WAVE, outputFile);

    } catch (UnsupportedAudioFileException | IOException e) {
        throw new RuntimeException("Audio processing failed", e);
    }
}

项目依赖(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.assistt</groupId>
    <artifactId>VoiceCloneService</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>


    </dependencies>

</project>

源音频文件属性

手动将Base64转换为.wav文件后,文件属性如下:

Encoding       : PCM_SIGNED  
Sample Rate    : 40000.0 Hz  
Sample Size    : 16 bits  
Channels       : 1  
Frame Size     : 2 bytes  
Frame Rate     : 40000.0 frames/second  
Big Endian     : false  

尝试的替代方案及问题

尝试先将Base64转换为物理.wav文件再处理,代码如下:

File file = new File(sourceFilePath);
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));

if (!inputStream.markSupported()) {
    return;
}

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputStream);
AudioFormat sourceFormat = audioInputStream.getFormat();

AudioFormat targetFormat = new AudioFormat(
        AudioFormat.Encoding.ALAW,
        8000,
        8,
        sourceFormat.getChannels(),
        1,
        8000,
        false
);

AudioInputStream convertedAudioInputStream = AudioSystem.getAudioInputStream(targetFormat, audioInputStream);

AudioSystem.write(convertedAudioInputStream, AudioFileFormat.Type.WAVE, new File(destinationFilePath));

inputStream.close();
audioInputStream.close();
convertedAudioInputStream.close();

但在AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputStream);一行仍报错:

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1189)
    at com.assistt.voicecloneservice.service.AudioConverter.convertBase64ToPcmSigned(AudioConverter.java:34)
    ...

提问

需要检查哪些要点,或尝试哪些替代方案来解决该问题?在JBoss环境中处理音频文件是否需要特殊配置?


内容的提问来源于stack exchange,提问作者Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:56:00