`
mmdev
  • 浏览: 13140921 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

浅析OGG VORBIS

 
阅读更多

转自:http://blog.csdn.net/tkokof1/archive/2009/08/05/4411896.aspx

虽说OGG VORBIS的登场并未晚过前辈MP3过多时日,其的出现也正是为了阻拦MP3一路高歌猛进的强劲步伐,可是至少在中国这块破解软件的乐土,MP3虚有其表的版权以及真真切切的封闭却并未驱使人们义无反顾的投身OGG VORBIS的怀抱,尽管他完全的开源,尽管他彻底的免费,虽说在Linux平台上Ogg Vorbis的确流行,但是在中国这片Windows大放异彩的土地上,能够耳闻Ogg Vorbis名号的人估计也不在多数,笔者曾经在网上搜索过Ogg Vorbis相关的文章,大抵都是一些浮光掠影的简介,有些内容的也大多以英文写就,读来确有不便,再加上我在学习游戏编程的过程中对Ogg Vorbis有过一点浅显的认识,所以萌生了写作此文的想法,但文章终究是我的个人看法,期中讹误在所难免,希望大家对于其中不便于理解或者认为错误的地方一一指出,以使我进一步修正改进,总的来说我必须为那句“古语”负责:贻笑大方事小,误人子弟事大:)

那么闲话少叙,我们开始正题:

之一 Ogg Vorbis概述

Ogg Vorbis 是一种音频压缩格式,类似于MP3等现有的音乐格式, 但有一点不同的是,它是完全免费、开放和没有专利限制的,而对其的维护工作, 则是由Xiph.Org基金会来进行。

(官方网站:http://www.xiph.org)

Ogg Vorbis文件的扩展名是.OGG, 如今的主流播放器基本上都可播放,(有兴趣的读者可以自己下一首用千千静音播放来听听: ) )而且,该文件格式还在不断地进行大小和音质的改良 : )。

就音质而言, Ogg Vorbis 虽然使用了与MP3相比完全不同的数学原理,但在当前的聆听测试中,同样位速率编码的Ogg Vorbis 和 MP3 文件基本上具有相同的声音质量 : )。

之二 Ogg Vorbis使用

Ogg Vorbis 的API分为四个各司其职的类库:Ogg类库,Vorbis类库,Vorbisenc类库以及Vorbisfile类库。

你可能对于Ogg Vorbis这个名字有些疑惑不解,但其本质意义却与MP3如出一辙。就像MP3本身是RIFF文件的一种编解码器一样,Vorbis也便是Ogg文件下的一种编解码器(尽管只有这么一种...),所以Ogg的意义便是Xiph组织为压缩的音视频数据所定义的一个框架,而Vorbis便是这个框架下的音频编解码器。再谈到上述Ogg Vorbis的四个类库,其中Ogg类库包含了处理Ogg Vorbis文件的通用例程,而Vorbis类库则包含了一些使用Vorbis进行解码时所必需的基础函数。

另外关于Vorbisenc类库则用以辅助编码Ogg Vorbis文件,而Vorbisfile类库则是综合使用Ogg类库以及Vorbis类库,并为我们提供了简单的接口以方便的处理Ogg Vorbis文件,功能可谓相当实用。

至于Ogg Vorbis的安装,可以在Ogg Vorbis的官方英文网站:http://www.xiph.org上免费下载,不过这里会有一个问题,虽然在此可以下载到最新的类库(libogg及libvorbis),但是这些文件下载后都必须在本地进行手工创建之后才能使用,步骤并不简单,所以在此我选择直接使用SDK的方法,但是由于网上此类SDK版本古老的缘故,有些甚至不能完全支持Windows平台下几款主流的C/C++编译器,如MinGW( 我便不幸遇到过这个问题:( ),不过问题解决起来也并不困难,错误的原因大抵是出在os_types.h这个头文件上,如果你在使用MinGW(其它编译器类似)编译Ogg Vorbis程序时遇到了不能正确识别类型的问题,请在os_types.h文件中的适当位置添加如下代码:(MinGW为例)

或者干脆用最新版的os_types.h文件进行替换。但是此番改动之后也并不能百分百保证能够正确编译你的程序,相关文件也许仍需进行细微的变更,所以我整理了一份较新版的SDK,不过仅支持MS Visual编译平台,相应文件请见后链接:)

包含了正确的头文件,链接上正确的DLL,下面便仅剩得使用Ogg Vorbis的API了,个中函数在Ogg Vorbis所提供的帮助文档中都有很好的论述,有兴趣的读者可以进一步的学习,而在此篇粕文中,我会在第三部分辅以一个简单的实例来进行一番浅显的介绍,有兴趣的读者可以进一步参考相应的帮助文档。

之三 Ogg Vorbis实践

对于一个Ogg Vorbis文件,我们能想到的第一个处理便是播放,这也是它最重要也是最基本的功能,以下的一个实例也便是围绕此点展开,其中的代码我尽量进行注释与评说,但是限于篇幅,有些内容仍需读者参看相关文档,不方便之处请各位读者谅解:)

第一,自然是选择语言及相应编译器,在此我选择了C++(当然C也不错,但我本人对C++较为熟悉,所以...),编译器方面为了简洁,我本想采用MinGW,但是由于未能找到对应的Ogg Vorbis类库的原因,我还是选择了当今主流编译器——微软的Visual系列(严格来讲其实是个IDE:)),不过使用它也有一些缺陷:一是由于其对C++标准的支持有限,实在有些我行我素;二是对于示例程序来说也并不需要如此庞大的IDE,用来颇有些杀鸡用牛刀的感觉。不过他的编译效率和质量自然有目共睹,Win32平台其他的C/C++编译平台在此方面可谓无出其右。

第二,便是对于程序做一个简单的设计,由于当今声卡底层主要支持的声音格式不过两种:Wave和Midi,而Ogg Vorbis同MP3一样,都是为了弥补Wave格式臃肿的体型而出现的,所以我们可以写一个类,用于将Ogg Vorbis格式解码成Wave格式的文件,然后便可以轻松的调用Win32平台的API进行播放了:)

那么,事不宜迟,让我们马上开始:

注1:一般此处使用ov_open函数,但是在Windows平台下往往会导致保护错误,原因是vorbisfile库和应用程序常常会链接到不同版本的CRT所引起的,所以在Windows上我们应该使用ov_fopen函数或者ov_open_callbacks函数,进一步信息请参看OggVorbis帮助文档。

至此,一个简单的Ogg Vorbis格式转换至Wave格式的类已经可以工作了,也许你认为程序还比较粗糙,仍可以进一步雕琢:例如引入流技术,加上单例设计模式,或者更好的资源管理等等,但是对于一个示例程序来说,其也算是比较明朗清晰了,所以暂不管它的尚待改进之处,让我们先写一个示例程序来感受一番Ogg Vorbis格式音乐的动人之处:),以后的扩展工作就留给你尽情想象发挥吧:)

首先写上一段最简单的Win32应用程序,然后添上下面一段简洁的代码:

DealOggVorbis dov;

const char* data = dov.OggToWave( "River.ogg" );

PlaySound( data, NULL, SND_MEMORY|SND_ASYNC );

就这么简单,一首天籁随即萦绕我们的耳旁了:)

至此,相关Ogg Vorbis的知识也浮光掠影的讲述完毕了,希望有兴趣的读者可以进一步的学习研究,继续支持Ogg Vorbis,继续发扬我们伟大的开源精神:)

( 相关参考:Ogg Vorbis帮助文档;《游戏音效编程》;开发ogg播放程序的一点心得(网页);Ogg Vorbis - 自由的声音(网页) )

链接(ogg vorbis sdk):http://download.csdn.net/source/1548448

分享到:
评论

相关推荐

    ogg_vorbis.rar_FLAC_SDK_Vorbis/Ogg Aud_ogg_ogg文件

    标题中的"ogg_vorbis.rar_FLAC_SDK_Vorbis/Ogg Aud_ogg_ogg文件"表明这个压缩包包含了与Ogg Vorbis音频编码技术相关的软件开发工具包(SDK),可能还包括了FLAC(Free Lossless Audio Codec)的组件。描述中提到,此...

    ogg vorbis 示例程序

    ogg vorbis是一种开放源代码的音频编码格式,用于数字音频的压缩。它是Xiph.Org基金会推出的一种替代传统有损音频编码格式(如MP3和AAC)的选择。Vorbis编码能够提供高质量的音频流,同时保持相对较小的文件大小。 ...

    ogg vorbis SDK

    Ogg Vorbis SDK 是一个用于开发音频编码和解码应用程序的软件开发工具包,尤其专注于使用Ogg Vorbis编码格式。Ogg Vorbis是一种开放源代码的音频压缩格式,旨在提供高质量的音频流媒体,其音质优于MP3,而文件大小...

    S60 Ogg vorbis codec:现在可以收听ogg vorbis格式的音乐了!-开源

    标题中的"S60 Ogg Vorbis codec"指的是诺基亚S60平台上的Ogg Vorbis编解码器,这是一个专为S60智能手机系统设计的音频处理技术,使得用户能够在手机上播放Ogg Vorbis格式的音频文件。Ogg Vorbis是一种自由、开放源...

    vorbisacm(ogg)解决音频0×6771的问题

    Vorbis ACM(Audio Compression Manager)是Windows操作系统中用于处理Vorbis音频编码的一种插件。在音频处理中,我们可能会遇到错误代码0x6771,这通常表示系统在尝试播放或处理Vorbis格式音频时遇到了问题。本文将...

    IDZAQAudioPlayer, 在iOS上,使用音频队列播放 Ogg Vorbis.zip

    IDZAQAudioPlayer, 在iOS上,使用音频队列播放 Ogg Vorbis IDZAQAudioPlayer使用音频队列的易于使用的音频播放器。这是我博客上即将推出的教程的未完成源代码。 请注意以下事项:仅部分实现了查找错误处理不完整或者...

    Advanced WMA Workshop V2.32 汉化版(音乐格式转换)

    WMA9 转 MP3 、WMA9 转 OGG Vorbis 、WMA9 转 WAV PCM 、WMA9 转 WMA 9 (重新采样) 、MP3 转 WMA 9 、MP3 转 OGG Vorbis 、MP3 转 WAV PCM 、MP3 转 MP3 (重新采样) 、OGG Vorbis 转 WMA 9 、OGG Vorbis 转 MP3 、...

    音频编辑录音器(Audacity) 音频编辑器。你可以使用它来录音,播放,输入输出WAB、AIFF、Ogg Vorbis和MP3文件

    音频编辑录音器(Audacity) 音频编辑器。你可以使用它来录音,播放,输入输出WAB、AIFF、Ogg Vorbis和MP3文件

    ogg音频转换压缩

    标题中的“ogg音频转换压缩”指的是将音频文件格式从其他类型转换为Ogg Vorbis格式,这是一种开源、无专利限制的数字音频压缩格式。Ogg Vorbis提供高质量的声音,且文件大小相对较小,适合在线流媒体和存储。本节将...

    vorbis-tools-1.0.1.zip_VORB_vorbis_vorbis tools 1.0_vorbis tools

    Vorbis工具集是音频编码领域的一个开源项目,主要由Ogg Vorbis编码器、解码器和其他相关工具组成,版本为1.0.1。这个压缩包`vorbis-tools-1.0.1.zip`包含了实现Vorbis音频格式处理所需的全部源代码,适合开发者用于...

    vorbis-winrt:Windows运行时的Ogg Vorbis

    Windows运行时的Ogg Vorbis vorbis-winrt正在开发一个简单的Windows运行时组件,用于解码(到目前为止) 文件。 它是完全用C ++ / CX编写的,并且基于原始的libvorbis和libvorbisfile C库版本1.3.4源代码。 C#和C +...

    ogg音乐文件

    ogg音乐文件是一种开放源代码的音频格式,全称为Ogg Vorbis,它是由Xiph.Org基金会开发的。Ogg格式旨在提供高质量的音频编码,同时保持文件大小相对较小,便于网络传输和存储。Vorbis是Ogg容器中的音频编码算法,它...

    Ogg Vorbis Player的.NET实现

    《.NET实现Ogg Vorbis播放器》 在当今的数字音频领域,Ogg Vorbis作为一种高质量、开源的音频编码格式,受到广大开发者和音乐爱好者的喜爱。本文将探讨如何在.NET环境中,利用C#或C++等语言,实现对Ogg Vorbis音频...

    通信与网络中的TensilicaHiFi处理器内核新增Ogg Vorbis解码器

    Tensilica HiFi 2音频引擎和Diamond 330 HiFi处理器内核新增Ogg Vorbis解码器 Tensilica公司日前宣布已在其广受欢迎的Xtensa HiFi 2 音频引擎和Diamond 330 HiFi处理器内核的音频算法软件包中新增了一款Ogg Vorbis...

    droidcast:适用于Android的OGG Vorbis流媒体服务

    Droidcast是一个Android库,实现了OGG Vorbis流媒体服务。 尽管Android媒体播放器确实支持OGG Vorbis,但它不提供来自Vorbis注释的实时元数据。 Droidcast使用纯Java OGG Vorbis解码器播放OGG流,使您可以收听元...

    KDE2 Ogg Vorbis file tag editor-开源

    Ogg Vorbis是一种开放源代码的音频编码格式,以其出色的音质和相对较小的文件大小受到许多音乐爱好者的青睐。在数字媒体管理中,元数据的编辑是必不可少的,特别是对于音乐文件,它可以帮助我们组织和搜索歌曲。而...

    vorbis:Ogg Vorbis音频格式的参考实现

    Vorbis是通用的音频和音乐编码格式,与MPEG-4的AAC和TwinVQ相比是当代的,它是MPEG音频层3以外的下一代。不同于MPEG赞助的格式(以及其他专有格式,例如RealAudio G2和本月Windows风格) ,Vorbis CODEC规范属于...

    export about ogg

    "Export about ogg"可能是指关于如何导出或处理Ogg Vorbis文件的相关知识,这可能涵盖了编码、解码、转换以及其他与Ogg格式相关的操作。 【标签】:“og” 这里的"og"可能是指Ogg的一般概念,或者可能是“Original...

    Ogg Vorbis Player-开源

    Ogg Vorbis Player 是一个基于 GTK+ 的 Vorbis 文件播放器。 当前功能是标准的播放/暂停、FF、倒带等按钮。 图形输出电平。 计划的功能包括播放列表和流媒体 Internet 音频。 需要 SDL 1.1.8+、libogg、libvorbis、

    .ogg音频文件

    描述中的“73个.ogg音频文件”意味着这是一个包含73个独立音频文件的集合,这些文件都采用了Ogg Vorbis编码,并以.ogg为扩展名。这可能是一个铃声库,适用于手机、电脑或其他设备,提供多样化的音效选择。 标签中...

Global site tag (gtag.js) - Google Analytics