CN109947978A - 一种音频存储、播放方法及装置 - Google Patents
一种音频存储、播放方法及装置 Download PDFInfo
- Publication number
- CN109947978A CN109947978A CN201710632450.6A CN201710632450A CN109947978A CN 109947978 A CN109947978 A CN 109947978A CN 201710632450 A CN201710632450 A CN 201710632450A CN 109947978 A CN109947978 A CN 109947978A
- Authority
- CN
- China
- Prior art keywords
- audio
- frame
- fragment
- parameter
- audio frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Management Or Editing Of Information On Record Carriers (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明实施例提供了一种音频存储、播放方法及装置,存储方法包括:对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、及其所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,并没有重复存储音频参数,减少了存储资源的浪费。
Description
技术领域
本发明涉及多媒体技术领域,特别是涉及一种音频存储、播放方法及装置。
背景技术
纯音频数据,是指不包含音频参数的数据,比如,利用G711编码的音频数据,或者解码后得到的PCM(Pulse Code Modulation,脉冲编码调制)数据等等。播放这些纯音频数据时,通常需要对应的音频参数,比如,声道数、采样率等。因此,通常将音频参数与纯音频数据对应存储。
通常存储方案是将音频参数与纯音频数据封装在一起,存储封装后的文件。封装后的每一帧中都包含音频参数,但是,并不是每一帧纯音频数据对应的音频参数都不同,也就是说,应用这种方案,重复存储音频参数,浪费了存储资源。
发明内容
本发明实施例的目的在于提供一种音频存储、播放方法及装置,减少了存储资源的浪费。
为达到上述目的,本发明实施例提供了一种音频存储方法,包括:
获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
存储所述当前音频帧;
判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;
如果不同,存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
判断所述当前音频帧是否为所述待存储音频数据的最后一帧;
如果否,返回执行所述获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数的步骤;
如果是,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
可选的,所述存储所述当前音频帧,可以包括:
将所述当前音频帧存储至目标文件中的第一区域;
所述存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,可以包括:
对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
所述存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息,可以包括:
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
可选的,所述将所述当前音频帧存储至文件中的第一区域,可以包括:
从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域,可以包括:
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域,可以包括:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
所述将所述当前音频帧存储至文件中的第一区域,可以包括:
从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域,可以包括:
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域,可以包括:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
可选的,所述方法还可以包括:
在判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
为达到上述目的,本发明实施例还提供了一种音频播放方法,包括:
获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
利用所确定的片段参数,播放所述当前音频帧。
可选的,所述待播放音频文件中还包含片段数量;在所述利用所确定的片段参数,播放所述当前音频帧之后,还可以包括:
根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在的音频片段中的最后一帧;
根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;
如果是,根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;如果是,播放完毕。
为达到上述目的,本发明实施例还提供了一种音频存储装置,包括:
第一获取模块,用于获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
第一存储模块,用于存储所述当前音频帧;
第一判断模块,用于判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;如果否,触发第二存储模块,如果是,触发第二判断模块;
第二存储模块,用于存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
第二判断模块,用于判断所述当前音频帧是否为所述待存储音频数据的最后一帧;如果否,触发所述第一获取模块,如果是,触发第三存储模块;
第三存储模块,用于存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
可选的,所述第一存储模块,具体可以用于:
将所述当前音频帧存储至目标文件中的第一区域;
所述第二存储模块,可以包括:
缓存子模块,用于对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
存储子模块,用于在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
所述第三存储模块,具体可以用于:
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
可选的,所述第一存储模块,具体可以用于:从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体可以用于:
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述第三存储模块,具体可以用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
所述第一存储模块,具体可以用于:从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体可以用于:
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述第三存储模块,具体可以用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
可选的,所述装置还可以包括:
计数模块,用于在所述第一判断模块判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
为达到上述目的,本发明实施例还提供了一种音频播放装置,包括:
第二获取模块,用于获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
确定模块,用于根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
播放模块,用于利用所确定的片段参数,播放所述当前音频帧。
可选的,所述待播放音频文件中还包含片段数量;所述装置还可以包括:
第三判断模块,用于在所述播放模块播放所述当前音频帧之后,根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,触发第四判断模块;
第四判断模块,用于根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,播放完毕。
为达到上述目的,本发明实施例还提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种音频存储方法。
为达到上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种音频播放方法。
应用本发明实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、以及最后一帧音频帧所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的音频存储方法的第一种流程示意图;
图1a为本发明实施例中目标文件的一种结构示意图;
图1b为本发明实施例中目标文件的另一种结构示意图;
图2为本发明实施例提供的音频存储方法的第二种流程示意图;
图3为本发明实施例提供的音频播放方法的第一种流程示意图;
图4为本发明实施例提供的音频播放方法的第二种流程示意图;
图5为本发明实施例提供一种音频存储装置的结构示意图;
图6为本发明实施例提供一种音频播放装置的结构示意图;
图7为本发明实施例提供的应用音频存储方法的电子设备的结构示意图;
图8为本发明实施例提供的应用音频播放方法的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决上述技术问题,本发明实施例提供了一种音频存储、播放方法及装置。本发明实施例可以但不限于用在智能手机、计算机、智能电视、监控服务器等设备中。下面首先对本发明实施例提供的一种音频存储方法进行详细说明。
图1为本发明实施例提供的音频存储方法的第一种流程示意图,包括:
S101:获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数。
本发明实施例中的纯音频数据,是指不包含音频参数的数据,比如,利用G711编码的音频数据,或者解码后得到的PCM(Pulse Code Modulation,脉冲编码调制)数据等等。
在本发明实施例中,纯音频数据与音频参数可以分别获取。举例来说,音频采集设备可以将采集到的纯音频数据发送给执行本发明实施例的设备(以下简称本设备);另外,音频采集设备中可以存储有该纯音频数据对应的音频参数,音频采集设备将存储的音频参数发送给本设备,这样,本设备便分别获取到了纯音频数据与对应的音频参数。
或者,本设备可以通过其他方式分别获取到纯音频数据与音频参数,具体不做限定。需要说明的是,本设备获取到的纯音频数据与音频参数之间存在对应关系,本设备可以确定纯音频数据中的每一音频帧对应的音频参数。
本实施例中,对纯音频数据逐帧进行存储,将每一个待存储的音频帧称为当前音频帧。音频参数可以包括声道数、采样率等用于播放音频帧的参数,具体不做限定。
S102:存储所述当前音频帧。
作为一种实施方式,可以将一段完整的音频数据存储至一个文件中,该完整的音频数据包含多个音频帧及其对应的音频参数。为了方便描述,将该“一个文件”称为目标文件,可以将音频帧与音频参数存储至目标文件的不同区域。音频帧与音频参数在目标文件中的存储区域可以为预先设定的,这里将存储音频帧的区域称为第一区域,将存储音频参数的区域称为第二区域。
因此,S102可以包括:将所述当前音频帧存储至目标文件中的第一区域。
S103:判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;。
举例来说,假设一段音频数据中包含240个音频帧,前100个音频帧对应的音频参数相同,包括:声道数2、采样率22.05KHz,后140个音频帧对应的音频参数相同,包括:声道数3、采样率44.1KHz;则前100个音频帧组成一个音频片段,该音频片段的片段参数包括:声道数2、采样率22.05KHz,后140个音频帧组成一个音频片段,该音频片段的片段参数包括:声道数3、采样率44.1KHz。
将S101中获取的当前音频帧对应的音频参数与上一音频帧所在音频片段的片段参数进行比较。该上一音频帧是指该当前音频帧的上一帧,如果当前音频帧与其上一音频帧属于同一个音频片段,则S103的判断结果为是,这种情况下,直接执行S105。
如果当前音频帧与其上一音频帧属于不同的音频片段,则S103的判断结果为否,执行S104。
在本发明的一个可选实施例中,可以记录上一音频帧所在音频片段的片段参数,执行S103时,便可以从记录中获取该上一音频帧所在音频片段的片段参数。该记录可以为一个临时文件,在执行完本实施例提供的音频存储方法后,可以将该记录删除。
作为一种实施方式,该记录中可以包含当前音频帧之前的每个音频片段的片段参数,这种情况下,在该记录中确定出当前音频帧的上一音频帧所在音频片段的片段参数,也就是最新添加的一个片段参数(音频参数);并且在S103判断结果为否的情况下,在该记录中添加当前音频帧的音频参数。
作为另一种实施方式,该记录中也可以仅包含当前音频帧的上一个音频片段的片段参数。这种情况下,直接读取记录中的片段参数,并且在S103判断结果为否的情况下,在该记录中删除该上一个音频片段的片段参数,添加该当前音频帧的音频参数。
S104:存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:每个音频片段在所述待存储音频数据中的偏移位置信息。
片段参数对应的偏移信息,可以包括音频片段在整体数据中的偏移位置信息,比如,片段起始处的偏移位置和片段结束处的偏移位置。本领域技术人员可以理解,此处存储偏移信息,是为了后续播放该音频数据时,能够确定每个音频片段的位置,进而也就可以确定每个音频帧对应的片段参数。
举个简单的例子,假设存储了片段A对应的偏移信息包括:起始偏移位置0字节,结束偏移位置1024000字节,片段B对应的偏移信息包括:起始偏移位置1024001字节,结束偏移位置字节2048000,则播放音频数据时,播放到每个当前音频帧,如果该当前音频帧位于0—1024000字节之间,则该当前音频帧属于该片段A,该当前音频帧对应的音频参数为片段A的片段参数,如果该当前音频帧位于1024001—2048000字节之间,则该当前音频帧属于该片段B,该当前音频帧对应的音频参数为片段B的片段参数。
作为一种实施方式,可以直接将上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息存储至目标文件的第二区域。
或者,作为另一种实施方式,可以先对上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存,在当前音频帧为待存储音频数据的最后一帧的情况下,再将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域。
也就是说,如果S103判断结果为否,先将上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息写入一个缓存区,在全部音频帧都存储完毕后,再将缓存区中的每个片段参数及其对应的偏移信息存储至目标文件的第二区域。
该缓存区可以为目标文件之外的存储区域,也可以为目标文件中的某个存储区域,该缓存区与第一区域、第二区域均不同。本实施方式将在图2对应的内容中详细介绍。
S105:判断所述当前音频帧是否为所述待存储音频数据的最后一帧,如果否,返回执行S101,如果是,执行S106。
S106:存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
最后一帧音频帧对应的音频参数也就是最后一个音频片段的片段参数。
如果当前音频帧为最后一帧,S102存储最后一帧后,全部音频帧存储完毕。如果S104中将上一音频帧所在音频片段的片段参数及偏移信息写入到一个缓存区,则此时可以将缓存区写入的每个片段参数及偏移信息存储至目标文件的第二区域中,并且将最后一帧音频帧对应的音频参数及偏移信息一并存储至目标文件的第二区域中。这样,目标文件中便存储了一段完整的音频数据(包含每个音频帧及音频参数、偏移信息),实现了对完整音频数据的存储。
如果S104中直接将上一音频帧所在音频片段的片段参数及偏移信息写入到目标文件的第二区域,存储到最后一帧后,将最后一帧音频帧对应的音频参数及偏移信息也写入到目标文件的第二区域,目标文件中便存储了一段完整的音频数据(包含每个音频帧及音频参数、偏移信息),实现了对完整音频数据的存储。
如果当前音频帧不为最后一帧,则将其下一帧作为当前音频帧,从S101开始,重新执行本发明实施例中的步骤。
作为一种实施方式,目标文件中还可以包含片段数量,也就是待存储音频数据中包含的音频片段的数量;每当S103判断结果为否时,该片段数量加1。
目标文件的结构可以如图1a或者如图1b所示,片段数量、音频参数(片段参数)及偏移信息、音频帧分别位于文件中的不同位置。举例来说,音频参数及偏移信息的存储结构可以为:
本实施例并不对目标文件的结构、以及音频参数及偏移信息的存储结构进行限定。
或者,也可以在目标文件之外的其他存储区域记录片段数量,每当S103判断结果为否的情况下,将所记录的片段数量加1。
如果将音频参数与纯音频数据封装在一起,存储封装后的文件,比如,将音频参数与纯音频数据封装为PS(ProgramStream)格式的数据,封装后的每一帧中都包含音频参数,存储的音频参数会占据一些存储资源。相比于这样的方案,第一方面,本发明实施例对各个音频片段的片段参数进行存储,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,本发明实施例不需要对音频帧及音频参数进行封装处理,简化了操作。
如果将音频参数与纯音频数据编码成mp3、aac等格式的数据,对于存储设备来说,存储不同格式的数据需要转编码操作,转编码操作需要消耗较多CPU资源,相比于这样的方案,本发明实施例不需要转编码操作,减少了CPU资源的消耗。
如果只存储纯音频数据,播放纯音频数据时,手动输入对应的音频参数,则需要消耗人力,相比于这样的方案,本发明实施例一并存储了音频参数,播放音频数据时,不需要手动输入。
应用本发明图1所示实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、以及最后一帧音频帧所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。
图2为本发明实施例提供的音频存储方法的第二种流程示意图,包括:
S201:获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数。
S202:将所述当前音频帧存储至目标文件中的第一区域。
S203:判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;如果不同,执行S204,如果相同,执行S205。
S204:对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存。
S205:判断所述当前音频帧是否为所述待存储音频数据的最后一帧,如果否,返回执行S201,如果是,执行S206。
S206:将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域。
S207:将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
作为一种实施方式,S202可以包括:从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;S206可以包括:在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;S207可以包括:在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
该第一预设位置可以为文件的起始位置,或者,文件的起始位置处也可以存在空白部分或存储其他数据,第一预设位置为起始位置附近的其它位置。下面以第一预设位置为起始位置为例进行说明。
在本实施方式中,可以从目标文件的起始位置开始,逐帧存储每个音频帧,这样,从目标文件的起始位置至存储的最后一个音频帧所在的位置构成第一区域。当存储完全部音频帧后,再将待存储音频数据对应的全部音频参数及偏移信息(缓存的每个片段参数及其对应的偏移信息、以及最后一帧音频帧对应的音频参数、以及该最后一帧音频帧所在音频片段对应的偏移信息)存储至第一区域之后的第二区域。需要说明的是,第一区域与第二区域可以相邻,也可以不相邻,可以根据实际情况进行设定。
另外,目标文件中还可以存储有片段数量,也就是待存储音频数据中包含的音频片段的数量。具体的,可以在第二区域之后的位置,存储片段数量,或者,也可以在第二区域之前的位置存储片段数量,或者,也可以在第一区域之前的位置,存储片段数量,片段数量的存储位置不进行限定。
比如图1a中所示,从文件起始位置至存储的最后一个音频帧所在的位置为第一区域,在第一区域之后的为第二区域,第二区域存储每个片段参数(音频参数)及对应的偏移信息,第二区域之后,存储片段数量。
作为另一种实施方式,S202可以包括:从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;S206可以包括:在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;S207可以包括:在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
第二区域的起始位置可以为文件的起始位置,或者,文件的起始位置处也可以存在空白部分或存储其他数据,第二区域的起始位置为文件的起始位置附近的其它位置。下面以第二区域的起始位置为文件的起始位置为例进行说明。
在本实施方式中,片段参数(音频参数)及对应的偏移信息存储在音频帧的前面,也就是说,第二区域在第一区域的前面。需要说明的是,第一区域与第二区域可以相邻,也可以不相邻,可以根据实际情况进行设定。
在本实施方式中,片段参数(音频参数)及对应的偏移信息占据的空间大小通常是不确定的,也就是第二区域的大小通常是不确定的,可以为第二区域预留一段空间,存储音频帧时,直接从该预留的空间之后(第二预设位置)逐帧存储。
另外,目标文件中还可以存储有片段数量,也就是待存储音频数据中包含的音频片段的数量。具体的,可以在第二区域之前,存储片段数量,或者,也可以在第二区域之后存储片段数量,或者,也可以在第一区域之后,存储片段数量,片段数量的存储位置不进行限定。
比如图1b中所示,文件起始位置存储片段数量,片段数量之后为第二区域,第二区域之后为第一区域。
应用本发明图2所示实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,对该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再将所缓存的每个片段参数及其对应的偏移信息、以及最后一帧音频帧对应的音频参数及偏移信息进行存储;也就是说,在本发明实施例中,仅在出现不同的音频参数时,缓存之前的音频参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储各个不同的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。
与上述音频存储方法相对应,本发明实施例还提供一种音频播放方法。
图3为本发明实施例提供的一种音频播放方法的流程示意图,包括:
S301:获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息。
本领域技术人员可以理解,音频参数可以包括声道数、采样率等用于播放音频帧的参数,具体不做限定。在本实施例中,音频参数相同的N个连续音频帧组成一个音频片段,该音频片段的片段参数也就是该音频片段中各音频帧的音频参数,也包括声道数、采样率等用于播放音频帧的参数,具体不做限定。
下面对音频片段及片段参数进行举例说明,假设一段音频数据中包含240个音频帧,前100个音频帧对应的音频参数相同,包括:声道数2、采样率22.05KHz,后140个音频帧对应的音频参数相同,包括:声道数3、采样率44.1KHz;则前100个音频帧组成一个音频片段,该音频片段的片段参数包括:声道数2、采样率22.05KHz,后140个音频帧组成一个音频片段,该音频片段的片段参数包括:声道数3、采样率44.1KHz。
S301中获取的待播放音频文件可以为利用图1所示实施例存储的音频文件,也可以为利用图2所示实施例存储的音频文件,或者,也可以为利用其他方式存储的音频文件。该音频文件中包含多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息。
S302:根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数。
一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息,该偏移信息可以包括音频片段在整体数据中的偏移位置信息,比如,片段起始处的偏移位置和片段结束处的偏移位置。本领域技术人员可以理解,利用偏移信息,可以确定每个音频帧所在音频片段的片段参数。
举个简单的例子,假设S301获取的文件中包含片段A对应的偏移信息为:起始偏移位置0字节,结束偏移位置1024000字节,片段B对应的偏移信息为:起始偏移位置1024001字节,结束偏移位置字节2048000。则S302可以理解为,如果当前音频帧位于0—1024000字节之间,则该当前音频帧所在的音频片段为该片段A,确定片段A的片段参数,如果该当前音频帧位于1024001—2048000字节之间,则该当前音频帧所在的音频片段为该片段B,确定片段B的片段参数。
S303:利用所确定的片段参数,播放所述当前音频帧。
由上述内容可知,一个音频片段中包含的音频帧对应的音频参数相同,音频片段的片段参数也就是该音频片段中各音频帧的音频参数,因此,S302中确定出的片段参数即为当前音频帧对应的音频参数,可以利用该音频参数播放该当前音频帧。
将待播放音频文件中的每个音频帧依次作为当前音频帧,针对每个当前音频帧,利用其对应的片段参数,对其进行播放,便完成了对待播放音频文件中全部音频帧的播放。
在一些播放方案中,获取的音频文件为封装后的文件,封装后的每一帧中都包含音频参数,相比于这些方案,本发明实施例获取的音频文件中存储的是各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费。另外,在这些播放方案中,需要对文件进行解封装,获得各个音频帧及对应的音频参数,相比于这类方案,本发明实施例不需要对音频文件进行解封装,简化了操作。
在另一些播放方案中,获取的音频文件为mp3、aac等格式的数据,对于播放设备来说,播放不同格式的数据需要转编码操作,转编码操作需要消耗较多CPU资源,相比于这些方案,本发明实施例不需要转编码操作,减少了CPU资源的消耗。
在另一些播放方案中,获取的音频文件仅包含纯音频数据,播放纯音频数据时,需要手动输入对应的音频参数,相比于这些方案,本发明实施例获取的音频文件中包含音频参数(片段参数),不需要手动输入音频参数。另外,在这些播放方案中,不同音频参数的音频帧不能存储在同一文件中,也就是说,不能利用一个音频文件,播放不同音频参数的音频帧。而在本发明实施例中,获取的音频文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以利用一个音频文件,播放不同音频参数的音频帧。
应用本发明图3所示实施例,获取待播放音频文件,利用该文件中的片段参数,播放该文件中的音频帧;第一方面,该文件中存储有各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,文件中的音频帧与片段参数不是封装数据,播放时不需要解封装,操作简单,第三方面,本发明实施例不需要转编码操作,减少了CPU资源的消耗,第四方面,文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以播放不同音频参数的音频帧。
根据图1、图2实施例可知,待播放音频文件中还可以包含片段数量,也就是音频片段的数量,可以利用片段数量,判断音频是否播放完毕。
如图4所示,可以在S303之后,继续执行S304:根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;如果否,执行S305:将下一音频帧作为当前音频帧,并返回执行S302;如果是,执行S306。
S306:根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;如果否,执行S305:将下一音频帧作为当前音频帧,并返回执行S302;如果是,流程结束,播放完毕。
在一个音频片段中,可以根据偏移信息,判断当前音频帧是否为片段中的最后一帧。如果当前音频帧不为片段中的最后一帧,则继续将其下一帧确定为当前音频帧,返回执行S302-S304,直至当前音频帧为片段中的最后一帧。
如果当前音频帧为片段中的最后一帧,则根据待播放音频文件中包含的片段数量,判断当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段。具体的,假设待播放音频文件中包含的片段数量为2,且当前音频帧所在音频片段为待播放音频文件中的第一个音频片段,则S306的判断结果为否。如果待播放音频文件中包含的片段数量为2,且当前音频帧所在音频片段为待播放音频文件中的第二个音频片段,则S306判断结果为是。
如果当前音频帧所在音频片段不为所述待播放音频文件中的最后一个片段(S306的判断结果为否),则继续将其下一帧确定为当前音频帧,返回执行S302-S306,直至当前音频帧为片段中的最后一帧,且该片段为待播放音频文件中的最后一个片段时,播放完毕,方案结束。
应用本发明图4所示实施例,获取待播放音频文件,利用该文件中的片段参数,播放该文件中的音频帧;第一方面,该文件中存储有各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,文件中的音频帧与片段参数不是封装数据,播放时不需要解封装,操作简单,第三方面,本发明实施例不需要转编码操作,减少了CPU资源的消耗,第四方面,文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以播放不同音频参数的音频帧。
与上述方法实施例相对应,本发明实施例还提供一种音频存储、播放装置。
图5为本发明实施例提供的一种音频存储装置的结构示意图,包括:
第一获取模块501,用于获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
第一存储模块502,用于存储所述当前音频帧;
第一判断模块503,用于判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;如果否,触发第二存储模块504,如果是,触发第二判断模块505;
第二存储模块504,用于存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
第二判断模块505,用于判断所述当前音频帧是否为所述待存储音频数据的最后一帧;如果否,触发第一获取模块501,如果是,触发第三存储模块506;
第三存储模块506,用于存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,第一存储模块502,具体可以用于:
将所述当前音频帧存储至目标文件中的第一区域;
第二存储模块504,可以包括:缓存子模块和存储子模块(图中未示出),其中,
缓存子模块,用于对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
存储子模块,用于在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
第三存储模块506,具体可以用于:
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
作为一种实施方式,第一存储模块502,具体可以用于:从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体用于:
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
第三存储模块506,具体可以用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
第一存储模块502,具体可以用于:从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体用于:
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
第三存储模块506,具体可以用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,所述装置还可以包括:
计数模块(图中未示出),用于在所述第一判断模块判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
应用本发明图5所示实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、以及最后一帧音频帧所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。
图6为本发明实施例提供的一种音频播放装置的结构示意图,包括:
第二获取模块601,用于获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
确定模块602,用于根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
播放模块603,用于利用所确定的片段参数,播放所述当前音频帧。
作为一种实施方式,所述待播放音频文件中还包含片段数量;所述装置还可以包括:第三判断模块和第四判断模块(图中未示出),
第三判断模块,用于在所述播放模块播放所述当前音频帧之后,根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,触发第四判断模块;
第四判断模块,用于根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,播放完毕。
应用本发明图6所示实施例,获取待播放音频文件,利用该文件中的片段参数,播放该文件中的音频帧;第一方面,该文件中存储有各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,文件中的音频帧与片段参数不是封装数据,播放时不需要解封装,操作简单,第三方面,本发明实施例不需要转编码操作,减少了CPU资源的消耗,第四方面,文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以播放不同音频参数的音频帧。
本发明实施例还提供了一种电子设备,如图7所示,包括处理器701和存储器702,
存储器702,用于存放计算机程序;
处理器701,用于执行存储器702上所存放的程序时,实现如下步骤:
获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
存储所述当前音频帧;
判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;
如果不同,存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
判断所述当前音频帧是否为所述待存储音频数据的最后一帧;
如果否,返回执行所述获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数的步骤;
如果是,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,处理器701,还用于执行存储器702上所存放的程序时,实现如下步骤:
将所述当前音频帧存储至目标文件中的第一区域;
对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
作为一种实施方式,处理器701,还用于执行存储器702上所存放的程序时,实现如下步骤:
从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,处理器701,还用于执行存储器702上所存放的程序时,实现如下步骤:
在判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
应用本发明图7所示实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、以及最后一帧音频帧所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。
本发明实施例还提供了一种电子设备,如图8所示,包括处理器801和存储器802,
存储器802,用于存放计算机程序;
处理器801,用于执行存储器802上所存放的程序时,实现如下步骤:
获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
利用所确定的片段参数,播放所述当前音频帧。
作为一种实施方式,所述待播放音频文件中还包含片段数量;处理器801,还用于执行存储器802上所存放的程序时,实现如下步骤:
在所述利用所确定的片段参数,播放所述当前音频帧之后,根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;
如果是,根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;如果是,播放完毕。
上述电子设备提到的存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
应用本发明图8所示实施例,获取待播放音频文件,利用该文件中的片段参数,播放该文件中的音频帧;第一方面,该文件中存储有各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,文件中的音频帧与片段参数不是封装数据,播放时不需要解封装,操作简单,第三方面,本发明实施例不需要转编码操作,减少了CPU资源的消耗,第四方面,文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以播放不同音频参数的音频帧。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:
获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
存储所述当前音频帧;
判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;
如果不同,存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
判断所述当前音频帧是否为所述待存储音频数据的最后一帧;
如果否,返回执行所述获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数的步骤;
如果是,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,还用于实现如下步骤:
将所述当前音频帧存储至目标文件中的第一区域;
对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
作为一种实施方式,还用于实现如下步骤:
从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
作为一种实施方式,还用于实现如下步骤:
在判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
应用上述实施例,对纯音频数据逐帧存储,针对当前音频帧,判断其对应的音频参数是否与其上一音频帧所在音频片段的片段参数相同,如果不同,存储该上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息;对每一当前音频帧都进行上述处理,直至存储全部音频帧,再存储最后一帧音频帧对应的音频参数、以及最后一帧音频帧所在音频片段对应的偏移信息;也就是说,在本发明实施例中,仅在出现不同的音频参数时,存储之前一个音频片段的片段参数(上一音频帧所在音频片段的片段参数),在存储全部纯音频数据后,存储最后一帧音频帧对应的音频参数;可见,本发明实施例中,并没有重复存储音频参数,减少了存储资源的浪费。本发明实施例本发明实施例
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:
获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
利用所确定的片段参数,播放所述当前音频帧。
作为一种实施方式,还用于实现如下步骤:
在所述利用所确定的片段参数,播放所述当前音频帧之后,根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;
如果是,根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;如果是,播放完毕。
应用上述实施例,获取待播放音频文件,利用该文件中的片段参数,播放该文件中的音频帧;第一方面,该文件中存储有各个音频片段的片段参数,而不是重复存储每一帧的音频参数,减少了存储资源的浪费,第二方面,文件中的音频帧与片段参数不是封装数据,播放时不需要解封装,操作简单,第三方面,本发明实施例不需要转编码操作,减少了CPU资源的消耗,第四方面,文件中可以包括多个音频片段,也就是包含不同音频参数的音频帧,应用本发明实施例,可以播放不同音频参数的音频帧。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (14)
1.一种音频存储方法,其特征在于,包括:
获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
存储所述当前音频帧;
判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;
如果不同,存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
判断所述当前音频帧是否为所述待存储音频数据的最后一帧;
如果否,返回执行所述获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数的步骤;
如果是,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
2.根据权利要求1所述的方法,其特征在于,所述存储所述当前音频帧,包括:
将所述当前音频帧存储至目标文件中的第一区域;
所述存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,包括:
对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
所述存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息,包括:
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
3.根据权利要求2所述的方法,其特征在于,所述将所述当前音频帧存储至文件中的第一区域,包括:
从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域,包括:
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域,包括:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
所述将所述当前音频帧存储至文件中的第一区域,包括:
从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域,包括:
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域,包括:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
5.一种音频播放方法,其特征在于,包括:
获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
利用所确定的片段参数,播放所述当前音频帧。
6.根据权利要求5所述的方法,其特征在于,所述待播放音频文件中还包含片段数量;在所述利用所确定的片段参数,播放所述当前音频帧之后,还包括:
根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;
如果是,根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;
如果否,将下一音频帧作为当前音频帧,并返回执行所述根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数的步骤;如果是,播放完毕。
7.一种音频存储装置,其特征在于,包括:
第一获取模块,用于获取待存储音频数据中的当前音频帧、以及所述当前音频帧对应的音频参数;
第一存储模块,用于存储所述当前音频帧;
第一判断模块,用于判断所获取的音频参数与上一音频帧所在音频片段的片段参数是否相同;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;如果否,触发第二存储模块,如果是,触发第二判断模块;
第二存储模块,用于存储所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息,所述偏移信息为:该音频片段在所述待存储音频数据中的偏移位置信息;
第二判断模块,用于判断所述当前音频帧是否为所述待存储音频数据的最后一帧;如果否,触发所述第一获取模块,如果是,触发第三存储模块;
第三存储模块,用于存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
8.根据权利要求7所述的装置,其特征在于,所述第一存储模块,具体用于:
将所述当前音频帧存储至目标文件中的第一区域;
所述第二存储模块,包括:
缓存子模块,用于对所述上一音频帧所在音频片段的片段参数、以及该音频片段对应的偏移信息进行缓存;
存储子模块,用于在当前音频帧为所述待存储音频数据的最后一帧的情况下,将所缓存的每个片段参数及其对应的偏移信息存储至所述目标文件中的第二区域;
所述第三存储模块,具体用于:
将最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息存储至所述第二区域。
9.根据权利要求8所述的装置,其特征在于,所述第一存储模块,具体用于:从所述目标文件的第一预设位置开始,依次存储每个当前音频帧;其中,由所述第一预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体用于:
在所述第一区域之后的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述第三存储模块,具体用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息;
或者,
所述第一存储模块,具体用于:从所述目标文件的第二预设位置开始,依次存储每个当前音频帧;其中,由所述第二预设位置至所存储的最后一个音频帧所在的位置构成的区域为所述目标文件中的第一区域;
所述存储子模块,具体用于:
在所述第一区域之前的第二区域中,存储所缓存的每个片段参数及其对应的偏移信息;
所述第三存储模块,具体用于:
在所述第二区域中所存储的片段参数及其对应的偏移信息之后,存储最后一帧音频帧对应的音频参数、以及所述最后一帧音频帧所在音频片段对应的偏移信息。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
计数模块,用于在所述第一判断模块判定所获取的音频参数与预先确定的上一音频帧所在音频片段的片段参数不同的情况下,将所记录的片段数量加1。
11.一种音频播放装置,其特征在于,包括:
第二获取模块,用于获取待播放音频文件;所述文件中包含:多个音频帧、至少一个音频片段的片段参数、以及每个音频片段对应的偏移信息;其中,一个音频片段由N个连续音频帧组成,所述N大于等于1;一个音频片段中包含的音频帧对应的音频参数相同;一个音频片段的片段参数为该音频片段包含的音频帧对应的音频参数;一个音频片段对应的偏移信息为:该音频片段在待播放音频文件中的偏移位置信息;
确定模块,用于根据所述文件中包含的偏移信息,确定当前音频帧所在音频片段的片段参数;
播放模块,用于利用所确定的片段参数,播放所述当前音频帧。
12.根据权利要求11所述的装置,其特征在于,所述待播放音频文件中还包含片段数量;所述装置还包括:
第三判断模块,用于在所述播放模块播放所述当前音频帧之后,根据所述文件中包含的偏移信息,判断所述当前音频帧是否为其所在音频片段中的最后一帧;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,触发第四判断模块;
第四判断模块,用于根据所述片段数量,判断所述当前音频帧所在音频片段是否为所述待播放音频文件中的最后一个片段;如果否,将下一音频帧作为当前音频帧,并触发所述确定模块,如果是,播放完毕。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求5-6任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710632450.6A CN109947978B (zh) | 2017-07-28 | 2017-07-28 | 一种音频存储、播放方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710632450.6A CN109947978B (zh) | 2017-07-28 | 2017-07-28 | 一种音频存储、播放方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947978A true CN109947978A (zh) | 2019-06-28 |
CN109947978B CN109947978B (zh) | 2021-04-02 |
Family
ID=67003880
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710632450.6A Active CN109947978B (zh) | 2017-07-28 | 2017-07-28 | 一种音频存储、播放方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947978B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111757136A (zh) * | 2020-06-29 | 2020-10-09 | 北京百度网讯科技有限公司 | 网页音频直播方法、装置、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089479A1 (en) * | 2007-10-01 | 2009-04-02 | Samsung Electronics Co., Ltd. | Method of managing memory, and method and apparatus for decoding multi-channel data |
CN103093761A (zh) * | 2011-11-01 | 2013-05-08 | 腾讯科技(深圳)有限公司 | 音频指纹检索方法及装置 |
CN103794233A (zh) * | 2014-01-23 | 2014-05-14 | 福建星网锐捷安防科技有限公司 | 一种视音频数据的存储方法及存储装置 |
CN104050259A (zh) * | 2014-06-16 | 2014-09-17 | 上海大学 | 一种基于som算法的音频指纹提取方法 |
CN104424971A (zh) * | 2013-09-02 | 2015-03-18 | 华为技术有限公司 | 一种音频文件播放方法及装置 |
-
2017
- 2017-07-28 CN CN201710632450.6A patent/CN109947978B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089479A1 (en) * | 2007-10-01 | 2009-04-02 | Samsung Electronics Co., Ltd. | Method of managing memory, and method and apparatus for decoding multi-channel data |
CN103093761A (zh) * | 2011-11-01 | 2013-05-08 | 腾讯科技(深圳)有限公司 | 音频指纹检索方法及装置 |
CN104424971A (zh) * | 2013-09-02 | 2015-03-18 | 华为技术有限公司 | 一种音频文件播放方法及装置 |
CN103794233A (zh) * | 2014-01-23 | 2014-05-14 | 福建星网锐捷安防科技有限公司 | 一种视音频数据的存储方法及存储装置 |
CN104050259A (zh) * | 2014-06-16 | 2014-09-17 | 上海大学 | 一种基于som算法的音频指纹提取方法 |
Non-Patent Citations (2)
Title |
---|
S.S. MANVI 等: "Human Centered Multimedia Audio Data Retrieval in Computer Networks", 《FUTURE COMPUTER AND COMMUNICATION》 * |
张钰: "广播电台音频节目制播系统存储架构设计", 《广播与电视技术》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111757136A (zh) * | 2020-06-29 | 2020-10-09 | 北京百度网讯科技有限公司 | 网页音频直播方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109947978B (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107948735B (zh) | 一种视频播放方法、装置及电子设备 | |
CN108495164B (zh) | 音视频同步处理方法及装置、计算机装置及存储介质 | |
CN103686312B (zh) | 一种dvr多路音视频记录方法 | |
CN105700849B (zh) | 一种基于fpga实现pcm音频采集装置及系统及方法 | |
CN103646654B (zh) | 一种录音数据分享方法及终端 | |
CN102724585A (zh) | 一种用于终端设备网络视频播放预加载的方法及装置 | |
CN106454391A (zh) | 一种直播转点播方法、装置及终端 | |
CN103546698B (zh) | 一种移动终端录制视频保存方法和装置 | |
CN110968279B (zh) | 一种消息的降级方法及相关装置 | |
TW201729187A (zh) | 用於使用前饋壓縮統計控制記憶體頻率之系統及方法 | |
CN105142004B (zh) | 多媒体文件读取方法及装置 | |
CN107517400A (zh) | 流媒体播放方法及流媒体播放器 | |
CN108093293A (zh) | 一种视频渲染方法及系统 | |
CN104113778B (zh) | 一种视频流解码方法及装置 | |
CN104853132A (zh) | 一种延时视频录制方法及系统 | |
CN101521782A (zh) | 一种快进退浏览视频的方法、系统及多媒体设备 | |
KR100490403B1 (ko) | 오디오 스트림의 버퍼링 제어 방법 및 그 장치 | |
CN109947978A (zh) | 一种音频存储、播放方法及装置 | |
CN110087168B (zh) | 音频混响处理方法、装置、设备及存储介质 | |
EP1455360A2 (en) | Disc apparatus, disc recording method, disc playback method, recording medium, and program | |
CN108769572A (zh) | 监控视频文件生成、装置及终端设备 | |
CN104581398B (zh) | 缓存数据管理系统及方法 | |
CN102843583A (zh) | 一种广告的显示方法、媒体播放系统及媒体播放终端 | |
CN106534950A (zh) | 媒体扫描与播放的控制方法、装置 | |
JP2004519930A (ja) | 動的なキーフレーム生成及び使用 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |