Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将AWS Polly提供的ogg流保存到wav文件中_Java_Audio_Wav_Amazon Polly_Audioinputstream - Fatal编程技术网

Java 将AWS Polly提供的ogg流保存到wav文件中

Java 将AWS Polly提供的ogg流保存到wav文件中,java,audio,wav,amazon-polly,audioinputstream,Java,Audio,Wav,Amazon Polly,Audioinputstream,我试图创建一个网页,用户将能够听到他键入的文本。我还想提供下载.wav格式媒体的功能 我可以从AmazonPollyClient获取AudioStream,但无法将音频流保存到.wav文件 这是我正在尝试的 public void convertToWav(SynthesizeSpeechResult result, File convertedFile) throws IOException { try (AudioInputStream sias = AudioSystem.get

我试图创建一个网页,用户将能够听到他键入的文本。我还想提供下载
.wav
格式媒体的功能

我可以从
AmazonPollyClient
获取
AudioStream
,但无法将音频流保存到
.wav
文件

这是我正在尝试的

public void convertToWav(SynthesizeSpeechResult result, File convertedFile) throws IOException {

    try (AudioInputStream sias = AudioSystem.getAudioInputStream(result.getAudioStream())){

        AudioFormat newFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 8000f, 16, 1, 2, 8000f, false);
        AudioInputStream convert1AIS = AudioSystem.getAudioInputStream(newFormat, sias);

        AudioSystem.write(convert1AIS, AudioFileFormat.Type.WAVE, convertedFile);

        convert1AIS.close();
    } catch (UnsupportedAudioFileException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    System.gc();
}
但是每次我调用
getAudioInputStream()
它都会抛出
IOException

java.io.IOException: mark/reset not supported
    at java.io.InputStream.reset(InputStream.java:348)
    at com.amazonaws.internal.SdkFilterInputStream.reset(SdkFilterInputStream.java:112)
    at com.amazonaws.event.ProgressInputStream.reset(ProgressInputStream.java:168)
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:139)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
附言:我已经尝试在
BufferedInputStream()
中包装
result.getAudioStream()
。没有演出


任何帮助都将不胜感激。

最后,我找到了保存由
polly aws sdk提供的
InputStream
的方法

public static boolean getWavFile(String filePath, InputStream audioStream) throws IOException {

    boolean result = false;
    try {

        byte[] decodedData = IOUtils.toByteArray(audioStream);

        System.out.println(">>Decoded Data" + Arrays.toString(decodedData));
        File outFile = new File(filePath);
        AudioFormat format = new AudioFormat(8000, 16, 1, true, false);
        AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(
                decodedData), format, decodedData.length), AudioFileFormat.Type.WAVE, outFile);
        result = true;
        return result;
    } catch (IOException ex) {
        System.out.println("<<getWavFile - impl" + ex);
        return result;

    }
}
public静态布尔getWavFile(字符串文件路径,InputStream音频流)引发IOException{
布尔结果=假;
试一试{
字节[]decodedData=IOUtils.toByteArray(音频流);
System.out.println(“>>解码数据”+Arrays.toString(decodedData));
文件输出文件=新文件(文件路径);
AudioFormat格式=新的AudioFormat(8000、16、1、真、假);
AudioSystem.write(新的AudioInputStream(新的ByteArrayInputStream(
decodedata),format,decodedata.length),AudioFileFormat.Type.WAVE,outFile);
结果=真;
返回结果;
}捕获(IOEX异常){
System.out.println(“