首页> 中国专利> 一种通过截取音频波形进行音频编辑和转化的方法

一种通过截取音频波形进行音频编辑和转化的方法

摘要

本发明是一种通过截取音频波形进行音频编辑和转化的方法,其是采用特定的示波器显示界面显示音频数据,并根据需要的情况选择截取音频数据,然后音频数据处理转化,将目标音频数据段计算处理,并将其转换为需要的格式输出;本发明通过示波器的形式将音频文件准确地反映出来,便于使用者进行选择截取,可随着用户的需要随意截取、编辑使用各种音频信息,而且音频信息的利用程度高,减少不必要的信息存储,使得音频文件的使用更具有人性化和可编辑性。

著录项

  • 公开/公告号CN1779777A

    专利类型发明专利

  • 公开/公告日2006-05-31

    原文格式PDF

  • 申请/专利权人 深圳市彩秀科技有限公司;

    申请/专利号CN200510036719.1

  • 发明设计人 沈练;

    申请日2005-08-16

  • 分类号G10H1/00(20060101);G10H7/00(20060101);

  • 代理机构深圳市永杰专利商标事务所;

  • 代理人王志强

  • 地址 518057 广东省深圳市南山区创业路怡海广场东座1003室

  • 入库时间 2023-12-17 17:16:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-10-10

    未缴年费专利权终止 IPC(主分类):G10H1/00 授权公告日:20110105 终止日期:20110816 申请日:20050816

    专利权的终止

  • 2011-01-05

    授权

    授权

  • 2006-08-09

    专利申请权、专利权的转移专利申请权的转移 变更前: 变更后: 登记生效日:20060707 申请日:20050816

    专利申请权、专利权的转移专利申请权的转移

  • 2006-07-26

    实质审查的生效

    实质审查的生效

  • 2006-05-31

    公开

    公开

说明书

技术领域

本发明设计音频的处理,特别是手机音频的编辑和转化,应用于彩信留言。

背景技术

短信在我国的发展非常迅速,以至于非常普及,服务网站在中国的发展也使得网站逐渐走向盈利,从目前网站的运营模式和主要的业务来看,包括网络广告、短信息、网上游戏、电子商务和企业解决方案,短信服务成为网站的一种重要的盈利服务。

目前各网站和运用商推出的短信服务包括以下几种:

SMS:(ShortMessagingService)短消息服务。是目前普及率和使用率最高的一种短消息业务。它是在手机内建立一段文字信息后再发送给朋友,简单方便易用,而每个SMS容量平均有140字节,即70个汉字。

EMS:(EnhancedMessageService)增强型短消息服务。与SMS相比,EMS的优势是除了可以像SMS那样发送文本短消息之外,还可以发送简单的图像、声音和动画等信息。但作为一项过渡技术,并没有得到广泛的应用。

MMS:(MultimediaMessagingServices)多媒体信息服务。以GPRS为载体传送视频、图片、声音和文字。目前世界各地的运营陆续推出这项业务。能够自动快速传送用户创建的内容。它主要以接收者的电话号码进行寻址定位,这样MMS通信可以在终端之间进行。同时MMS也支持E-mail寻址,因此信息可以在终端和E-mail之间传递。不仅可以发送文本内容,MMS信息可以传送包含图片、声音、视频剪辑等多媒体信息。

目前,多媒体短信已经进入人们的视线,包含图片、声音、视频剪辑等在内的高质量多媒体信息可以通过手机上简单操作轻松地实现共享和交流。目前市场上也有一些手机铃声转化工具,但用起来不太方便,功能比较简单,缺少语音编辑这项功能,而那些专用的语音编辑发明大多是收费的,用法很复杂,不便于用户操作。

发明内容

本发明是为了解决现有的铃声转化工具存在使用不便和功能单一等问题而研制开发的。本发明的目的是提供一种通过截取音频波形进行音频编辑和转化的方法,该方法具有使用方便,可进行多功能编辑等特点。

本发明的另一个目的是提供一种通过截取音频波形进行音频编辑和转化的方法,该方法可根据用户的需求适当地编辑、转化音频数据,满足各种人性化需求,且操作方便。

本发明的基本思路是:音频的处理通常包括音频数据采集,数据处理,数据的媒体格式转换。本发明设置示波器界面,数据采集和处理是在示波器中进行的,示波器界面是一个窗口类对象,便于用户根据自己所需要的内容对音频数据进行采集和处理。

基于此,本发明是这样实现的:

一种通过截取音频波形进行音频编辑和转化的方法,其是采用特定的示波器显示界面显示音频数据,并根据需要的情况选择截取音频数据,其具体的实现的步骤为:

1、启动示波器,并通过界面显示出来;

2、采集音频数据,将该音频数据表现为波形数据显示到示波器界面中;

3、截取音频数据,根据需要选择目标音频数据段;

4、音频数据处理转化,将目标音频数据段计算处理,并将其转换为需要的格式输出。

采集音频数据是通过读取存储器中的音频信息或者内存中的音频信息实现的,该音频数据包括每个存储文件中所有的文件内容,音频文件的格式有wav、mp3、wma、rm,还可包括语音数据的采集(通过录音方式实现)。示波器是一个窗口类对象,它封装了绘画网格线、表尺、波形数据,及波形数据分段选取,录音、播放音频、音频文件的创建和存储的功能,其主要的作用是将音频数据的波形数据结合时间参数表现出来,供使用者进行数据的选择、截取和播放。

波形数据是通过RIFF和WAVEFORMATEX结构形式记录的,RIFF中保存的是“data”标记和音频数据的长度,WAVEFORMATEX中保存的是音频媒体的格式参数。还有就是音频数据区域,把该数据区域的首地址保存起来,存储到相应的地址指针中,这就是音频数据的开始地址,由此这样整个波形文件的数据都可以读取出来。

截取音频数据,是在音频数据中插入插入符的形式,选定所要编辑处理的音频数据段,插入符为两个的倍数设置的,最少为两个。

目标音频数据段的选择是根据所选中波形(波形数据所显示的)的起点和终点在矩形区域的百分比的比值,然后就是把这比值乘以波形数据的长度就可得到数据的偏移位置,有了数据的偏移位置,再根据波形数据的首地址,就可得到所选中的波形的数据。

为了确定所选择波形数据的准确性,还可通过波形的反色处理方法达到明确所选择波形数据的效果。该反色处理是在OnMouseMove函数中进行,通过往该函数中传入所选中波形的起点和终点的x轴的坐标来确定选中的波形反色。

音频数据的处理包括运算和存储,先对前面选定的音频数据段进行运算,运算完成后重新分配内存,将运算后的音频数据存储于内存新增加的存储区。

音频数据的转化,是将上述所存储的音频数据进行解码,先转化为wave文件,再采用3GPP标准,通过Amr编码器从wave文件编码转化为Amr文件,并进行存储。

上述的音频数据处理后,还可进行播放试听,考证所处理的音频数据段的播放效果,如果不能满足要求,则可重新进行音频数据的截取和处理。

该方法还可实现音频数据的分段选取,录音、播放音频、音频文件的创建和存储的功能。数据的媒体格式转换是通过3GPP标准进行amr编码,所得到的文件是amr文件,也就是手机铃声通常所用的格式文件。

手机铃声的格式有好多种,Amr是他们当中的一种格式。该铃声格式的最大的特点是压缩比很大,可以达到100比1,现在的手机的内存也是比较小的,而用amr格式的铃声,在相同的存储空间中,可以存储媒体的内容就比较多。因为它比其他媒体格式也就是说,具有相同播放时长的媒体文件,而amr格式的媒体文件所占的存储空间更小,这样也就是说用amr格式的铃声,可以大大节省手机的存储空间。

本发明的主要特点是由一个示波器对象来实现,该示波器的处理包括音频文件的显示,录音,语音试听。对于该方法的一些具体要求为:

其中,对于(1)音频数据:

音频数据的范围要尽量广,该对象要能识别文件数据类型,内存块数据,还有语音数据。文件数据类型是通过传入文件的全路径,然后是读入整个文件的内容。

内存处理上述的数据时传入的一个带有音频数据的内存数据存储区。语音数据是在录音时对声卡进行实时采样而得到的数据。

(2)文件数据类型的读取:

先开始用文件的扩展名来区分媒体类型,遇到无法识别的文件,例如像没有扩展名或是扩展名与它的实际媒体类型不相符的情况,采用音频文件头识别技术。

(3)选择音频数据:

在音频数据的波形图上选取时会显示一根细长的插入符,用CreateCaret函数就可创建插入符,通过两个插入符可确定一段所选取的音频数据。

(4)音频的处理:

通过调用waveInOpen函数,成功打开波形音频设备后给WAVEHDR数据结构初始化数据,给其分配波形存储区,WAVEHDR数据结构是波形音频的存储区的头部,接着用函数waveInPrepareHeader,把WAVEHDR结构传入到波形音频设备中,通知波形音频设备准备音频的存储区。

读取音频数据中的消息码,把该时刻所采样到的语音数据保存起来,然后再调用waveInAddBuffer函数再给波形音频设备添加一个WAVEHDR数据结构,在该语音数据的保存过程中,利用realloc函数给先前的语音数据存储块,重新分配内存,然后给新增加的存储区拷贝新到来的语音数据。

本发明通过示波器的形式将音频文件准确地反映出来,便于使用者进行选择截取,可随着用户的需要随意截取、编辑使用各种音频信息,而且音频信息的利用程度高,减少不必要的信息存储,使得音频文件的使用更具有人性化和可编辑性。

本发明还具有真人原音录入功能,语音可以编辑,音频文件解码的效率比较高,经Amr编码的压缩率很高,生成的铃声文件比较小,适用于上传到手机上,编码前经过了滤波处理,所生成铃声的音质比较好,失真率低。且可根据用户的需求适当地编辑、转化音频数据,满足各种人性化需求,且操作方便。

附图说明

图1是文件转铃声的流程图,

图2是语音转铃声的流程图。

具体实施方式

参见图1和图2本发明的具体实施过程如下:

本发明主要由一个示波器对象来实现,其可实现包括音频文件的显示,录音,语音试听的功能。其中

(1)数据源:

数据源的范围要尽量广,该对象要能识别文件数据类型,内存块数据,还有语音数据。文件数据类型是通过传入文件的全路径,然后是读入整个文件的内容。

内存块数据时传入的一个带有音频数据的内存数据存储区。语音数据是在录音时对声卡进行实时采样而得到的数据。

(2)文件数据类型的读取:

先开始用文件的扩展名来区分媒体类型,遇到无法识别的文件,例如像没有扩展名或是扩展名与它的实际媒体类型不相符的情况,采用音频文件头识别技术。

具体做法:波形文件头中有两个很重要的数据结构:RIFF和WAVEFORMATEX。

RIFF的数据结构的定义如下:

//RIFF file head  //8byte

typedef struct RIFF{

  char ID[4];

  DWORD Size;

}riff;

参数说明:

ID中存储4个字节的“RIFF”标记,Size存储音频文件的长度。WAVEFORMATEX数据结构在系统文件mmsystem.h中就有定义,所以就不必自己再定义。该格式在mmsystem.h文件中的定义如下

typedef struct{

  WORD wFormatTag

  WORD nChannels

  DWORD nSamplesPerSec

  DWORD nAvgBytesPerSec

  WORD nBlockAlign

  WORD wBitsPerSample

  WORD cbSize

}WAVEFORMATEX;

参数说明:

wFormatTag波形音频的媒体类型,该发明中该参数值设为WAVE_FORMAT_PCM。

nChannels       通道值,该参数值1为单声道,2为立体声。

nSamplesPerSec  每秒的采样速率。,

nAvgBytesPerSec 平均采样速率。

nBlockAlign     采样的数据单元,可设为1、2、4个字节。

wBitsPerSample  采样精度,可设为8位、16位。

cbSize;        该发明中忽略该参数。

波形文件头的数据按地址顺序如下:

4个字节的“RIFF”标记。

4个字节的文件数据的长度值。

4个字节的“WAVE”标记。

4个字节的“fmt”标记。

4个字节的PCMWAVEFORMAT结构的长度值。

16个字节的WAVEFORMATEX结构的数据。,

4个字节的“data”标记。 

4个字节的data数据区的长度值,

后面就是音频数据的二进制数据值。

文件头的数据的读取验证是按以上的标记,按顺序逐个比较。每次读入的数据的长度按RIFF结构的大小来读取,比较四个字节的数据标记,这些数据标记分别是“RIFF”,”WAVE”,”FMT”,”DATA”.将读入的数据结构的值分别保存在RIFF和WAVEFORMATEX结构中,RIFF中保存的是“data”标记和音频数据的长度,WAVEFORMATEX中保存的是音频媒体的格式参数。还有就是音频数据区域,把该数据区域的首地址保存起来,这就是音频数据的开始地址。这样整个波形文件的数据都读取出来了,接着就是绘画波形图。

(3)示波器

在这里,示波器并不是传统意义的示波器,而是通过显示界面表现出来的一个控制界面,其是CPU读取音频数据后,将音频数据通过波形的形式显示,便于编辑及观察,其作用是用来形成音频的波形图(简称波形图),选取音频的波形数据段(简称波形数据)。形成波形图可分为三个环节,分别是标识矩形区域的网格,标尺,音频数据的波形。在形成过程中采用内存dc,图形都保存到内存dc中,在更新视图时用BitBlt函数把内存dc中的数据读取到显示器dc中,这样就可看到图形了。

1)标识网格

采用点划线,由于windows提供的线形不满足要求,所以采用自定义的方法画网格线,具体实现方法,用画素点的方法来画点划线,就是在x轴,y轴上每隔定义n个像素点,从而形成点划线。点划线点的疏密程度可用间隔参数n来控制。本发明采用方法是把矩形区域的横向分成20等份,纵向分成10个等份,间隔参数n设为2。

2)标识标尺

在矩形区域上按照上述的要求标识10个刻度标线,并对这个10个刻度完成半刻度表线。刻度标线可采用1ineTo,Rectangle函数生成,通俗意义上说就是标竖线,竖线完成后接着标明标尺的底线。完成标线后,接着标刻度,刻度格式为00:00:00,含义是:小时:分钟:秒,由于标注区域的大小限制,采用只标注0、2、4、6、8、10位置的刻度值。默认值分别0,00:00:02,00:00:04,00:00:06,00:00:08,00:00:10。在有媒体数据的情况中,这些标注值与媒体的可播放的最长时间有关。获取媒体数据的最长可播放时间,应采用RIFF结构中的数值,其中的size字段值就是媒体数据的长度,WAVEFORMATEX结构中的字段nAvgBytesPerSec值是平均每秒的采样速率媒体的播放时长为size值除以nAvgBytesPerSec值。标尺上的最大刻度值应大于等于媒体的最大播放时长。这有个算法:假如该播放时长能被10整除,那标尺上的标注就可按该播放时长的十分之一值递增。假如不能整除,那标尺上的标注就可按该播放时长的十分之一值再加1后的值递增。

3)形成波形数据

波形数据在一开始媒体数据源读入的,该数据区域的首地址就已经保存在一个自定义的指针中。数据长度就是RIFF结构中的size字段的值,假如是立体声格式,该值还得除以2,每个通道的数据的起始值是递增的,第一个通道的数据的起始值是0的波形数据,第二个通道的数据的起始值是1的波形数据,依次类推,好像是把波形数据看作是一个数组。数据的间隔设为40,这样每隔40个数据点就形成一个波形值,x轴坐标可看作是是矩形区域的长度乘以当前数据的原波形数据长度的一个百分比值,取整,这样会有多个波形值在同一个x坐标点上输出,从而形成以多个点相叠加所形成的波形图。波形图的y轴坐标就是该点的波形数据的二进制值,算法是:单声道,((BYTE*)m_data-128))/128,参数h是一个高度,值为矩形高度的二分之一立体声:((BYTE*)m_data)*h)/(65535/2),参数h是一个高度,值为矩形高度的四分之一。

4)波形数据的分段选取

通常是通过鼠标左键来选取一段波形数据。选中的数据在波形图上会反色显示。具体的实现方法:在鼠标单击波形图时会在该鼠标点上显示一根细长的插入符,用CreateCaret函数就可创建插入符。CreateCaret函数原型:

   BOOL CreateCaret(

     HWND hWnd,

     HBITMAP hBitmap,

     int nWidth,

     int nHeight

   );

参数说明:

hWnd     为插入符的窗口句柄。

Hbitmap  为插入符的图片句柄,假如该参数设为NULL,则插入符的形状是实体的。在

         该发明中,该参数设为NULL。

nWidth   插入符的宽度,该发明中,该参数值设为0。

nHeight  插入符的高度,该发明中,该参数值设为巨型区域的高度减去标尺中的字

         体高度,或是减去标尺的高度。该发明中的字体选宋体,大小为10,它的

         显示区域的高度大约在12个像素,标尺的高度在该发明中是设为25个像

         素的。

选中的波形的反色处理方法:

这个处理过程是在OnMouseMove函数中进行,该函数是响应鼠标移动事件的,一触发鼠标移动事件,程序就会调用该函数。具体做法是,用Rectangle函数,通过往该函数中传入所选中波形的起点和终点的x轴的坐标来绘画选中的波形图反色。

这有一个很关键的参数要设置,那就是显示器显示dc的形成模式,设置参数可以这样:dc->SetROP2(R2_NOT),dc是一个显示器显示dc的指针。参数R2_NOT的含义是所得的像素是反转显示器的颜色的。

获取所选中的波形的数据:

根据所选中波形的起点和终点在矩形区域的百分比的比值,然后就是把这比值乘以波形数据的长度就可得到数据的偏移位置了,有了数据的偏移位置,再根据波形数据的首地址,就可得到所选中的波形的数据。

其中对自己录制的音频信号,其处理过程如图2所示。

3.录音

1)音频参数选用:

为了节省磁盘空间采用11.025KHz的采样速率,采样精度为8位,采样通道为单声道。

这些参数在WAVEFORMATEX结构中设置。设置如下:采样速率nSamplesPerSec;为11025,采样精度nBlockAlign为8,通道号nChannels为1,含义是选用单声道。

2)设备的选用

音频设备选用系统的波形音频输入设备,该设备是在安装声卡的过程中自动安装的。录音设备可以是麦克风,也可以是其他的语音输入设备。

3)录音的函数的选用

采用低层的WAVEFORM FUNCTION(波形函数),这些函数可以很方便地访问音频硬件。在录音的过程中用到的几个关键函数是waveInOpen,waveInPrepareHeader,waveInAddBuffer,waveInStart,aveInUnprepareHeader,waveOutReset,waveInClose。这些函数所触发的消息是在示波器对象的WindowProc函数中处理的,充分利用了基于windows窗口消息的优点。

4)音频的选取,方法与上述方法一致,在此不再赘述。

5)录音的整个处理过程

先是设置WAVEFORMATEX的参数,采样速率110250,采样精度8位,采样通道为声道。接着是打开波形音频设备,用到的函数是waveInOpen,该函数的定义如下:

MMRESULT waveInOpen(

   LPHWAVEIN       phwi.

   UINT_PTR        uDeviceID

   LPWAVEFORMATEX  pwfx

   DWORD_PTR       dwCallback

   DWORD_PTR       dwCallbackInstance

   DWORD           fdwOpen

);

参数说明:

phwi               用来获取波形音频输入设备的定义符的句柄,该值是一个内存指针。

UDeviceID          波形音频输入设备的表识符。该参数值设为WAVE_MAPPER。

Pwfx               指向WAVEFORMATEX数据结构。

DwCallback         回调函数,该值设为WindowProc的函数指针。

DwCallbackInstance 回调函数的实例句柄值。该值设为this,也可设为NULL.

FdwOpen            打开设备的标记,该发明中选用CALLBACK_WINDOW,用窗口回调函

                   数来响应波形音频设备的所触发的消息。

在通过调用waveInOpen函数,成功打开波形音频设备后给WAVEHDR数据结构初始化数据,给其分配波形存储区,WAVEHDR数据结构是波形音频的存储区的头部,接着用函数waveInPrepareHeader,把WAVEHDR结构传入到波形音频设备中,通知波形音频设备准备音频的存储区。双缓冲采样就用在这个地方,定义两个WAVEHDR数据结构,经初始化后,通过调用waveInPrepareHeader函数,分别传入波形音频设备的存储区。在调用waveInOpen函数,WindowProc函数中会检索到MM_WIM_OPEN的消息码,在该消息码后就可以用函数waveInAddBuffer把WAVEHDR数据结构添加到波形音频设备中,是用来存储语音数据的。接着调用waveInStart函数,开始语音采样。在调用waveInStart函数后,WindowProc函数中会检索到MM_WIM_DATA的消息码在该消息码后就可获取所采样到的语音数据了,把该时刻所采样到的语音数据保存起来,然后再调用waveInAddBuffer函数再给波形音频设备添加一个WAVEHDR数据结构,作用是,让波形音频设备把下次所采样到的语音数据存放在该WAVEHDR数据结构中。在该语音数据的保存过程中,本发明用到了动态内存增长技术,原理是利用realloc函数给先前的语音数据存储块,重新分配内存,然后给新增加的存储区拷贝新到来的语音数据。这样就可把语音采样的数据完整地保存起来。WAVEHDR数据结构的定义如下:

 typedef struct{LPSTR lpData;DWORD dwBufferLength;DWORD dwBytesRecorded;DWORD_PTR dwUser;DWORD dwFlags;DWORD dwLoops;struct wavehdr tag*lpNext;DWORD_PTR reserved; }WAVEHDR;

本发明中该数据结构值的设置如下:

m_pWaveHdr1->lpData         =(LPSTR)m_pBuffer1;

m_pWaveHdr1->dwBufferLength =INP_BUFFER_SIZE;

m_pWaveHdr1->dwBytesRecorded=0;

m_pWaveHdr1->dwUser         =0;

m_pWaveHdr1->dwFlags        =0;

m_pWaveHdr1->dwLoops        =1;

m_pWaveHdr1->lpNext         =NULL;

m_pWaveHdr1->reserved       =0;

INP_BUFFER_SIZE=16K,也就是16*1024的一个整数值。m_pBuffer1是一个大小为16K的存储区。通过调用waveInReset函数可以停止录音,调用waveInReset函数后,在WindowProc函数中会检索到MM_WIM_CLOSE的消息码,在该消息码后就可以用函数waveInUnprepareHeader,通知波形音频设备不再有WAVEHDR数据结构添加进来。

接着释放语音采样的存储区,调用waveInClose函数,关闭波形音频设备。

图1所示的处理音频文件的音频数据的处理与上述的过程相同。

在录音过程还可同时显示音频数据的动态波形图,

6)在录音过程中动态显示波形图

显示方法:如上所述形成所采样到的所有语音数据的波形图,该线程该语音数据到来前或是在开始录音时就因该已经创建了,让该线程等待自定义的windows事件对象,而该自定义的windows事件对象的受信控制是在WindowProc函数中的MM_WIM_DATA的消息码中控制的,假如有新的语音数据到来时,先是存储语音数据,存储后就给那个windows事件对象受信,用函数SetEvent实现事件对象的受信。受信的含义就是给对象设置信号状态,使它的信号有效。一旦事件对象受信,等待它的那个线程立刻就被操作系统唤醒。线程执行,开始将波形数据,保存到内存dc中,波形图完成后,用BitBlt函数把内存dc的图形输出到显示器上。接着该线程又等待那个windows事件对象。该windows事件对象是自动设置信号状态的,一旦受信后,马上会自动转为无受信状态,所以线程在等待windows事件对象时,会被操作系统给挂起,一旦事件对象受信,又会被操作系统唤醒。

7)播放

音频数据处理后,还可进行播放,以判断所选取的音频数据是否满足要求。音频播放的数据源可分为两种类型,一种是媒体文件类型,另一种是语音类型。他们的区别主要是文件头的参数不一样,就是RIFF数据结构和WAVEFORMATEX这个数据结构的数值不一样,这两种媒体类型的这个两个数据结构都可以获取到的,前者是通过解析媒体文件获取,后者是通过录音时所给定的参数就是WAVEFORMATEX数据结构,RIFF数据结构中的size字段值是在语音采样过程中,在动态绘画波形图时,设置语音数据参数时更新的。也可在音频数据采样时,在动态增长的过程中,动态更新。音频播放也是采用低层的WAVEFORM FUNCTION(波形函数),用到的函数有waveOutOpen,waveOutPrepareHeader,waveOutWrite,waveOutUnprepareHeader,waveOutClose。音频播放的实现过程如下:

一开始也是初始化WAVEFORMATEX数据结构,调用waveOutOpen函数来打开音频的输出设备。该函数的参数设置与上述的waveInOpen函数的设置相同的,音频设备所触发的一些消息也是放在WindowProc函数中处理。调用waveInOpen函数后在WindowProc函数中检索到MM_WOM_OPEN消息码,在该消息码下添加代码,实现真正的音频数据输出到波形音频输出设备中。先是设置WAVEHDR数据结构的数值,传入音频数据的数据块的首地址,音频数据块的长度。调用waveOutPrepareHeader函数把WAVEHDR数据结构值传入到波形音频输出设备中,通知该设备准备音频输出。接着是调用waveOutWrite函数把WAVEHDR数据结构的音频数据输出到波形音频输出设备,这样就会有声音从声卡中发出来。音频播放的整个播放的实现过程就是如上述所说的那样。在调用waveOutWrite函数后可创建一个定时器,用来更新播放进度。实现的方法是,用插入符位置来表示那时刻的播放进度,因为在插入符所对应的位置下就有标尺标注的音频播放的该时刻的时间,定时器每触发一次就去调用waveOutGetPosition函数来获取播放音频数据的数据偏移位置。以这个数据可以算出该点的位置在要播放的音频数据段中百分比,在用这个百分比乘以矩形区域的宽度,再加上开始播放音频时的插入符的位置就是当前的播放位置。设置插入符的位置到上述计算所得到的位置。这样就可看到插入符在动态更新位置,让人感觉就是音频播放时,它的播放进度一直在更新。

 5.媒体格式转化

(1)mp3转化wave

也就是Mp3解码,采用解码高效率的“libmad-MPEG audio decoder library”,是一个开放源码,比较通用,在解码过程中可反馈解码状态,解码进度。解码出来的数据保存为wave文件。解码在一个独立的线程中进行。它是一个已经封装好的动态连接库,在这里就不再叙述了。

(2)wave转amr

也就是该发明中所说的手机铃声转化了,采用3GPP标准,编码实现从wave文件转为Amr文件,这个也是网上开放的插件,在这里就不再叙述了。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号