歌曲播放方法及相关装置与流程
未命名
09-29
阅读:91
评论:0

1.本技术涉及计算机技术领域,尤其涉及歌曲播放方法及相关装置。
背景技术:
2.音乐在日常生活扮演者重要角色,人们喜欢听音乐来打发闲暇时光。电子设备可以对歌曲列表中的各个歌曲进行随机播放,例如,当前播放的歌曲是歌曲列表a中的歌曲a,随机播放模式下,歌曲a播放完毕之后切换的下一首歌曲可以是从歌曲列表a中任意选取的。
3.随机播放模式下,切歌时需要通过文件系统从磁盘中获取歌曲列表信息以确定切歌后播放的歌曲,导致随机播放过程中文件系统的操作交互繁琐,性能低。
技术实现要素:
4.本技术实施例提供了歌曲播放方法及相关装置,本技术可以减少随机播放过程中操作文件系统造成的性能损耗。
5.第一方面,本技术实施例提供了一种歌曲播放方法,应用于电子设备,上述电子设备的存储单元包括第一类存储单元和第二类存储单元,上述第一类存储单元的存取速度小于上述第二类存储单元的存取速度;包括:
6.响应于歌曲播放操作,播放第一歌曲列表中的第一歌曲;
7.将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中;
8.响应于切歌操作,从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲;上述第二歌曲为上述第一歌曲列表中一首未播放过的歌曲;
9.播放上述第二歌曲。
10.本技术实施例中,上述歌曲播放方法的执行主体可以是电子设备,比如穿戴设备;也可以是电子设备中的程序,比如应用程序(application,app)。为便于描述,后续直接以电子设备为执行主体进行介绍。
11.本技术实施例中,第一类存储单元和第二类存储单元均为电子设备的存储资源。其中,第一类存储单元可以是存储歌曲列表、歌曲的音频文件等信息的存储单元,第二类存储单元可以是程序运行时采用的存储单元,即第一类存储单元的存取速度小于上述第二类存储单元的存取速度。示例性地,上述第一类存储单元可以是用于持久性存储的外存,例如磁盘、硬盘等,上述第二类存储单元可以是内存。
12.上述歌曲播放操作可以是用户点击第一歌曲的用户操作,可以理解的是,在用户点击某首歌曲进行播放后,电子设备可以知晓当前歌曲所在的歌曲列表。
13.可以理解,在从第一类存储单元中读取数据时需要操作文件系统。比如播放歌曲时需要操作文件系统以获取歌曲的音频文件进行播放,具体播放流程可以参阅图2的相关描述,又比如从第一类存储单元中的获取歌曲列表(比如上述第一歌曲列表或其他待播放歌曲列表等),童谣需要操作文件系统。
14.由于歌曲列表存储在第一类存储单元中,因此,上述响应于歌曲播放操作,播放第一歌曲列表中的第一歌曲,也可以理解为响应于歌曲播放操作,从所述第一类存储单元读取第一歌曲列表,播放所述第一歌曲列表中的第一歌曲。因此,容易理解,上述播放第一歌曲列表中的第一歌曲步骤和将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中步骤均需要通过操作文件系统实现。
15.本技术实施例中,上述切歌操作可以是第一歌曲播放完毕后自动切歌操作,也可以是用户作用下的切歌操作,比如用户点击播放下一首歌曲或者点击播放上一首的用户操作。本技术实施例中,响应于切歌操作,电子设备从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲,第二歌曲为上述第一歌曲列表中一首未播放过的歌曲;然后播放上述第二歌曲。
16.本技术实施例中,在将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中之后,后续的歌曲播放过程的切歌直接通过第二类存储单元中歌曲列表实现,不需要再通过文件系统操作第一类存储单元,因此,本技术可以减少随机播放过程中操作文件系统造成的性能损耗。
17.本技术实施例提供的方法应用于电子设备,上述电子设备的存储单元包括第一类存储单元和第二类存储单元,上述第一类存储单元的存取速度小于上述第二类存储单元的存取速度;响应于歌曲播放操作,播放第一歌曲列表中的第一歌曲;将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中;响应于切歌操作,从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲;上述第二歌曲为上述第一歌曲列表中一首未播放过的歌曲;播放上述第二歌曲。本技术对第一歌曲列表中的歌曲进行播放,在第一歌曲播放完毕后,将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中,后续切歌时,从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲,不需要再通过文件系统操作第一类存储单元中的第一歌曲列表,从而减少随机播放过程中操作文件系统造成的性能损耗。
18.结合第一方面,在一种可能的实现方式中,上述第一歌曲列表在上述第二类存储单元中用第一数组记录,上述第一数组的比特位用于记录上述第一歌曲列表中的歌曲的播放状态。
19.可以理解,上述第一歌曲列表在上述第二类存储单元中可以有多种存储形式,可以是列表、数组等,本实施例中,使用第一数组记录上顺第一歌曲列表,其中,第一数组的比特位用于记录上述第一歌曲列表中的歌曲的播放状态,一个比特位对应上述第一歌曲列表中一首歌曲的播放状态。因此,比特位在第一数组中的位置可以表征某一首歌曲在第一歌曲列表中的排列位序。
20.通过本实施例的记录方式既可以记录到歌曲的在第一歌曲列表中的排列位序(通过比特位在第一数组中的位置表征),又可以记录到歌曲的播放状态,可以节约内存。其中,歌曲在第一歌曲列表中的排列位序可以理解为后文实施例中的musicindex,第一数组可以理解为后文实施例中的数组pool。
21.结合第一方面,在一种可能的实现方式中,上述第一数组为一维数组,上述第一数组中第m个元素的第n个比特位用于表示上述第一歌曲列表中排列位序为k的歌曲的播放状态;
22.上述m为大于或等于0的整数,上述n为大于或等于0的整数,上述m等于上述k除以t,上述n等于上述k对上述t求余,上述t为上述第一数组中任一元素所占的比特位的数量。
23.本实施例中,上述k可以理解为后文实施例中的musicindex,相应地,上述m可以理解为后文实施例中的arrayindex,上述n可以理解为后文实施例中的bitindex,上述k以上述m和上述n之间的关系可以参阅后文“pool中利用比特位记录歌曲播放状态的方法”的描述,这里不再赘述。
24.另外,上述t为上述第一数组中任一元素所占的比特位的数量,比如可以是8个比特位、16个比特位等,本技术对此不作限定。
25.结合第一方面,在一种可能的实现方式中,在上述第一歌曲播放之前,上述第一歌曲列表中各个歌曲的播放状态被标记为未播放状态,上述从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲之前,上述方法还包括:
26.在上述第一数组中将上述第一歌曲的播放状态修改为已播放状态。
27.本实施例中,第一歌曲列表读取到第二类存储单元的第一数组中后,将第一歌曲列表中各个歌曲的播放状态被标记为未播放状态,在切歌确定第二歌曲之前,在上述第一数组中将上述第一歌曲的播放状态修改为已播放状态,即将第一数组中上述第一歌曲对应的比特位修改为已播放状态,从而记录下第一歌曲列表中各个歌曲的播放情况,以便于通过比特位确定出第一歌单中未播放歌曲,避免重复播放。
28.结合第一方面,在一种可能的实现方式中,上述响应于切歌操作,从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲,包括:
29.响应于上述切歌操作,在上述第一数组中存在比特位为未播放状态的情况下,执行上述从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤。
30.本实施例中,在切歌后,先通过第一数组中记录的播放情况确定第一歌曲列表中是否有未播放歌曲,在有未播放歌曲的情况下再确定第二歌曲,避免出现第一歌单中的歌曲均被播放完毕,无法找到第二歌曲的情况。
31.应理解,如果第一数组中存在比特位为未播放状态则可以认为第一歌曲列表中存在未播放歌曲,比如比特位为1表示歌曲为未播放状态,比特位为0表示歌曲为已播放状态,那么,只要第一数组中存在不为0的元素即可认为第一数组中存在比特位为未播放状态。或者,也可以单独通过变量记录第一数组中存在比特位为未播放状态的数量,比如后文实施例中的poolleftnum,那么,如果poolleftnum不为0则表示第一数组中存在比特位为未播放状态。
32.结合第一方面,在一种可能的实现方式中,上述方法还包括:
33.在上述第一数组中的比特位均为已播放状态的情况下,重新执行上述将上述第一歌曲列表从上述第一类存储单元读取到上述第二类存储单元中。
34.本实施例可以理解为上一个实施例的另外一个分支,应理解,在一次执行中,只会执行其中一个分支。在第一数组中的比特位均为已播放状态的情况下,可以认为第一歌曲列表中的各个歌曲均播放完毕,因此需要重新读取歌曲列表进行下一轮播放,或者也可以理解为后文实施例中的重置歌曲池,具体可以参阅图5(b)的描述,这里不再赘述。本实施例可以在一轮播放中让第一歌曲列表中每首歌曲都被播放到,避免遗漏。
35.结合第一方面,在一种可能的实现方式中,上述第二类存储单元中还包括第二数
组,上述第二数组用于存储歌曲的播放顺序,上述第二数组的元素为歌曲在上述第一歌曲列表中的排列次序,上述排列次序在上述第二数组中的位置与播放上述歌曲的播放次序对应;
36.上述响应于上述切歌操作,在上述第一数组中的比特位记录有未播放状态的歌曲情况下,执行上述从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤,包括:
37.响应于上述切歌操作确定歌曲的播放次序;
38.在基于上述第二数组确定上述播放次序未对应有已播放歌曲,且上述第一数组中的比特位记录有未播放状态的歌曲的情况下,执行上述从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤。
39.本实施例中,第二类存储单元中还包括用于存储歌曲的播放顺序的第二数组,可以理解,歌曲在第一歌曲列表中的musicindex与播放次序并不一定相同,比如第一歌曲列表中的第10首歌在本轮是第1首播放的歌曲,即musicindex为10,但是播放次序为1。
40.本实施例通过记录歌曲的播放顺序,可以切换上一首播放时,能够正确退回到已经真正播放过的上一首歌曲。可以理解,上述切歌操作可以切换上一首歌曲,也可以是切换下一首歌曲,因此,响应于上述切歌操作,电子设备确定歌曲的播放次序,比如当前播放次序为5,(即播放第5首歌),如果是切换上一首歌曲则播放次序为4,如果是切换下一首歌曲则播放次序为6。
41.因此,本实施例中,在基于上述第二数组确定上述播放次序未对应有已播放歌曲,且上述第一数组中的比特位记录有未播放状态的歌曲的情况下,可以认为还未选择过歌曲进行播放,可以选定一首未播放过的第二歌曲。可选地,上述播放次序可以理解为后文实施例中的curplayindex,上述第二数组可以理解为后文实施例中的playorder,有关本实施例的介绍还可以参阅图6(c)所示的方法。
42.结合第一方面,在一种可能的实现方式中,上述方法还包括:
43.在基于上述第二数组确定上述播放次序对应有已播放歌曲的情况下,重新播放上述已播放歌曲。
44.本实施例可以理解为上一个实施例的另外一个分支,应理解,在一次执行中,只会执行其中一个分支。在第二数组中已经记录了已播放歌曲的musicindex的情况下,直接重新播放上述已播放歌曲即可,有关本实施例的介绍还可以参阅图6(c)所示的方法。
45.结合第一方面,在一种可能的实现方式中,上述从上述第二类存储单元存储的第一歌曲列表中确定第二歌曲,包括:
46.基于上述第一数组中被标记为未播放状态的比特位确定上述第一歌曲列表中的未播放歌曲;
47.从上述第一歌曲列表中的未播放歌曲中确定上述第二歌曲。
48.可以理解,第一数组通过比特位记录了第一歌单中各个歌曲的播放状态,本实施例通过第一数组中被标记为未播放状态的比特位确定上述第一歌曲列表中的未播放歌曲,以便于从未播放歌曲中确定上述第二歌曲。
49.结合第一方面,在一种可能的实现方式中,上述基于上述第一数组中被标记为未播放状态的比特位确定上述第一歌曲列表中未播放的歌曲,包括:
50.基于参考比特位确定一首未播放歌曲在上述第一歌曲列表中的排列位序;上述参
考比特位为上述第一数组中任一个被标记为未播放状态的比特位,上述排列位序等于x乘以上述t加上t-1-y之和,上述x为上述参考比特位所在的元素在上述第一数组中的位序,上述y为上述参考比特位在所占元素中的位序;
51.基于上述第一数组中每个被标记为未播放状态的比特位确定的排列位序,得到上述第一歌曲列表中的未播放歌曲。
52.本实施例中可以理解为循环,参考比特位为第一数组中任一个被标记为未播放状态的比特位,每个参考比特位执行同样的操作以得到对应的排列位序(即musicindex),因此,基于上述第一数组中每个被标记为未播放状态的比特位确定的排列位序,可以得到上述第一歌曲列表中的全部未播放歌曲。
53.本实施例中,基于参考比特位在第一数组的位置得到对应的排列位序,即对于任一个比特位,得到的排列位序为x*t+(t-1-y),其中x参考比特位所在的元素在上述第一数组中的位序。比如该参考比特位是第一数组中的第1个元素,那么x为0;比如该参考比特位是第一数组中的第10个元素,那么x为9。可以理解为后文实施例中的还原歌曲池,具体可以参阅图6(b)的相关描述,这里不再赘述。
54.第二方面,本技术实施例提供了一种歌曲播放装置,包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的单元。
55.第三方面,本技术实施例提供一种电子设备,上述电子设备包括处理器、存储器;上述存储器与上述处理器耦合,上述存储器用于存储计算机程序代码,上述计算机程序代码包括计算机指令,上述处理器调用上述计算机指令,以使第一方面或第一方面的任意可能的实现方式中的方法被执行。
56.第四方面,本技术实施例提供一种芯片,包括逻辑电路和接口,上述逻辑电路和接口耦合;上述接口用于输入和/或输出代码指令,上述逻辑电路用于执行上述代码指令,以使第一方面或第一方面的任意可能的实现方式中的方法被执行。
57.第五方面,本技术实施例公开了一种计算机程序产品,上述计算机程序产品包括程序指令,上述程序指令当被处理器执行时,使第一方面或第一方面的任意可能的实现方式中的方法被执行。
58.第六方面,本技术实施例提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,当上述计算机程序在处理器上运行时,使第一方面或第一方面的任意可能的实现方式中的方法被执行。
附图说明
59.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
60.图1是本技术实施例提供的一种穿戴设备的结构示意图;
61.图2是本技术实施例提供的一种软件结构框图;
62.图3是本技术实施例提供的一种音乐播放器的架构示意图;
63.图4是本技术实施例提供的一种对治愈系歌单中的歌曲进行播放的示意图;
64.图5(a)是本技术实施例提供的一种歌曲播放方法的流程示意图;
65.图5(b)是本技术实施例提供的一种歌曲池初始化的流程示意图;
66.图6(a)是本技术实施例提供的一种从歌曲池中确定歌曲随机播放的流程示意图;
67.图6(b)是本技术实施例提供的一种还原歌曲池的流程示意图;
68.图6(c)是本技术实施例提供的另一种从歌曲池中确定歌曲随机播放的流程示意图。
具体实施方式
69.本技术以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本技术的限制。如在本技术的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。还应当理解,本技术中使用的术语“和/或”是指并包含一个或多个所列出项目的任何或所有可能组合。
70.本技术的说明书、权利要求书及附图中的术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。还应理解,本技术实施例中,步骤前的编号是为了便于理解和方案描述而作出的,而不应该理解为对步骤执行顺序的限定。
71.本技术实施例提供了歌曲播放方法及相关装置,在电子设备对歌曲列表中的歌曲进行随机播放的过程中,可以让每轮播放有效地播放到歌曲列表中的每首歌曲;并且可以记录本轮歌曲播放的顺序,以便于随机播放过程中切换上一首播放时,能够正确退回到已经真正播放过的上一首歌曲。另外,本技术通过比特位来记录歌曲列表中各个歌曲的播放情况,可以减少随机播放过程中的内存消耗。
72.本技术实施例中,歌曲列表中包括至少一首歌曲。可选地,歌曲列表也可以称为歌单,上述歌单可以是非自定义歌单,比如可以是穿戴设备根据用户喜好推荐的歌曲组成的歌单,也可以是根据不同音乐风格形成的歌单,例如纯音乐歌单、摇滚歌单、爵士乐歌单以及钢琴曲歌单等,还可以是根据历史播放次数形成的歌单,比如历史累计播放次数排名前100的歌曲组成的歌单。上述歌单也可以是用户自定义的歌单,比如用户可以根据自己的喜好创建歌单并向其中添加歌曲。
73.本技术实施例提供的方法可以由电子设备执行,该电子设备可以是穿戴电子设备(或者也可以称为穿戴设备、智能穿戴设备),比如可以是穿戴设备、手戴电子设备等。示例性地,该穿戴设备可以是眼镜、护目镜等,该手戴电子设备可以是手环、手表等。
74.为便于理解本技术实施例的电子设备,请参阅图1,图1是本技术实施例提供的一种穿戴设备的结构示意图。可以理解的,本技术实施例以电子设备为穿戴设备为例进行介绍,但是本技术实施例不限于穿戴设备,电子设备还可以是其他具备音频播放功能的电子设备,本技术对此不作限定。
75.如图1所示,穿戴设备可以佩戴在用户的一只手腕上,用户可以通过另一只手操作穿戴设备播放歌曲。示例性地,穿戴设备100可以包括处理器110,存储器120,通用串行总线(universal serial bus,usb)接口130,充电管理模块140,电源管理模块141,电池142,摄像头150,显示屏160,音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,传感器模块180以及通信模块190。其中,传感器模块180可以包括环境光传感器180a、陀螺仪传感器180b、加速度传感器180c、触摸传感器180d以及心率传感器180e等。
76.可以理解的是,本技术实施例示意的结构并不构成对穿戴设备100的具体限定。在本技术另一些实施例中,穿戴设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
77.处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,ap),调制解调处理器,图形处理器(graphics processing unit,gpu),图像信号处理器(image signal processor,isp),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,dsp),基带处理器,和/或神经网络处理器(neural-network processing unit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
78.其中,控制器可以是穿戴设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
79.处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从上述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
80.在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,i2c)接口,集成电路内置音频(inter-integrated circuit sound,i2s)接口,脉冲编码调制(pulse code modulation,pcm)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,uart)接口,移动产业处理器接口(mobile industry processor interface,mipi),通用输入输出(general-purpose input/output,gpio)接口,用户标识模块(subscriber identity module,sim)接口,和/或通用串行总线(universal serial bus,usb)接口等。
81.i2c接口是一种双向同步串行总线,包括一根串行数据线(serial data line,sda)和一根串行时钟线(derail clock line,scl)。在一些实施例中,处理器110可以包含多组i2c总线。处理器110可以通过不同的i2c总线接口分别耦合触摸传感器180d,充电器,闪光灯,摄像头150等。例如:处理器110可以通过i2c接口耦合触摸传感器180d,使处理器110与触摸传感器180d通过i2c总线接口通信,实现穿戴设备100的触摸功能。
82.i2s接口可以用于音频通信。在一些实施例中,处理器110可以包含多组i2s总线。处理器110可以通过i2s总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过i2s接口向通信模块190传递音频信号,实现通过蓝牙耳机接听电话的功能。
83.pcm接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与通信模块190可以通过pcm总线接口耦合。在一些实施例中,音频模块170也可以通过pcm接口向通信模块190传递音频信号,实现通过蓝牙耳机接听电话的功能。所述i2s接口和所述pcm接口都可以用于音频通信。
84.uart接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,uart接口通常被用于连接处理器110与通信模块190。例如:处理器110通过uart接口与通信模块190中的蓝牙
模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过uart接口向通信模块190传递音频信号,实现通过蓝牙耳机播放音乐的功能。
85.mipi接口可以被用于连接处理器110与显示屏160,摄像头150等外围器件。mipi接口包括摄像头串行接口(camera serial interface,csi),显示屏串行接口(display serial interface,dsi)等。在一些实施例中,处理器110和摄像头150通过csi接口通信,实现穿戴设备100的拍摄功能。处理器110和显示屏160通过dsi接口通信,实现穿戴设备100的显示功能。
86.gpio接口可以通过软件配置。gpio接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,gpio接口可以用于连接处理器110与摄像头150,显示屏160,通信模块190,音频模块170,传感器模块180等。gpio接口还可以被配置为i2c接口,i2s接口,uart接口,mipi接口等。
87.usb接口130是符合usb标准规范的接口,具体可以是mini usb接口,micro usb接口,usb type c接口等。usb接口130可以用于连接充电器为穿戴设备100充电,也可以用于穿戴设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如ar设备等。
88.可理解地,本技术实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对穿戴设备100的结构限定。在本技术另一些实施例中,穿戴设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
89.充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过usb接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过穿戴设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
90.电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,存储器120,显示屏160,摄像头150,和通信模块190等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
91.另外,穿戴设备100可以包含无线通信功能。通信模块190可以包含无线通信模块和移动通信模块。无线通信功能可以通过天线(未示出)、移动通信模块(未示出),调制解调处理器(未示出)以及基带处理器(未示出)等实现。
92.天线用于发射和接收电磁波信号。穿戴设备100中可以包含多个天线,每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
93.移动通信模块可以提供应用在穿戴设备100上的包括2g/3g/4g/5g等无线通信的解决方案。移动通信模块可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,lna)等。移动通信模块可以由天线接收电磁波,并对接收的电磁波进行
滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块还可以对经调制解调处理器调制后的信号放大,经天线转为电磁波辐射出去。在一些实施例中,移动通信模块的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
94.调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170a,受话器170b等)输出声音信号,或通过显示屏160显示图片或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块或其他功能模块设置在同一个器件中。
95.无线通信模块可以提供应用在穿戴设备100上的包括无线局域网(wireless local area networks,wlan)(如无线保真(wireless fidelity,wi-fi)网络),蓝牙(bluetooth,bt),全球导航卫星系统(global navigation satellite system,gnss),调频(frequency modulation,fm),近距离无线通信技术(near field communication,nfc),红外技术(infrared,ir)等无线通信的解决方案。无线通信模块可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块经由天线接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线转为电磁波辐射出去。
96.在一些实施例中,穿戴设备100的天线和移动通信模块耦合,使得穿戴设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,gsm),通用分组无线服务(general packet radio service,gprs),码分多址接入(code division multiple access,cdma),宽带码分多址(wideband code division multiple access,wcdma),时分码分多址(time-division code division multiple access,td-scdma),长期演进(long term evolution,lte),bt,gnss,wlan,nfc,fm,和/或ir技术等。所述gnss可以包括全球卫星定位系统(global positioning system,gps),全球导航卫星系统(global navigation satellite system,glonass),北斗卫星导航系统(beidou navigation satellite system,bds),准天顶卫星系统(quasi-zenith satellite system,qzss)和/或星基增强系统(satellite based augmentation systems,sbas)。
97.穿戴设备100通过gpu,显示屏160,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏160和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。
98.显示屏160用于显示图片,视频等。显示屏160包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,lcd),有机发光二极管(organic light-emitting diode,oled),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,amoled),柔性发光二极管(flex light-emitting diode,fled),miniled,microled,micro-oled,量子点发光二极管(quantum dot light emitting diodes,qled)等。在一些实施例中,穿戴设备100可以包括1个或n个显示屏160,n
为大于1的正整数。
99.在一些实施例中,显示屏160可以用于显示正在播放的歌曲列表以及正在播放的歌曲的歌曲信息。
100.存储器120可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在存储器120的指令,从而执行穿戴设备100的各种功能应用以及数据处理。存储器120可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图片或视频播放功能等)等。存储数据区可存储穿戴设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,ufs)等。
101.处理器110通过运行存储在存储器120的指令,和/或存储在设置于处理器中的存储器的指令,执行穿戴设备100的各种功能应用以及数据处理。本技术实施例中,存储器120可以包括第一类存储单元和第二类存储单元。
102.穿戴设备100可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,以及应用处理器等实现音频功能。例如音乐播放,录音等。
103.在一些实施例中,穿戴设备100可以从存储器120中获取本地音乐进行播放,还可以通过通信模块190与其他电子设备连接(比如蓝牙连接),通过该连接控制其他电子设备中的音乐播放。可选地,穿戴设备100可以通过扬声器170a播放音乐,也可以通过与耳机接口170d连接的耳机播放音乐。穿戴设备100还可以控制音乐的播放模式,例如可以是单曲循环播放、列表循环、随机播放等。
104.音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
105.扬声器170a,也称喇叭,用于将音频电信号转换为声音信号。
106.受话器170b,也称听筒,用于将音频电信号转换成声音信号。当穿戴设备100接听电话或语音信息时,可以通过将受话器170b靠近人耳接听语音。
107.麦克风170c,也称话筒或传声器,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170c发声,将声音信号输入到麦克风170c。穿戴设备100可以设置至少一个麦克风170c。在另一些实施例中,穿戴设备100可以设置两个麦克风170c,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,穿戴设备100还可以设置三个,四个或更多麦克风170c,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
108.耳机接口170d用于连接有线耳机。耳机接口170d可以是usb接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,omtp)标准接口。
109.传感器模块180中的环境光传感器180a用于感知环境光亮度。穿戴设备100可以根据感知的环境光亮度自适应调节显示屏160的亮度。
110.陀螺仪传感器180b可以用于确定穿戴设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180b确定穿戴设备100围绕三个轴(即,x,y和z轴)的角速度。
111.加速度传感器180c可检测穿戴设备100在各个方向上(一般为三轴)加速度的大
小。当穿戴设备100静止时可检测出重力的大小及方向。结合陀螺仪传感器180b得到的角速度和加速度传感器180c得到的三个轴向上的加速度,可以用于计算用户的步数、距离、速度和卡路里消耗等信息,还可以用于实现抬腕亮屏功能。
112.触摸传感器180d,也可以称为“触控面板”。触摸传感器180d可以设置于显示屏160,由触摸传感器180d与显示屏160组成触摸屏,也可以称“触控屏”。触摸传感器180d用于检测作用于其上或附近的触摸操作。触摸传感器180d可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏160提供与触摸操作相关的视觉输出。
113.心率传感器180e可以利用红外线和发光二极管照射皮肤和血液,基于皮肤和血液对光线的吸收情况,计算出反映用户心率的数据,以监测心率。
114.在另一些实施例中,处理器110可以调用存储器120存储的计算机指令,以实现本技术实施例提供的歌曲播放方法。示例性地,处理器110可以调用内部存储器121存储的计算机指令,获取待播放歌曲列表的歌曲信息,记录歌曲列表中各个歌曲的播放情况。
115.示例性地,处理器110可以调用内部存储器121存储的计算机指令,从歌曲列表中未播放过的歌曲中随机选择一首歌曲进行歌曲切换,还可以记录每轮随机播放的播放顺序。
116.可以理解的是,穿戴设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构,本技术对此不作限定。为便于理解,示例性地,请参阅图2,图2是本技术实施例提供的一种软件结构框图。如图2所示的分层架构将软件分成若干个层,每一层都有清晰的角色和分工,层与层之间可以通过软件接口通信。
117.在一些实施例中,可以将电子设备的系统分为五层,从上至下分别为应用程序层,应用程序框架层,系统运行库层,硬件抽象层(hardware abstraction layer,hal)以及内核层。对上述各个层的描述如下:
118.应用程序层可以包括一系列应用程序包。示例性地,应用程序层的应用程序包可以包括音乐、运动、健康、表盘等应用程序。
119.应用程序框架层可以为应用程序层中的应用程序提供应用编程接口(application programming interface,api)和编程框架。应用程序框架层可以包括一些预先定义的函数。示例性地,应用程序框架层可以包括通信服务模块、音频服务模块、数据服务模块、蓝牙服务模块等。
120.系统运行库层可以包括语言编译器运行时子系统,公共基础库以及其他算法库。
121.硬件抽象层提供标准接口,比如hal接口定义语言(hal interface definition language,hidl)接口或安卓接口定义语言(android interface definition language,aidl)接口。
122.内核层可以理解为硬件和软件之间的抽象层。内核层可以包括安全性、内存管理、进程管理、电源管理、网路协议管理以及驱动管理等系统服务。示例性地,内核层可以包括显示驱动,音频驱动以及传感器驱动等。
123.为便于理解音乐播放的原理,接下来结合图2和图3对穿戴设备播放音乐的原理进行介绍。其中,图3是本技术实施例提供的一种音乐播放器的架构示意图,如图3所示的音乐播放器可以位于图2所示的应用程序框架层。
124.可以理解,用户可以通过应用程序层中的音乐应用程序选择歌曲进行播放,还可
以创建一个或多个歌曲列表,每个歌曲列表包括至少一首歌曲。示例性地,内核层的传感器驱动可以包括触摸传感器驱动,触摸传感器驱动用于响应播放歌曲的用户操作生成事件,以触发应用程序框架层中的音乐播放器播放歌曲。
125.如图3所示,音乐播放器可以包括读取模块、解析模块、解码模块以及渲染模块。其中:
126.读取模块用于从文件系统中读取音频文件,该文件系统可以位于如图2所示的系统运行库层,该文件系统用于维护下载的一个或多个音频文件,示例性地,穿戴设备可以基于歌曲链接下载对应的音频文件。读取音频文件也可以理解为读取音频数据,读取模块可以从音频文件的起始位置顺序读取音频数据,也可以根据指定的偏移位置读取音频数据。本技术实施例中,音频文件也可以称为歌曲文件,音乐文件等,本技术对此不作限定。
127.可以理解的,音频文件一般是通过音频压缩技术得到,比如通过自由无损音频压缩编码(free lossless audio code,flac)得到后缀为.flac的音频文件,通过monkey's audio(一种无损压缩技术的软件)得到后缀为.ape的音频文件,通过动态影像专家压缩标准音频层面3(moving picture experts group audio layer iii,mp3)编码得到后缀为.mp3的音频文件等。因此,读取模块读取的是被封装的音频数据,比如可以是mp3、ape、flac等格式封装起来的音频数据。
128.解析模块用于对读取模块输出的音频数据的封装格式进行解析,得到被编码的音频数据。
129.解码模块用于对解析模块输出的音频数据进行解码,得到解码的音频数据。示例性地,如果音频文件以ape格式进行封装,则调用monkey's audio解码器进行解码;如果音频文件以flac格式进行封装,则调用flac解码器;如果音频文件以mp3格式进行封装,则调用lame解码器(一种mp3文件的解码工具)。
130.渲染模块用于利用解码模块输出的音频数据播放音频。示例性地,可以将解码的音频数据发送至声卡,然后利用扬声器进行播放。
131.在一些实施例中,音乐播放器还包括监视模块,用于监视音频播放进度等信息。
132.可以理解,穿戴设备在播放歌曲时可以有多种播放模式,比如可以是单曲循环播放、列表循环、随机播放等。在单曲循环播放模式下,穿戴设备循环播放当前播放的歌曲。列表循环模式和随机播放模式下,穿戴设备对歌曲列表中的歌曲进行播放。其中,列表循环模式下,穿戴设备按照歌曲列表中各个歌曲的排列顺序依次循环播放歌曲;随机播放模式下,穿戴设备按照与歌曲列表中的排列顺序不同的其他列表循环歌曲。
133.为便于理解,示例性地,请参阅图4,图4是本技术实施例提供的一种对治愈系歌单中的歌曲进行播放的示意图。如图4所示,歌曲列表“治愈系歌单”中包括5首歌曲,在歌单中的排列顺序为s1、s2、s3、s4、s5。
134.假设从歌曲s3开始对治愈系歌单中的歌曲进行列表循环播放,那么播放顺序依次为:s3、s4、s5、s1、s2、s3、s4
……
。可以理解,后续可以以歌单中各个歌曲的排列顺序继续循环,这里不再一一列举。
135.假设从歌曲s3开始对治愈系歌单中的歌曲进行随机播放,在一种随机播放方式中,可以在每次切歌时都从治愈系歌单中随机选择一首歌曲进行播放,那么可以得到如图4中方式一所示的播放顺序:s3、s1、s5、s2、s3
……
。也就是说,歌曲s3播放完毕后切歌到歌曲
s1播放,歌曲s1播放完毕后切歌到歌曲s5播放,后续依次类推。在上述方式中,每次切歌从歌单中随机选取歌曲进行播放,可能导致并未将歌单中各个歌曲都播放一次就又重复播放已经播放过的歌曲,比如在上述方式一中,歌曲s3播放完毕之后随机播放了歌曲s1、歌曲s5以及歌曲s2,在并未播放歌曲s4的情况下又随机播放到s3。
136.在另一种随机播放方式中,可以在每轮随机播放之前,先确定出本轮随机播放的目标顺序(与治愈系歌单中各个歌曲的排列顺序不同,可以理解为随机顺序),然后按照目标顺序依次播放对应的歌曲。示例性地,如图4所示,在对治愈系歌单进行第一轮随机播放时,采用的播放顺序可以是:s3、s1、s5、s2、s4;在对治愈系歌单进行第二轮随机播放时,采用的播放顺序可以是:s5、s3、s2、s1、s4。可以理解,后续可以继续确定新的目标顺序,然后按照目标顺序播放歌曲,这里不再一一举例。
137.上述方式中,在随机播放一开始就需要将本轮播放顺序确定出来,随着歌曲列表中歌曲数量的增多,一次性确定出播放顺序将导致卡顿,影响用户体验。
138.可以理解,除了采用上述方式一和上述方式二进行随机播放之外,还可以有其他方式进行随机播放,比如可以添加用户对歌曲的喜好度标签确定随机播放的歌曲。可以理解,用户对歌曲的喜好度受到心情的影响,比如在心情失落的时间段内可能会偏向于听节奏缓慢的歌曲,在心情愉悦的时间段喜欢听节奏欢快的歌曲,如果在随机播放过程中添加喜好度等标签,就会导致不断随机播放到历史听歌记录中播放次数较多的那部分歌曲,而那部分歌曲可能符合历史上某个时间段的心境,但是已经不符合用户当前的心境。因此,采用上述方式进行随机播放时,可能导致一部分歌曲频繁播放到,一部分歌曲很少甚至几乎无法播放到,用户体验差。
139.本技术实施例提供的方法,在需要对歌曲列表中的歌曲进行随机播放时,先从文件系统中将歌曲列表读取到内存中,并且在内存中记录歌曲列表中各个歌曲的播放情况。在后续随机播放过程中,根据各个歌曲的播放情况确定下一首播放的歌曲,由于在选择下一首播放歌曲时不需要与文件系统交互来获取歌曲列表信息和各个歌曲的播放情况,本技术可以减少随机播放过程中操作文件系统造成的性能损耗。
140.本技术实施例中,歌曲的播放情况可以理解为歌曲的播放状态,可以是已播放状态,也可以是未播放状态。可以理解的是,同一首歌曲要么处于已播放状态,要么处于未播放状态。
141.本技术实施例提供的方法,还可记录每轮随机播放中歌曲的播放顺序,在用户切换上一首歌曲播放时,能够正确退回到已经真正播放过的上一首歌曲,提高用户体验。
142.为了便于理解本技术实施例提供的方法,接下来介绍本技术实施例涉及到的数据结构。本技术实施例例中,歌曲列表中各个歌曲的集合可以形象地称为歌曲池,在需要对歌曲列表中的歌曲进行随机播放时,先从文件系统中将歌曲列表读取到内存中,并通过以下数据结构进行记录(可以理解为初始化歌曲池)。后续随机播放过程中,继续通过以下数据结构记录歌曲池中各个歌曲的播放情况。上述数据结构包括:
143.1、mc_u32 poolleftnum;
144.2、mc_u8 pool[歌曲总数/8+1];
[0145]
3、mc_u16 curplayindex;
[0146]
4、mc_u16 pooltotalnum;
[0147]
5、mc_u16 playorder[歌曲总数]。
[0148]
应理解,本技术实施例中的每行代码之前的编号是为了便于描述而作出,不应理解为代码中必然包括的内容,也不应理解为代码的执行顺序。
[0149]
示例性地,第1行代码表示poolleftnum为4字节无符号整型变量,本技术实施例中,poolleftnum用于记录歌曲池中剩余未播放的歌曲数量。第2行代码表示pool为无符号数组,长度为歌曲总数/8+1,pool中每个数据占1个字节(即8比特)。本技术实施例中,pool用于记录歌曲池中各个歌曲的播放情况,即用比特位表示歌曲的播放状态,具体在后文进行介绍。第3行代码表示curplayindex为2字节无符号整型变量,本技术实施例中,curplayindex用于记录当前播放的歌曲的播放次序。
[0150]
本技术实施例中,歌曲在歌曲列表中的排列位序可以称为musicindex,或者,musicindex也可以理解为歌曲在歌曲列表中的偏移。为便于理解播放次序和排列位序,示例性地,复用图4,如图4所示,在方式二的第一轮随机播放中,播放的第1首歌曲是歌单中的s3,上述情况下,播放次序curplayindex为1,musicindex为3。又示例性地,播放的第3首歌曲是歌单中的s5,上述情况下,播放次序curplayindex为3,musicindex为5。
[0151]
第4行代码表示pooltotalnum为2字节无符号整型变量,本技术实施例中,pooltotalnum用于记录歌曲池中总的歌曲数量。第5行代码表示playorder是长度为歌曲总数的无符号数组,playorder中每个元素占2个字节。本技术实施例中,数组playorder用于记录一轮随机播放的播放顺序,因此,可以理解,数组playorder中记录的是musicindex。
[0152]
接下来介绍本技术实施例中,pool中利用比特位记录歌曲播放状态的方法。
[0153]
可以理解的是,歌曲的播放状态要么是已播放,要么是未播放。示例性地,可以采用比特位为0或为1来表示上述两种状态,例如比特位为1表示歌曲未播放,比特位为0表示歌曲已播放。本技术实施例中,pool中各个比特位的取值用于表示歌曲的播放状态,而比特位的位置与歌曲的musicindex对应,示例性地,pool中第5个比特位用于表示musicindex为5的歌曲的播放状态,如果pool中第5个比特位为1,则表示歌曲列表中第5首歌曲未播放,如果pool中第5个比特位为0,则表示歌曲列表中第5首歌曲已播放。
[0154]
在记录歌曲的播放状态时可以基于歌曲的musicindex确定出元素偏移(也可以称为arrayindex)和比特位偏移(也可以称为bitindex),进而确定出该歌曲在pool中的位置。由于pool中每个数据被定义为1个字节的大小,即8个比特位,因此,元素偏移arrayindex可以对musicindex/8取整得到,比特位偏移bitindex可以由musicindex除以8取余得到。
[0155]
示例性地,musicindex为11的歌曲a,可以得到元素偏移arrayindex为1,比特位偏移bitindex为3。因此,如果歌曲a是未播放状态,那么,pool中第1个数据(可以理解为pool[1])的第3个比特位为1,即pool[1]=xxxxx1xx。需要说明的是,pool[1]中的“x”用于表征其他歌曲(非歌曲a)的播放状态,具体取值可以是0,也可以是1,这里用“x”仅仅是为了突出musicindex为11的歌曲a的比特位表示情况。
[0156]
类似地,如果歌曲列表中包括11首未播放的歌曲,musicindex为1-11,那么可以得到pool中存放的数据应该是:11111111 00000111。也就是说,pool中包括两个元素,pool[0]和pool[1],其中,pool[0]为255(也就是上述11111111),pool[1]为7(也就是上述00000111)。
[0157]
本技术实施例中,采用比特位来记录歌曲的播放状态,可以节约歌曲播放情况记
录所占用的内存。示例性地,在一种方案中,可以在歌曲播放之前直接记录歌曲的musicindex,在歌曲播放之后修改为其他标记,那么,如果歌曲列表中包括500首歌曲,上述方案需要的内存为1000字节(也就是500个元素,每个元素占2字节),而本方案只需要63字节。
[0158]
本技术实施例提供可以基于以上数据结构实现歌曲的随机播放,为便于理解,示例性地,请参阅图5(a),图5(a)是本技术实施例提供的一种歌曲播放方法的流程示意图。如图5(a)所示的方法可以由应用程序框架层的歌曲播放模块执行,其中,歌曲播放模块可以包括重置模块和随机播放模块,重置模块用于歌曲池的初始化,重置模块执行的步骤可以包括步骤501,随机播放模块用于从歌曲池中随机确定歌曲播放,随机播放模块执行的步骤可以包括步骤502-步骤506,示例性地,上述方法包括:
[0159]
501:歌曲池初始化。
[0160]
本技术实施例中,歌曲池初始化可以理解为根据文件系统中的待播放歌曲列表对数据结构进行初始化,其中,如图5(a)所示,文件系统可以位于系统运行库中。本技术实施例中,歌曲池初始化也可以称为歌曲池重置或者重置歌曲池,具体实现方法可以参阅图5(b)所示的流程图。
[0161]
502:播放歌曲。
[0162]
本步骤中,应用程序层中的随机播放模块可以从文件系统中获取歌曲的音频文件,进行歌曲播放,具体播放流程可以参阅前文图3的描述,这里不再赘述。
[0163]
503:判断是否歌曲池中全部歌曲均被播放。
[0164]
示例性地,在步骤502中的歌曲播放完毕或者切歌后,判断是否歌曲池中全部歌曲均被播放。
[0165]
在步骤503的判断结果为是的情况下,执行步骤506:结束本轮随机播放。
[0166]
本步骤中,结束本轮播放可以理解为当前歌曲列表中的歌曲已经被全部播放完毕,可以进入下一轮播放,即重置歌曲池重新对歌曲列表中的歌曲进行随机播放,因此,步骤506之后可以执行步骤501。
[0167]
在步骤503的判断结果为否的情况下,执行步骤504:更新歌曲池。
[0168]
本步骤中,更新歌曲池也可以理解为更新数据结构中的数据。示例性地,歌曲池的更新可以包括将步骤502中已经播放完毕的歌曲标记为已播放状态等。
[0169]
步骤504之后执行步骤505:从歌曲池中随机确定一首未播放过的歌曲。
[0170]
本步骤中,从歌曲池中随机确定一首未播放过的歌曲应该理解为从更新后的歌曲池中确定一首未播放过的歌曲。在确定出一首未播放过的歌曲,重新执行步骤502:播放歌曲。应理解,在重新执行步骤502时,播放的歌曲为步骤505中确定出的歌曲。
[0171]
可以理解的是,歌曲列表中的歌曲维护在文件系统中,在一种随机播放方式中,在需要切歌时,需要从文件系统读取歌曲列表信息和各个歌曲的播放情况以确定切歌后播放的歌曲,由于每次切歌都需要与文件系统交互才能确定切歌后播放的歌曲,导致与文件系统的交互操作多,性能低。
[0172]
而本实施例中,在需要对歌曲列表中的歌曲进行随机播放时,先从文件系统中将歌曲列表读取到内存中(或者可以理解为上述歌曲池初始化),并且在内存中记录歌曲列表中各个歌曲的播放情况。在后续随机播放过程中,根据歌曲池中记录的各个歌曲的播放情
况确定下一首播放的歌曲,由于在选择下一首播放歌曲时不需要与文件系统交互来获取歌曲列表信息和各个歌曲的播放情况,本技术可以减少随机播放过程中操作文件系统造成的性能损耗。
[0173]
还应理解,通过本技术可以减少确定切歌后播放的歌曲这一过程中的文件系统交互操作,但是在确定好切歌后播放的歌曲后,同样需要从文件系统中读取音频文件进行播放。因此,可以认为在其他方案中,确定切歌后播放的歌曲以及播放该歌曲均需要与文件系统交互,即2次交互;而本方案中,确定切歌后播放的歌曲不需要与文件系统交互,只是在播放该歌曲均需要与文件系统交互,即1次交互。因此,本技术可以减少随机播放过程中操作文件系统造成的性能损耗。
[0174]
接下来介绍步骤501中歌曲池初始化的具体方式,示例性地,请参阅图5(b),图5(b)是本技术实施例提供的一种歌曲池初始化的流程示意图。
[0175]
示例性地,触发歌曲池初始化包括以下情况:
[0176]
情况一:从其他播放模式切换到随机播放模式
[0177]
比如用户正在单曲循环歌单a中的歌曲a,响应于从单曲循环模式切换到随机播放模式的切换操作,歌曲池初始化。可以理解,除了从单曲循环模式切换到随机播放模式,例如顺序播放、列表循环等其他播放模式切换到随机播放模式也可以触发歌曲池初始化。
[0178]
情况二:一轮播放完毕
[0179]
比如当前正在对歌单a中的各个歌曲进行随机播放,在歌单a中的各个歌曲均被播放过后,可以认为本轮随机播放完毕,可以进入下一轮随机播放,从而触发歌曲池初始化。
[0180]
情况三:选择新的歌曲列表播放,触发播放列表刷新
[0181]
比如当前正在对歌单a中的各个歌曲进行随机播放,响应于从歌单a切换到歌单b的切换操作,歌曲池初始化,即根据歌单b初始化歌曲池。示例性地,上述切换操作可以是用户点击歌单b中的某一首歌曲进行播放的播放操作。
[0182]
如图5(b)所示,上述情况一、情况二以及情况三中任意情况都将触发上述步骤501中的歌曲池初始化,歌曲池初始化的流程包括:
[0183]
5011:将curplayindex设置为0,将playorder[0]设置为当前播放歌曲的musicindex,其余元素设置为0xffff,将poolleftnum设置为0。
[0184]
本技术实施例中,playorder用于记录随机播放的播放顺序。本步骤中,playorder[0]可以理解第1首播放的歌曲,即当前正在播放的歌曲。根据触发情况的不同,playorder[0]记录的musicindex可以是用户点击的歌曲的musicindex(对应情况三),也可以是上一轮播放中的最后一首歌曲的musicindex(对应情况二)。
[0185]
本技术实施例中,playorder中元素为0xffff表示还未有歌曲进行播放,如果元素不为0xffff则表示已经确定过歌曲进行播放,且元素记录的是歌曲的musicindex。
[0186]
5012:将歌曲的musicindex转换为元素偏移和比特位偏移,并基于元素偏移和比特位偏移将pool中对应的比特位设置为1。
[0187]
本步骤中有关将musicindex转换为元素偏移(arrayindex)和比特位偏移(bitindex)的具体方式可以参阅前文“pool中利用比特位记录歌曲播放状态的方法”的相关描述,这里不再赘述。本实施例中,pool中比特位为1表示歌曲为未播放状态,如果为0则表示歌曲为已播放状态,因此,本步骤可以理解为将歌曲musicindex的播放状态记录为未
播放状态。
[0188]
示例性地,对于某个musicindex,可以通过pool[arrayindex]=1u《《bitindex将歌曲的播放状态记录为未播放状态。其中,1u《《bitindex可以理解为:取一个大小为1的无符号数,并且将其左移bitindex位。
[0189]
5013:poolleftnum的取值加1。
[0190]
5014:判断是否歌曲列表中全部歌曲均被记录播放状态。
[0191]
可以理解,歌曲播放模块需要从文件系统中获取歌曲列表的信息,可以通过是否将歌曲列表中的歌曲读取完毕确定是否歌曲列表中全部歌曲均被记录播放状态,例如,如果已经将文件系统中的歌曲读取完毕,那么可以认为歌曲列表中全部歌曲均被记录播放状态,否则,歌曲列表中歌曲没有全部被记录播放状态,需要继续才能够文件系统中读取歌曲信息进行播放状态记录。
[0192]
因此,以上步骤5011-步骤5014可以理解为一个循环,在步骤5014的判断结果为否的情况下,重新执行步骤5011。可以理解,在重新执行步骤5011时,是将其他新的歌曲musicindex转换为元素偏移和比特位偏移。
[0193]
在步骤5014的判断结果为是的情况下。执行步骤5015:将pooltotalnum设置为poolleftnum的取值。可以理解,经过步骤5011-步骤5014可以将歌曲列表中每首歌曲的播放状态记录为未播放状态,并且统计出歌曲列表中的歌曲总数,在初始化阶段,歌曲池的总数pooltotalnum与歌曲池中剩余未播放歌曲数量poolleftnum相同。
[0194]
步骤5015之后,结束初始化,可以认为得到了歌曲列表的初始信息,后续的随机播放过程都将基于初始化的歌曲池。示例性地,假如歌单a中有11首歌曲(musicindex记录为0-10),正在播放歌单中第5首歌曲,经过图5(b)所示的方式初始化后,可以得到歌曲池的数据结构为:poolleftnum=11;pool内包括的元素为pool[0]=11111111、pool[1]=00000111;curplayindex=0;pooltotalnum=11;playorder包括的元素为playorder[0]=4,其余元素为0xffff。
[0195]
接下来介绍随机播放过程。
[0196]
可以理解,在确定对某个歌曲列表中的歌曲进行随机播放后,歌曲播放模块可以自动切歌进行随机播放,上述场景下,随机播放的流程可以参阅图6(a),图6(a)是本技术实施例提供的一种从歌曲池中确定歌曲随机播放的流程示意图。在当前歌曲播放完毕进行切歌时,执行的步骤包括:
[0197]
601:判断歌曲池中的歌曲是否播放完毕。
[0198]
本步骤与前文步骤503类似,在歌曲池中全部歌曲的播放状态均为已播放的情况下可以认为歌曲池中的歌曲播放完毕,否则认为歌曲池中的歌曲未播放完毕。示例性地,可以通过poolleftnum的取值来判断,如果poolleftnum小于或等于0则可以认为歌曲池中的歌曲播放完毕,如果poolleftnum大于0则可以认为歌曲池中的歌曲未播放完毕。
[0199]
在步骤601的判断结果为是的情况下,执行步骤602:重置歌曲池。本技术实施例中,歌曲池重置后执行步骤603,重置歌曲池的具体方法可以参阅图5(b)的相关描述,这里不再赘述。
[0200]
在步骤601的判断结果为否的情况下,执行步骤603:将当前播放的歌曲的musicindex转换为元素偏移和比特位偏移,并基于元素偏移和比特位偏移将pool中对应的
比特位设置为0。
[0201]
本步骤中,将当前播放的歌曲的musicindex转换为元素偏移和比特位偏移,并将基于元素偏移和比特位偏移将pool中对应的比特位设置为0,可以理解为将当前播放的歌曲的播放状态记录为已播放状态。示例性地,可以通过pool[arrayindex]&=~1u《《bitindex将歌曲的播放状态记录为已播放状态。
[0202]
步骤603之后执行步骤604:将pooleftnum的取值减1。
[0203]
本技术实施例中,上述步骤603和上述604可以理解为对歌曲池的更新。
[0204]
605:还原歌曲池。
[0205]
可以理解,pool中记录歌曲的播放状态时是将musicindex转换为元素偏移和比特位偏移后得到的,本步骤还原歌曲池目的在于还原出歌曲本身的musicindex,从而得到未播放歌曲的musicindex。为便于理解,示例性地,请参阅图6(b),图6(b)是本技术实施例提供的一种还原歌曲池的流程示意图。本技术实施例中,还原得到的musicindex可以用数组randonpool来记录。示例性地,上述方法包括:
[0206]
6051:将randompoolindex设置为0。
[0207]
本实施例中,randompoolindex初始化为0,用于表示musicindex被还原的歌曲的数量。还原歌曲池的过程可以理解为双循环,该双循环包括外循环和内循环,外循环基于变量i进行,内循环基于变量j进行。其中,外循环的次数为pool数组包括的元素个数,即步骤6053中的歌曲总数/8+1,内循环的次数为pool中每个元素包括的比特位数量,即步骤6055中的8(数据结构中定义为1个字节,即8个比特位)。具体流程包括:
[0208]
6052:将i设置为0。
[0209]
6053:判断i是否小于歌曲池的歌曲总数/8+1。
[0210]
在步骤6053的判断结果为是的情况下,执行步骤6054:将j设置为0。
[0211]
步骤6054之后执行步骤6055:判断j是否小于8。
[0212]
在步骤6055的判断结果为是的情况下,执行步骤6057:判断pool[i]的第j位是否为1。
[0213]
在步骤6057的判断结果为是的情况下,执行步骤6058:令randompool[randompoolindex++]为i*8+(8-1)-j。
[0214]
本步骤中,i表征元素偏移,j表征比特位偏移,通过上述计算可以还原出musicindex,相当于前文“pool中利用比特位记录歌曲播放状态的方法”的逆运算。可以理解,计算出的musicindex保存在randompool中,并且计算完毕后会通过“randompoolindex++”将randompoolindex的取值加1。
[0215]
在步骤6057的判断结果为否的情况,执行步骤60510:j的取值加1。
[0216]
步骤6058执行完毕之后,执行步骤6059:判断randompoolindex是否小于poolleftnum。
[0217]
如果randompoolindex小于poolleftnum,可以认为歌曲池中剩余歌曲还有歌曲的musicindex未被还原,如果randompoolindex大于或等于poolleftnum,那么可以认为已经将歌曲池中剩余歌曲的musicindex还原完毕。
[0218]
因此,在步骤6059的判断结果为是的情况下,执行步骤60510:j的取值加1。本技术实施例中,步骤60510执行完之后重新执行步骤6055,可以理解为进入下一个内循环。
[0219]
在步骤6055的判断结果为否的情况下,执行步骤6056:i的取值加1。步骤6056执行完毕之后重新执行步骤6053,可以理解为进入下一个外循环。在步骤6053的判断结果为否的情况下,得到还原后的歌曲池randompool。
[0220]
另外,在步骤6059的判断结果为否的情况下,即randompoolindex大于或等于poolleftnum,那么可以认为已经将歌曲池中剩余歌曲的musicindex还原完毕,不需要继续遍历整个pool的元素,因此,可以退出循环,得到还原后的歌曲池randompool。
[0221]
可以理解,randompool中记录的是musicindex,即歌曲在歌曲列表中的排列位序。为便于理解上述还原过程,示例性地,假设歌单a中有11首歌曲(musicindex记录为0-10),正在播放歌单中第2首歌曲,经过图5(b)所示的方式初始化后,可以得到歌曲池的数据结构为:
[0222]
poolleftnum=11;pool内包括的元素为pool[0]=11111111、pool[1]=00000111;curplayindex=0;pooltotalnum=11;playorder包括的元素为playorder[0]=2,其余元素为0xffff。
[0223]
经过图6(a)中步骤601-步骤604后,得到更新后的歌曲池的数据结构为:
[0224]
poolleftnum=10;pool内包括的元素为pool[0]=11111101、pool[1]=00000111;curplayindex=0;pooltotalnum=11;playorder包括的元素为playorder[0]=2,其余元素为0xffff。相对于初始态,pool[0]中第2个比特位被置0,表示歌单中第2首歌已经播放过。
[0225]
经过图6(b)所示的方法还原歌曲池后可以得到randompool包括:7、6、5、4、3、2、0、10、9、8。容易理解,randompool中包括的是剩下未播放歌曲的musicindex,由于第2首歌已经播放过,所以musicindex不包括1。
[0226]
606:从还原后的歌曲池中随机确定一首歌曲。
[0227]
在还原歌曲池之后,基于未播放歌曲的musicindex即可确定出一首新的、未播放的歌曲。
[0228]
示例性地,基于剩下未播放歌曲的数量生成一个随机数,将该随机数作为偏移从randompool中确定下一首播放的歌曲。示例性地,randompool包括7、6、5、4、3、2、0、10、9、8共10首歌,那么从0-9中生成一个随机数,比如生成随机数2,那么下一首播放randompool中第2个musicindex的歌曲,即下一首播放musicindex为6的歌曲。
[0229]
607:播放该歌曲。
[0230]
本步骤与步骤502类似,歌曲播放模块可以从文件系统中获取歌曲的音频文件,进行歌曲播放。
[0231]
在一些实施例中,在确定好下一首随机播放的歌曲后,可以通过playorder记录歌曲的播放顺序。为便于理解,示例性地,请参阅图6(c),图6(c)是本技术实施例提供的另一种从歌曲池中确定歌曲随机播放的流程示意图,包括:
[0232]
609:根据切换操作确定curplayindex。
[0233]
可以理解,除了歌曲播放模块自动切歌进行随机播放以外,用户也可以控制歌曲播放次序,比如用户可以在当前歌曲未播放完之前就切下一首歌曲,用户也可以随时切换上一首歌曲进行播放。因此,切换操作可能是切换到下一首,也可能是切换到下一首。
[0234]
本技术实施例中,curplayindex用于记录当前播放的歌曲的播放次序,
curplayindex在curplayindex初始化后,切换上一首和切换下一首歌曲两种切换操作对curplayindex的影响不同,示例性地,在切换上一首的情况下,当前curplayindex可以通过以下方式确定:在curplayindex不为0的情况下设置为curplayindex-1,在curplayindex为0的情况下设置为pooltotalnum,具体可以通过运算(curplayindex!=0)?(curplayindex-1):pooltotalnum得到。又示例性地,在切换下一首的情况下,可以通过运算(curplayindex+1)%pooltotalnum得到。
[0235]
610:基于playorder[curplayindex]判断是否已经选定过歌曲。
[0236]
本技术实施例中,playorder用于记录一轮随机播放的播放顺序,在初始化过程中,每个元素被初始化为0xffff,选定歌曲播放后将该歌曲的musicindex记录到playorder中。因此,可以通过playorder[curplayindex]的取值判断是否已经选定过歌曲,示例性地,如果playorder[curplayindex]的取值为0xffff,则可以认为未选定过歌曲,可以从歌曲池中选定一首未播放过的歌曲进行播放,在playorder[curplayindex]的取值不为0xffff的情况下,则可以认为已经选定过歌曲。
[0237]
因此,在步骤610的判断结果为是的情况下,执行步骤611:播放该已经选定过的歌曲。
[0238]
在步骤610的判断结果为否的情况下,执行步骤601:判断歌曲池中的歌曲是否播放完毕。
[0239]
在步骤601的判断结果为是的情况下,执行步骤602:重置歌曲池。
[0240]
在步骤601的判断结果为是的情况下,执行步骤603:将当前播放的歌曲的musicindex转换为元素偏移和比特位偏移,并基于元素偏移和比特位偏移将pool中对应的比特位设置为0。
[0241]
步骤603之后执行步骤604:将pooleftnum的取值减1。
[0242]
605:还原歌曲池。
[0243]
606:从还原后的歌曲池中随机确定一首歌曲。
[0244]
步骤606之后执行步骤608:将该歌曲的musicindex记录到playorder[curplayindex]中。
[0245]
步骤608之后执行步骤607:播放该歌曲。
[0246]
本实施例中,有关步骤601-步骤607的相关描述可以参阅前文图6(a)和图6(b)的相关实施例,这里不再赘述。本实施例中,通过记录每轮随机播放中歌曲的播放顺序,在用户切换上一首歌曲播放时,能够正确退回到已经真正播放过的上一首歌曲,提高用户体验。
[0247]
为便于理解图6(c)所示的方法,示例性地,假设歌单a中有4首歌曲(musicindex记录为0-3),那么playorder数组数据包括0xffff、0xffff、0xffff、0xffff。如果播放的第1首歌曲是歌单a中的第4首歌,比如用户点击第4首歌曲播放,俺么playorder数据将变为:3、0xffff、0xffff、0xffff。
[0248]
如果在第4首歌曲播放过程中切换上一首,由于playorder[3]的取值0xffff表示未选定过歌曲,那么可以基于步骤601-步骤607从歌曲池中选定一首未播放过的歌曲,比如随机到歌单a中的第2首歌曲,那么playorder数据变为3、0xffff、0xffff、1。
[0249]
如果在第4首歌曲播放过程中切换到下一首,由于playorder[1]的取值0xffff表示未选定过歌曲,那么可以基于步骤601-步骤607从歌曲池中选定一首未播放过的歌曲,比
如随机到歌单a中的第2首歌曲,那么playorder数据变为3、1、0xffff、0xffff。在此基础上,如果在第2首歌曲播放过程中切换到上一首,由于playorder[0]的取值为3,那么可以直接播放musicindex为3的歌曲。
[0250]
可以理解,两轮随机播放的切换过程中,上一轮播放的最后一首歌会在初始化过程中记录为下一轮播放的第一首歌曲,然后从歌曲池中移除(即播放状态记录为0),因此,在下一轮播放过程中选择第1首随机播放的歌曲时会排除掉上一轮最后播放的歌曲,从而避免重复,提高用户体验。但是在下一轮播放过程中选择第2首随机播放的歌曲时需要将上一轮最后播放的歌曲添加到歌曲池中,因此,在一些实施例中,图6(c)所示的方法中,在情况一的触发下重置歌曲池后,步骤606之后,步骤607之前还包括:
[0251]
612:将上一轮最后播放的歌曲的musicindex换为元素偏移和比特位偏移,并基于元素偏移和比特位偏移将pool中对应的比特位设置为1。本步骤可以理解为将上一轮最后播放的歌曲的状态设置为未播放,以便于该歌曲参与本轮之后的歌曲随机过程。
[0252]
613:将poolleftnum的取值加1。
[0253]
为便于理解,示例性地,假设歌单a中有4首歌曲,当前有4首歌曲(musicindex记录为0-3)s0、s1、s2以及s3,本轮的随机播放顺序为s1、s0、s3、s2。当本轮最后的歌曲s2播放完毕切歌时,会触发重置歌曲池,s1、s0以及s3将用于选定下一轮播放的第1首歌曲。假设下一轮播放的第1首歌曲为s1,那么目前播放的歌曲的播放顺序为s1、s0、s3、s2、s1(下一轮播放的第1首歌曲)。经过上述步骤612和步骤613,即在下一轮播放的第1首歌曲(s1)播放之前先把上一轮最后播放的歌曲(s2)添加到歌曲池中,在s1播放完毕切歌时,s0、s2以及s3将用于下一轮播放的第2首歌曲。
[0254]
应理解,后续切歌过程中可以按照图6(c)执行。
[0255]
本技术实施例提供的方法,在需要切歌时才从歌曲池中选取未播放过的歌曲进行播放,也就是将随机动作分散到每一次切歌,可以分散性能损耗,避免重排播放顺序时卡顿,尤其是针对性能受限(比如穿戴设备)电子设备,可以提高性能。
[0256]
另外,本技术实施例提供的方法还可以节省歌曲池空间占用,且能记录歌曲播放顺序,且能保证每一轮播放都能播放每一首歌曲。
[0257]
本技术还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机代码,当计算机代码在计算机上运行时,使得计算机执行上述实施例的方法。
[0258]
本技术还提供一种芯片,包括逻辑电路和接口,上述逻辑电路和接口耦合;上述接口用于输入和/或输出代码指令,上述逻辑电路用于执行上述代码指令,以使上述实施例的方法中的方法被执行。
[0259]
本技术还提供一种计算机程序产品,该计算机程序产品包括计算机代码或计算机程序,当该计算机代码或计算机程序在计算机上运行时,使得上述实施例中的方法被执行。
[0260]
上述实施例中所用,根据上下文,术语“当
…
时”可以被解释为意思是“如果
…”
或“在
…
后”或“响应于确定
…”
或“响应于检测到
…”
。类似地,根据上下文,短语“在确定
…
时”或“如果检测到(所陈述的条件或事件)”可以被解释为意思是“如果确定
…”
或“响应于确定
…”
或“在检测到(所陈述的条件或事件)时”或“响应于检测到(所陈述的条件或事件)”。
[0261]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序
产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如dvd)、或者半导体介质(例如固态硬盘)等。
[0262]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:rom或随机存储记忆体ram、磁碟或者光盘等各种可存储程序代码的介质。
[0263]
还应理解,以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应当以上述权利要求的保护范围为准。
技术特征:
1.一种歌曲播放方法,其特征在于,应用于电子设备,所述电子设备的存储单元包括第一类存储单元和第二类存储单元,所述第一类存储单元的存取速度小于所述第二类存储单元的存取速度;所述方法包括:响应于歌曲播放操作,播放第一歌曲列表中的第一歌曲;将所述第一歌曲列表从所述第一类存储单元读取到所述第二类存储单元中;响应于切歌操作,从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲;所述第二歌曲为所述第一歌曲列表中一首未播放过的歌曲;播放所述第二歌曲。2.根据权利要求1所述的方法,其特征在于,所述第一歌曲列表在所述第二类存储单元中用第一数组记录,所述第一数组的比特位用于记录所述第一歌曲列表中的歌曲的播放状态。3.根据权利要求2所述的方法,其特征在于,所述第一数组为一维数组,所述第一数组中第m个元素的第n个比特位用于表示所述第一歌曲列表中排列位序为k的歌曲的播放状态;所述m为大于或等于0的整数,所述n为大于或等于0的整数,所述m等于所述k除以t,所述n等于所述k对所述t求余,所述t为所述第一数组中任一元素所占的比特位的数量。4.根据权利要求2或3所述的方法,其特征在于,在所述第一歌曲播放之前,所述第一歌曲列表中各个歌曲的播放状态被标记为未播放状态,所述从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲之前,所述方法还包括:在所述第一数组中将所述第一歌曲的播放状态修改为已播放状态。5.根据权利要求4所述的方法,其特征在于,所述响应于切歌操作,从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲,包括:响应于所述切歌操作,在所述第一数组中存在比特位为未播放状态的情况下,执行所述从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:在所述第一数组中的比特位均为已播放状态的情况下,重新执行所述将所述第一歌曲列表从所述第一类存储单元读取到所述第二类存储单元中。7.根据权利要求5或6所述的方法,其特征在于,所述第二类存储单元中还包括第二数组,所述第二数组用于存储歌曲的播放顺序,所述第二数组的元素为歌曲在所述第一歌曲列表中的排列次序,所述排列次序在所述第二数组中的位置与播放所述歌曲的播放次序对应;所述响应于所述切歌操作,在所述第一数组中的比特位记录有未播放状态的歌曲情况下,执行所述从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤,包括:响应于所述切歌操作确定歌曲的播放次序;在基于所述第二数组确定所述播放次序未对应有已播放歌曲,且所述第一数组中的比特位记录有未播放状态的歌曲的情况下,执行所述从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲步骤。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:在基于所述第二数组确定所述播放次序对应有已播放歌曲的情况下,重新播放所述已
播放歌曲。9.根据权利要求2-8中任一项所述的方法,其特征在于,所述从所述第二类存储单元存储的第一歌曲列表中确定第二歌曲,包括:基于所述第一数组中被标记为未播放状态的比特位确定所述第一歌曲列表中的未播放歌曲;从所述第一歌曲列表中的未播放歌曲中确定所述第二歌曲。10.根据权利要求9所述的方法,其特征在于,所述基于所述第一数组中被标记为未播放状态的比特位确定所述第一歌曲列表中未播放的歌曲,包括:基于参考比特位确定一首未播放歌曲在所述第一歌曲列表中的排列位序;所述参考比特位为所述第一数组中任一个被标记为未播放状态的比特位,所述排列位序等于x乘以所述t加上t-1-y之和,所述x为所述参考比特位所在的元素在所述第一数组中的位序,所述y为所述参考比特位在所占元素中的位序;基于所述第一数组中每个被标记为未播放状态的比特位确定的排列位序,得到所述第一歌曲列表中的未播放歌曲。11.一种电子设备,其特征在于,包括处理器、存储器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,使得如权利要求1-10中任一项所述的方法被执行。12.一种芯片,其特征在于,包括逻辑电路和接口,所述逻辑电路和接口耦合;所述接口用于输入和/或输出代码指令,所述逻辑电路用于执行所述代码指令,以使权利要求1-10中任一项所述的方法被执行。13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,使得如权利要求1-10中任一项所述的方法被执行。
技术总结
本申请实施例提供了歌曲播放方法及相关装置,本申请在需要对歌曲列表中的歌曲进行随机播放时,先从文件系统中将歌曲列表读取到内存中,并且在内存中记录歌曲列表中各个歌曲的播放情况。在后续随机播放过程中,根据内存中记录的各个歌曲的播放情况即可确定下一首播放的歌曲,由于在选择下一首播放歌曲时不需要与文件系统交互来获取歌曲列表信息和各个歌曲的播放情况,本申请可以减少随机播放过程中操作文件系统造成的性能损耗。操作文件系统造成的性能损耗。操作文件系统造成的性能损耗。
技术研发人员:洪培鑫
受保护的技术使用者:荣耀终端有限公司
技术研发日:2023.06.30
技术公布日:2023/9/23
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/