[0054] 具体实施时,可参考上述步骤S12中所举实例为例,对于每秒设置150组音频组的音频M,由于每组中都294个音频数据作为该组的采样数据量,因而对每组中的294个音频数据进行遍历,遍历出每组中的初始最大值和初始最小值。例如,先比较数据A和B两个值,若A>B,则将A设为初始最大值,B设为初始最小值;再比较数据C,将C与A和B进行比较,如C>A,则将C设为初始最大值,若C
[0055] 图3图3是本发明实施例中抽取音频M的初始最大值和初始最小值的流程图。如图3所示,假设上述音频M的总时长为10分钟,其中音频数据的个数为26460000(44.1×1000×60×10),则设置每秒的音频组为150组,10分钟则有90000(150组×60秒×10分钟)组音频组,每组的采样数据量为294个,在抽取初始最大值和初始最小值时,首先,从第1个音频数据开始遍历到第294个数据时,为第一组遍历完成,从这组中抽出初始最大值和初始最小值,然后,再从第295个开始遍历到第588个,为第二组遍历完成,从这组中抽出初始最大值和初始最小值,以此类推,遍历出每一组的初始最大值和初始最小值,最终得到该音频M的
90000对的初始最大值和初始最小值。由此可知,通过本发明的方法,将音频M的26460000个数据,缩减成90000对数据,缩小147倍。
[0056] 具体实施时,为了降低数据量的传输,再将上述抽出的最大值和最小值进行变换到8比特的数据空间存储,得到8比特的最大值和最小值;并将每个音频组的8比特的最大值和最小值,作为每个音频组的最大值和最小值。
[0057] 步骤S14:所述服务器端根据多个音频组对应的多组所述最大值和最小值,生成新的波形数据。
[0058] 本发明中,针对每个音频组,都将最大值与最小值之间的音频数据过滤掉,只获取该音频组中的初始最大值音频数据和初始最小值音频数据,进而获取与每个值对应的8比特的数据存储空间。因而对于整个音频M,相当于将筛选掉该音频M中的部分音频数据,将具有表征该音频M波形的最大值音频数据和最小值音频数据,作为该音频M的新的波形数据。
[0059] 实际中,音频数据包含多种声道,当需要展示某个声道的音频波形时,往往需要在web端中,对存储的所有波形数据(数据量较大)进行重采样,抽取出该声道的待展示波形数据,然后才能进行展示。而该方法中,由于重采样时,数据量较多,直接在web端处理,不仅占用web端的资源,而且会增加编辑者的工作量。
[0060] 因而,在本发明的一种实施方式中,每个音频组的最大值和最小值都携带有声道种类的类别,例如单声道、双声道等,具体实施时,步骤S14中的生成新的波形数据,还可以为:服务器端根据每个音频组的最大值和最小值的类别,对所有获取的最大值和最小值进行分类,得到多个不同种类声道的子波形数据,并针对不同声道的子波形数据进行分类存储,得到不同声道的存储文件;然后,服务器端根据这些不同声道的存储文件,生成一个总的波形数据存储文件,即为新的波形数据的存储文件。单独存储的目的:在web端显示时,若只想显示左声道的数据,则可以只调用左声道的数据,不需要对混合数据进行解析,分离出左声道和右声道的数据,才能再只展示左声道的数据。以此,在节约web端资源的同时,降低编辑者的工作量,使得操作更简单。
[0061] 其中,最终生成的新的波形数据的大小为:
[0062] 新的波形数据的大小(B)=音频时长(s)× 每秒音频组数量 × 2 ×声道数。
[0063] 该波形数据大小,就可以表示传输到web端时,所需的宽带要求较低。例如,一个3分钟的mp3音乐,可能有10M左右吧,小的可能5M或6M;采用本发明的计算方法,得到的波形数据大小为:3×60×150×2×2=108K,由此可知,通过本发明提供的方法,计算得到的最终波形大小,与原始波形数据大小差了几十甚至上百倍。
[0064] 通过上述步骤S11-S14,生成的波形数据,不仅比原始数据小了数十或数百倍,还可以根据web端的不同要求灵活显示不同声道的数据,不需要再做声道数据分离处理。
[0065] 步骤S15:所述Web端获取所述新的波形数据。
[0066] 具体实施时,当需要绘制波形时,web端需要从服务器端获取服务器端生成的新的波形数据。获取时,可以从服务器端下载全部的新的波形数据,如直接下载总的波形数据存储文件,也可以下载部分新的波形数据,如下载右声道的波形数据或下载左声道的波形数据,又或下载右声道和左声道两个声道的波形数据。
[0067] 步骤S16:所述Web端对所述新的波形数据中的多组所述最大值和最小值进行归一化处理,得到多组展示候选数据对,每组展示候选数据对包括归一化后的最大值和最小值。
[0068] 实际中,音频数据都是浮点数,而本发明中为了降低数据量的传输,通过上述步骤S13,将获取的初始最大值和初始最小值进行变换到8比特的波形数据空间存储,得到的是8比特的最大值和最小值。然而,8比特的波形数据粒度较小,精确度低于浮点数,因而在绘制波形时,为了使展示的更精确,需要对8比特的波形数据进行归一化处理,转换成浮点数,且归一化后得到的比例尺区间为-1 1(即被本领域技术人员认为的一个正常的要被显示的合~理的比例尺区间)。
[0069] 具体实施时,针对新的波形数据中的所有波形数据(由多个音频组的最大值和最小值组成),Web端对这些波形数据进行归一化处理,得到归一化后的波形数据。其中,作归一化处理时,可以按照音频组,对多组最大值和最小值进行处理,得到多组展示候选数据对,每组展示候选数据对包括归一化后的最大值和最小值,需要说明的是,一个音频组对应一个展示候选数据对。
[0070] 步骤S17:所述web端根据时间线缩放比例,从多组所述展示候选数据对中获取多组展示数据对。
[0071] 本实施例中,在web端的工程线程中,根据时间线缩放比例,对多组展示候选数据对重采样。具体实施时,web端根据时间线的缩放比例以及音频片段长度,计算展示的波形数据对的数量;然后web端根据波形数据对的数量,从多组展示候选数据对中,按照就近原则的算法,对多组展示候选数据对进行数据对抽取(即,进行数据重采样),得到多组展示数据对。其中,数据重采样至少包括以下一种:web端根据波形数据对的数量,对多组展示候选数据进行复制,得到多组展示数据对;web端根据波形数据对的数量,从多组展示候选数据中抽取多组展示数据对。
[0072] 本发明中,由于时间线会不断的放大和缩小,也就是说,一个像素所表示的波形数据是不一样的,若时间线放大了,一个像素可能会表示2个采样点,缩小了就表示比例尺变小了,一个像素可能会表示4个、8个或16个采样点;这样由于时间线的放大或缩小,会导致展示的波形数据量发生变化,因此在显示的时候,还会对多组展示候选数据对进行数据对抽取(即再次重采样),例如,从已经生成的每秒150个,再根据计算的展示时所要求的波形数据对的数量,进行抽取,如计算的数量为1秒50个,则需从这150个里再均匀的抽取50个(150/50=3,从每三个中抽一个),如计算的数量为300个,则将生成的150个全部展示或重复展示(再对这150个数据复制一遍,变成300个进行展示)。
[0073] 其中,就近原则的算法,是指:波形需要计算在时间比例尺上显示哪一块,比如现在要显示第1秒内的波形,然后在显示第1秒内的波形时,可能显示的起始位置刚好不在第1秒的起始位置,如在前一点,然后就需要找这附近的波形数据,或者说包括放大了之后,可能第1秒到第1.2秒之间只有10个数据,但是要求是显示20个,那么就可能就近地将这10个数据复制一遍,变成20个数据进行显示。即就近原则可以理解为,缩小的时候从这附近的数据中进行抽取,放大的时候也将这附近的数据进行重复/增加。
[0074] 本发明中,上述计算和抽取的过程都放在web端的工作线程中处理,避免耗时过长而阻塞主线程造成卡顿。
[0075] 步骤S18:所述web端根据所述多组展示数据对,绘制音频波形,并展示所述绘制的音频波形。
[0076] 本发明中,web端根据每组展示数据对中的最大值和最小值,绘制音频波形;其中,绘制方法为:将每组展示数据对中的最大值相连绘制曲线,将每组展示数据对中的最小值相连绘制曲线,得到音频波形。具体实施时,在绘制波形时,本发明采用连续性画法,以0为分界线,大于0的波形数据(即展示数据对)绘制在片段的中心轴上方,小于0的波形数据绘制在片段中心轴下方,每个波形数据的波峰相连绘制曲线,每个波形数据的波谷数据相连绘制曲线,就绘制出了一条连续的波形,不会因为时间线放大过大,数据量的限制造成离散的感觉。
[0077] 图5是本发明实施例中展示的时间线正常比例时的音频波形的示意图,图6是本发明实施例中展示的时间线放大到最大比例时的音频波形的示意图;如图5和图6所示,采用本发明的处理音频波形的方法,最后展示的波形皆是连续的,即使将时间线放大到最大比例,所展示的音频波形也是连续的,未出现间断或缝隙等效果不好的问题。
[0078] 本发明实施例中,首先,服务器端获取将原始音频数据转换为格式统一的音频数据,并根据预设的每秒音频组数量对音频数据进行分组,获取每个音频组的最大值和最小值,再根据所有音频组的最大值和最小值,生成新的波形数据,并将新的波形数据发送给Web端;然后,Web端对新的波形数据进行归一化处理,得到多组展示候选数据对,再根据时间线缩放比例,从多组展示候选数据对中获取多组展示数据对,接着根据多组展示数据对,绘制音频波形并展示绘制的音频波形。
[0079] 由于本发明实施例中,将整个原始音频数据分成多个音频组,只保留每个音频组中的最大值和最小值,因而经过筛选过后得到的新的波形数据,相较于原始音频数据,具有数据量小的特点。在传输波形数据和展示波形时,小数据量的波形数据,可以大幅度地降低网络带宽的使用和提高显示波形的实时性(该实时性是指显示波形的速度)。
[0080] 图4是本发明实施例中的一种Web端获取新的波形数据的方法的步骤流程图,参照图4,在本实施例中,web端获取新的波形数据的方法,具体可以包括以下步骤:
[0081] 步骤S21:所述服务器端将所述下载接口和所述下载标签发送给所述web端。
[0082] 具体实施时,服务器端在生成新的波形数据时,针对每个新的波形数据都会携带有下载接口和下载标签。其中,下载接口可以理解为网络连接接口,以供web端通过该接口下载与该接口相对应的波形数据;下载标签可以理解为区别每个新的波形数据的标识,例如,左声道波形数据的标识用于快速查找和识别左声道的音频数据。需要说明的是,下载标签也可以是在生成新的波形数据时,提前设置的区别声道种类的标识,用于将不同声道种类的子波形数据存储到对应下载标签的文件中。
[0083] 步骤S22:所述Web端根据所述下载标签检测所述FS中,是否存储有所述所述新的波形数据。
[0084] 具体实施时,Web端包括FS和IndexDB,绘制音频片段波形时,首先Web端根据待展示的新的波形数据的下载标签检测FS中,是否缓存有该新的波形数据。
[0085] 步骤S23:若检测到所述FS中存储有所述新的波形数据,则从所述FS中获取所述新的波形数据。具体实施时,若检测到FS中存储有新的波形数据,则从FS中加载新的波形数据。
[0086] 步骤S24:若检测到所述FS中未存储有所述新的波形数据,则检测所述IndexDB中,是否存储有所述新的波形数据。具体实施时,若检测到FS中没有缓存有新的波形数据,则继续检测IndexDB中,是否存储有新的波形数据。
[0087] 步骤S25:若检测到所述IndexDB存储有所述新的波形数据,则将所述IndexDB中的所述新的波形数据读取到所述FS中,并从所述FS中获取所述新的波形数据。具体实施时,若检测到IndexDB存储有新的波形数据,则将IndexDB中的新的波形数据读取到FS中,并从FS中加载新的波形数据。
[0088] 步骤S26:若检测到所述IndexDB未存储有所述新的波形数据,则通过所述下载接口,从所述服务器端获取所述新的波形数据。具体实施时,若检测到IndexDB未存储有新的波形数据,则Web端通过与新的波形数据对应的下载接口,从服务器端将新的波形数据下载至FS中,然后Web端从FS中,加载新的波形数据,并且FS将下载新的波形数据存储至IndexDB中,进行永久存储,以供下次使用时,直接加载,而不需要依赖网络从服务器端下载。
[0089] 本发明实施例中,通过将波形数据缓存在web端的方法,即使网络出现问题,缓存过波形数据同样可以进行波形绘制和展示,用户的体验有明显改善。其中,将波形数据保存在IndexDB中,IndexDB作为数据库类型的永久存储,可以快速的异步增加、插入、修改和删除,便于数据的管理,容量相对于LocalStorge也大得多,能够轻松容纳缓存的波形数据。但是,由于web端的编辑界面无法直接从IndexDB中获取缓存的波形数据,所以需要把IndexDB中的数据读取到FS存储空间作为二级临时缓存,以供web端的编辑界面直接读取使用。
[0090] 本发明实施例,还提供了一种音频数据处理的装置,参考图7,图7是本发明实施例中的一种音频数据处理的装置的结构示意图,如图7所示,所述装置包括:
[0091] 第一获取模块71,用于服务器端获取多个原始音频数据,并将原始音频数据转换为格式统一的音频数据;
[0092] 分组模块72,用于服务器端根据预设的每秒音频组数量,对音频数据进行分组,得到多个音频组,每个音频组包含多个音频数据;
[0093] 第二获取模块73,用于针对每个音频组,服务器端从多个音频数据中,获取每个音频组的最大值和最小值;
[0094] 生成模块74,用于服务器端根据多个音频组对应的多组最大值和最小值,生成新的波形数据;
[0095] 第三获取模块75,用于Web端获取新生成的波形数据;
[0096] 处理模块76,用于所述Web端对新的波形数据中的多组最大值和最小值进行归一化处理,得到多组展示候选数据对,每组展示候选数据对包括归一化后的最大值和最小值;
[0097] 第四获取模块77,用于web端根据时间线缩放比例,从多组展示候选数据对中获取多组展示数据对;
[0098] 展示模块78,用于web端根据多组展示数据对,绘制音频波形,并展示绘制的音频波形。
[0099] 优选地,第一获取模块71包括:
[0100] 第一生成子模块,用于在对待处理音频文件转码的同时,生成多个原始音频数据;
[0101] 第一获取子模块,用于服务器端获取多个原始音频数据。
[0102] 优选地,第二获取模块73包括:
[0103] 遍历子模块,用于针对每个音频组,服务器端对每个音频组中的各个音频数据进行遍历,得到每个音频组中的初始最大值和初始最小值;
[0104] 变换子模块,用于服务器端将每个初始最大值和初始最小值,变换成8比特的最大值和最小值;
[0105] 第二获取子模块,用于服务器端根据8比特的最大值和最小值,得到每个音频组的最大值和最小值。
[0106] 优选地,生成模块74包括:
[0107] 第一存储子模块,用于服务器端根据类别,对多组最大值和最小值进行分类存储,得到多个不同种类声道的子波形数据;
[0108] 生成子模块,用于服务器端根据每个子波形数据,生成一个新的波形数据。
[0109] 优选地,本发明的装置还包括:
[0110] 发送模块,用于服务器端将下载接口和下载标签发送给web端。
[0111] 优选地,第三获取模块75包括:
[0112] 第一检测子模块,用于Web端根据下载标签检测所述FS中,是否存储有新的波形数据;
[0113] 第三获取子模块,用于若检测到FS中存储有新的波形数据,则从FS中获取新的波形数据;
[0114] 第二检测子模块,用于若检测到FS中未存储有新的波形数据,则检测IndexDB中,是否存储有新的波形数据;
[0115] 第四获取子模块,用于若检测到IndexDB存储有新的波形数据,则将IndexDB中的新的波形数据读取到FS中,并从FS中获取新的波形数据;
[0116] 下载子模块,用于若检测到IndexDB未存储有所述新的波形数据,则通过下载接口,从服务器端获取新的波形数据。
[0117] 优选地,下载子模块包括:
[0118] 第一下载子模块,用于Web端通过下载接口,从服务器端将新的波形数据下载至FS中;
[0119] 第五获取子模块,用于Web端从FS中,获取新的波形数据;和
[0120] 第二存储子模块,用于FS将新的波形数据存储至IndexDB中。
[0121] 优选地,第四获取模块77包括:
[0122] 第六获取子模块,用于在web端的工程线程中,web端根据时间线的缩放比例,获取展示的波形数据对的数量;
[0123] 采样子模块,用于web端根据波形数据对的数量,对多组展示候选数据对进行数据重采样,得到多组展示数据对;
[0124] 其中,数据重采样至少包括以下一种:
[0125] web端根据波形数据对的数量,对多组展示候选数据进行复制,得到多组展示数据对;
[0126] web端根据波形数据对的数量,从多组展示候选数据中抽取多组展示数据对。
[0127] 优选地,展示模块78包括:
[0128] 绘制子模块,用于web端根据每组展示数据对中的最大值和最小值,绘制音频波形;
[0129] 其中,绘制方法为:将每组展示数据中的最大值相连绘制曲线,将每组展示数据中的最小值相连绘制曲线,得到音频波形。
[0130] 本公开实施例,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行所述计算机程序时实现上述音频数据处理的方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0131] 本公开实施例,还提供了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述音频数据处理的方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
[0132] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0133] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0134] 上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
[0135] 本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0136] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0137] 在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0138] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0139] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0140] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0141] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。