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

     2023-03-14     230

关键词:

【中文标题】尽管列为可用格式,但将 ogg 转换为 wav 不起作用【英文标题】:Converting ogg to wav doesn't work although listed as available format 【发布时间】:2014-07-05 06:20:37 【问题描述】:

我要做的是从音频文件生成 10 秒的 sn-ps,并在此过程中将它们转换为 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 文件,但任何播放器都无法播放。

【问题讨论】:

【参考方案1】:

快速谷歌搜索表明 .ogg 是一种容器格式。这意味着内部的数据可以使用不同的编解码器进行编码。所以你使用的文件不支持编解码器。

【讨论】:

【参考方案2】:

我找到了一个解决方案:暂时写入一个 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);
            

【讨论】:

用于将 .wav 文件转换为 ogg 文件的 Python 库

】用于将.wav文件转换为ogg文件的Python库【英文标题】:Pythonlibrarytoconvert.wavfiletooggfile【发布时间】:2013-04-0309:55:45【问题描述】:任何人都可以建议一个Python库(在Windows上)将wav文件转换为ogg文件而不是Pymedia模块。通过使用Pym... 查看详情

在 .NET 中将 Opus (.ogg) 转换为 PCM (.wav)

】在.NET中将Opus(.ogg)转换为PCM(.wav)【英文标题】:ConvertOpus(.ogg)toPCM(.wav)in.NET【发布时间】:2018-11-2815:19:07【问题描述】:我有一个.ogg文件,我需要将其转换为.wav。我正在尝试使用Opus.Net(使用NAudio),但我在OpusDecoder.Decode()中得... 查看详情

天啊!跪求用exactaudiocopy把cd转化为ogg格式的音乐?

我想把我的CD转化为OGG格式的音乐放入MP3中听,哪位会用EAC的专业人士给我发个图解教我下怎么用????记住请说清楚点!要极大限度的还原CD音质!1.豪杰音频通V2.7Build0117豪杰音频通是一款国际流行的音频转换工具软件,支持目前常见... 查看详情

在 WP8 中将 ogg 文件解码为 wav

...发布时间】:2014-05-1123:14:59【问题描述】:我想将ogg文件转换为wav,然后在wp8设备上播放。我已经检查了许多解决方案,但没有一个有效。这看起来很有希望,但有些东西不起作用:string_audioPath="/SomeProject;component/Sounds/a_dog.ogg";v... 查看详情

如何使用某些控制台实用程序将目录中的 .ogg 文件转换为 .wav 文件 [重复]

】如何使用某些控制台实用程序将目录中的.ogg文件转换为.wav文件[重复]【英文标题】:Howtoconvert.oggfilesinsideadirectoryto.wavfilesbyusingsomeconsoleutility[duplicate]【发布时间】:2020-09-2712:39:55【问题描述】:我有一堆文件:dir/file1.oggdir/fil... 查看详情

如何将mp3等音频文件转换为asf格式?

请教各位大虾,我的mp4可以播放asf格式的音频,我查过相关资料,asf格式文件比较小,但我找了很久也没有找到可以转换该格式的软件,请大家告诉几个软件下载地址,谢谢!谢谢回复,我用全能音频转换通V1.2试了,但是只能... 查看详情

ffmpeg 如何转换其他格式的音频文件?

】ffmpeg如何转换其他格式的音频文件?【英文标题】:ffmpeghowconvertaudiofilesinotherformats?【发布时间】:2012-09-2015:34:28【问题描述】:我下载音频文件,我需要将他转换为.mp3、.wav、.ogg.、acc格式。我的脚本:if($ext==\'wav\')shell_exec("f... 查看详情

如何使用 xcode 播放 .ogg 文件

...:2012-03-0906:19:55【问题描述】:我想播放3种不同的文件格式.mp3、.wav、.ogg。我使用AVAudioPlayer并设法播放mp3和wav文件,但它没有播放.ogg文件。如何为我的Xcode项目添加.ogg支持。【问题讨论】:【参考方案1】:AFAIR,框架不直接支... 查看详情

用于将 HTML5 视频转换为 mp4 和 ogg 的 ffmpeg 设置 [关闭]

...L5video[closed]【发布时间】:2011-03-0809:09:33【问题描述】:尽管大肆宣传,但实际上HTML5视频标签存在一些问题。为了使用它并使其与跨浏览器兼容,您必须包含一种以上的视频格式。针对所有支持的浏览器,这些格式是mp4和ogg。... 查看详情

尽管标识列设置为自动递增,但将数据插入到 datagridview 时出现 NoNullAllowedException 错误

】尽管标识列设置为自动递增,但将数据插入到datagridview时出现NoNullAllowedException错误【英文标题】:NoNullAllowedExceptionerrorwheninsertingdatatoadatagridviewdespiteidentitycolumnissettobeauto-incremented【发布时间】:2011-03-2304:27:33【问题描述】:... 查看详情

innosetup压缩游戏时用些音频转换软件

...uot;读取sound下的ogg文件,然后删掉它是这样运作的,先把格式为MP3WAV转换成ogg音频文件,再用BAT运作oggdec.exe还原回音频格式MP3WAV后删掉读取sound下的ogg文件问题就是如何转换成ogg音频文件请高手指教,急!我会天天在线,等着你... 查看详情

如何将 wav 音频文件格式(样本宽度)转换为 8 位格式?

】如何将wav音频文件格式(样本宽度)转换为8位格式?【英文标题】:Howtoconvertawavaudiofileformat(samplewidth)into8bitsformat?【发布时间】:2020-06-1000:36:17【问题描述】:我正在使用录制语音的Pythongui,我需要将wav文件的宽度格式设置... 查看详情

如何将wav格式声音文件转换为文本文件

参考技术AWAV音频格式 查看详情

怎么把音乐wav格式转换为mp3格式

...然后点击右上角的应用。2、进入应用工具后,点击选择格式转化。3、进入格式转换工具后,点击左上角的添加文件。4、点击添加文件后,点击选择WAV格式文件,然后点击打开。5、添加文件后,转化格式设置为MP3,然后点击转... 查看详情

将 MP4 转换为 WAV

...在用Java创建一个小型音频播放器,可以很好地播放某些格式(例如WAV)。我发现这是因为javax.sound不支持MP4。从我读过的内容来看,从MP4转换为WAV是无损的,所以我相信这不应该那么困难。我知道有很多第三方库可以做到这一点... 查看详情

aws-amplify S3 存储上传文件,但将它们设置为“私有”,尽管有明确的公共访问配置

】aws-amplifyS3存储上传文件,但将它们设置为“私有”,尽管有明确的公共访问配置【英文标题】:aws-amplifyS3Storageuploadsfilesbutputthemas"private"despiteofexplicitpublicaccessconfiguration【发布时间】:2020-06-0506:29:55【问题描述】:我... 查看详情

115怎么转码

参考技术A转码指的是将原有的编码格式转换为新的编码格式,使用转码可以解决不同设备、系统之间的兼容性问题。转码的方式有很多,首先要根据转换后的文件形式来确定选择哪种转码方式,一般情况下,可以通过编码器来... 查看详情

在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式

】在客户端JavaScript中将WAV转换为任何压缩音频格式【英文标题】:ConvertingWAVtoanycompressedaudioformatinclient-sideJavaScript【发布时间】:2013-07-0116:14:16【问题描述】:我正在使用Recorder.js在浏览器中录制来自getUserMedia(audio:true);的音频,... 查看详情