当前位置: 首页 > 知识库问答 >
问题:

尽管列出了可用的格式,但将ogg转换为wav不起作用

勾安翔
2023-03-14

我要做的是从音频文件中生成10秒的片段,并在这个过程中将它们转换成WAV。我正在使用javazoom vorbisspi和mp3spi库。它适用于mp3和WAV文件,但不适用于。ogg文件。

我试图列出我想要的编码(PCM签名)的可用目标格式,奇怪的是,对于mp3文件,可用格式列表是空的(尽管它工作),而ogg文件列表显示我想要的PCM编码(尽管它不工作)。不过,回放. ogg文件是可行的。这是我的代码:

        AudioInputStream in = null;
        AudioInputStream din = null;
        AudioFileFormat fileFormat = null;
        AudioFormat format = null;

        fileFormat = AudioSystem.getAudioFileFormat(input);
        in = AudioSystem.getAudioInputStream(input);

        format = in.getFormat();
        float frameRate = 44100;
        int channels = format.getChannels();
        AudioFormat targetFormat = new AudioFormat(
            AudioFormat.Encoding.PCM_SIGNED,
            frameRate,
            16,
            channels,
            channels*2,
            frameRate,
            false
        );

        AudioFormat[] available = AudioSystem.getTargetFormats(
            AudioFormat.Encoding.PCM_SIGNED, format);
        System.out.println("------------------------------------");
        System.out.println("Available for: " + format.toString());
        for (AudioFormat e : available) {
            System.out.println(e.toString());
        }

        if (AudioSystem.isConversionSupported(targetFormat, format)) {

            din = AudioSystem.getAudioInputStream(targetFormat, in);

            long frames = this.thumbNailLength * (long)frameRate;
            AudioInputStream shortenedStream = new AudioInputStream(
                din, targetFormat, frames);
            AudioSystem.write(shortenedStream, 
                new AudioFileFormat.Type("WAVE", "wav"), outputFile);
        }
        else {
            throw new IllegalArgumentException(
                "Conversion to WAV from this format is not supported by the System.");
        }

. ogg文件的输出:

 [java] Available for: VORBISENC 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, unknown frame rate, 
 [java] PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
 [java] PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian

为什么这不能像预期的那样工作?我连一个例外都没有,一个例外。wav文件已生成,但无法由任何玩家播放。

共有2个答案

霍建柏
2023-03-14

快速谷歌搜索就会发现这一点。ogg是一种容器格式。这意味着内部数据可以使用不同的编解码器进行编码。因此,您正在使用不受支持的编解码器的文件。

太叔京
2023-03-14

我找到了一个解决方案:临时写入pcm文件,然后将该文件读入新的AudioInputStream。我真的不知道为什么,但它是有效的:

        if (format.getEncoding().equals(new AudioFormat.Encoding("VORBISENC"))) {
            byte [] buffer = new byte[4096];
            int n;
            FileOutputStream fos = new FileOutputStream(outputFile + ".pcm");    
            while(-1 != (n = din.read(buffer))) {
                fos.write(buffer, 0, n); 
            }    
            fos.close();

            AudioInputStream pcmIn = new AudioInputStream(new FileInputStream(outputFile + ".pcm"), targetFormat, frames);
            AudioSystem.write(pcmIn, AudioFileFormat.Type.WAVE, new FileOutputStream(outputFile));
            File f = new File(outputFile + ".pcm");
            f.delete();
        } else {
            AudioInputStream shortenedStream = new AudioInputStream(din, targetFormat, frames);
            AudioSystem.write(shortenedStream, new AudioFileFormat.Type("WAVE", "wav"), outputFile);
        }    
 类似资料:
  • http://www.javazoom.net/mp3spi/documents.html http://www.javazoom.net/vorbisspi/documents.html 当我转换MP3文件时,代码运行良好。但是,当我试图转换OGG文件时,我得到以下错误: 有人有什么建议可能导致这个问题吗?可能有任何变通办法来转换OGG文件到WAV? 编辑: 哇,我意识到问题是什么...在阅读了

  • 在我的Android应用程序的Java中,我试图在XML中显示日期和时间,我从API响应中获得“StartDateTime”。以下是详细情况: 这是我从API响应中得到的:

  • 在尝试使用avconv和ffmpeg将mov文件转换为ogg时,我经常遇到以下错误。我完全无法理解下面显示的冗长信息。 我看了看类似的线索,但什么也看不出来。有人有什么想法吗? > 打开输出流#0:1的编码器时出错-可能是错误的参数,如比特率、速率、宽度或高度 ffmpeg错误,而转换为mp4错误,而打开编码器输出流#0.0 http://drupal.org/node/1779298 编辑: 我

  • 问题内容: 我试图通过将其旋转10度来变换菜单项。我的CSS在Firefox中可以使用,但是我无法在Chrome和Safari中复制效果。我知道IE不支持CSS3属性,所以这不是问题。 我使用以下CSS: 有人可以建议我要去哪里错吗? 谢谢。 问题答案: 这只是一个有根据的猜测,而没有看到其余的HTML / CSS: 您申请了还是申请了?如果没有,请尝试。 否则,请尝试应用CSS3转换规则。

  • 我试图用GSON将一个对象转换成JSON格式。然后,我将把JSON发送给用php编写的webservice。不幸的是,由于某种原因,gson.toJson(object)方法不起作用。 我有这个java对象干预(它包含字符串、日期、时间和位图类型的几个字段)。当我尝试这样做时: 我在gson变量中得到这个: gson={seralizeNulls: false工厂:[Factory[type=co

  • 问题内容: 我将mp3转换为wav的代码是: 但是我得到以下输出: 谁能帮我我在做什么错? 问题答案: 这里的sourceBytes表示MP3文件或WAV文件。audioFormat是您要转换的PCM格式。另外,我们需要将javazoom.com中的mp3spi.jar,tritonus_mp3.jar,jl * .jar,tritonus_share.jar放入类路径中。希望这对其他人有帮助。