初版
This commit is contained in:
@@ -0,0 +1,290 @@
|
||||
--[[
|
||||
@apiDefine MusicGroup music
|
||||
--]]
|
||||
music = {}
|
||||
|
||||
|
||||
-- 默认播放模式
|
||||
music.play_mode = DB.MUSIC_PLAY_MODE_FCYCLE_ONE;
|
||||
|
||||
-- 默认播放设备
|
||||
music.play_device = DB.MUSIC_PLAY_DEVICE_WATCH;
|
||||
|
||||
-- 默认播放状态
|
||||
music.play_status = DB.MUSIC_PLAY_STATE_STOP;
|
||||
|
||||
-- 模拟音乐路径
|
||||
music.music_path = nil;
|
||||
|
||||
-- 模拟文件簇号
|
||||
music.music_sclust = 1;
|
||||
|
||||
|
||||
|
||||
-- 模拟音乐列表
|
||||
local simulationMusicList = {
|
||||
"刘德华 - 奉陪到底",
|
||||
"王靖雯不胖 - 善变",
|
||||
"Camila Cabello - Don't Go Yet",
|
||||
"韩小欠 - 一开始说陪你到老的人现在他还在吗(DJheap九天版)",
|
||||
"来一碗老于 - 解药",
|
||||
"The Kid LAROI、Justin BieBer - Stay(Explicit)",
|
||||
"我是土豆 - 云压雨",
|
||||
"房东的猫 - New Boy",
|
||||
"IN-K、王忻辰、苏星婕 - 落日与晚风"
|
||||
}
|
||||
|
||||
|
||||
music.music_list = simulationMusicList;
|
||||
music.music_number = #music.music_list;
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
@api {SET} music:controlMusicPlay(cmd,[sclust]) 音乐播放控制
|
||||
@apiName controlMusicPlay()
|
||||
@apiGroup MusicGroup
|
||||
@apiVersion 1.0.0
|
||||
@apiDescription 控制音乐播放、暂停、上一曲、下一曲等
|
||||
|
||||
@apiParam (命令参数) {number} DB.MUSIC_PLAY_START 开始播放音乐
|
||||
@apiParam (命令参数) {number} DB.MUSIC_PLAY_STOP 暂停播放音乐
|
||||
@apiParam (命令参数) {number} DB.MUSIC_PLAY_LAST 播放上一曲
|
||||
@apiParam (命令参数) {number} DB.MUSIC_PLAY_NEXT 播放下一曲
|
||||
@apiParam (命令参数) {number} DB.MUSIC_PLAY_INDEX 播放指定音乐
|
||||
@apiParam (可选参数) {number} [sclust] 音乐文件簇,仅MUSIC_PLAY_INDEX命令下必须传入,其它命令无需此参数。这个参数可以通过获取音乐列表获取
|
||||
|
||||
@apiParamExample 示例:
|
||||
-- 开始播放音乐
|
||||
music:controlMusicPlay(DB.MUSIC_PLAY_START)
|
||||
|
||||
-- 暂停播放音乐
|
||||
music:controlMusicPlay(DB.MUSIC_PLAY_STOP)
|
||||
|
||||
music:controlMusicPlay(DB.MUSIC_PLAY_LAST) -- 播放上一曲
|
||||
music:controlMusicPlay(DB.MUSIC_PLAY_NEXT) -- 播放下一曲
|
||||
|
||||
-- 播放指定音乐,sclust为指定音乐的文件簇
|
||||
music:controlMusicPlay(DB.MUSIC_PLAY_INDEX, sclust)
|
||||
|
||||
@apiSuccessExample {number} 成功响应:
|
||||
成功控制音乐播放
|
||||
|
||||
@apiErrorExample {number} 失败响应:
|
||||
音乐播放控制异常
|
||||
]]
|
||||
function music:controlMusicPlay(cmd, index)
|
||||
if (cmd == DB.MUSIC_PLAY_START) then
|
||||
self.play_status = DB.MUSIC_PLAY_STATE_STARTING;
|
||||
elseif (cmd == DB.MUSIC_PLAY_INDEX) then
|
||||
if (index < 1) or (index > self.music_number) then
|
||||
log:e("error music index: "..tostring(index))
|
||||
return
|
||||
end
|
||||
self.music_sclust = index
|
||||
elseif (cmd == DB.MUSIC_PLAY_PAUSE) then
|
||||
self.play_status = DB.MUSIC_PLAY_STATE_STOP;
|
||||
elseif (cmd == DB.MUSIC_PLAY_STOP) then
|
||||
self.play_status = DB.MUSIC_PLAY_STATE_STOP;
|
||||
elseif (cmd == DB.MUSIC_PLAY_LAST) then
|
||||
self.play_status = DB.MUSIC_PLAY_STATE_STARTING;
|
||||
if (self.play_mode == DB.MUSIC_PLAY_MODE_FCYCLE_RANDOM) then
|
||||
self.music_sclust = math.random(1, self.music_number);
|
||||
else
|
||||
self.music_sclust = self.music_sclust - 1
|
||||
if (self.music_sclust < 1) then
|
||||
self.music_sclust = self.music_number;
|
||||
end
|
||||
end
|
||||
elseif (cmd == DB.MUSIC_PLAY_NEXT) then
|
||||
self.play_status = DB.MUSIC_PLAY_STATE_STARTING;
|
||||
if (self.play_mode == DB.MUSIC_PLAY_MODE_FCYCLE_RANDOM) then
|
||||
self.music_sclust = math.random(1, self.music_number);
|
||||
else
|
||||
self.music_sclust = self.music_sclust + 1
|
||||
if (self.music_sclust > self.music_number) then
|
||||
self.music_sclust = 1;
|
||||
end
|
||||
end
|
||||
elseif (cmd == DB.MUSIC_PLAY_DELETE) then
|
||||
log:i("Sorry, we can't delete music yet");
|
||||
end
|
||||
log:d("controlMusicPlay, cmd: "..tostring(self.play_mode)..", music index: "..tostring(self.play_status))
|
||||
sys:runHandler("music_status", "status", self.play_status);
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
@api {GET} music_list=music:loadMusicList(start,end) 加载音乐列表
|
||||
@apiName loadMusicList()
|
||||
@apiGroup MusicGroup
|
||||
@apiVersion 1.0.0
|
||||
@apiDescription 扫描SD卡中的MP3文件,并生成文件列表table
|
||||
|
||||
@apiParam {number} start 需要获取的音乐列表开始索引
|
||||
@apiParam {number} end 需要获取的音乐列表结束索引
|
||||
|
||||
@apiParamExample 示例:
|
||||
music_list = music:loadMusicList(1, 5) -- 扫描第1个开始,到第5个结束的MPA文件
|
||||
music_num = #music_list -- 计算获取到的MP3文件数量
|
||||
for i=1, music_num do
|
||||
print(music_list[i].name) -- 逐个打印音乐名称
|
||||
end
|
||||
|
||||
@apiSuccess (返回值) {table{name,len,sclust,dir_type,fn}} music_list 获取到的音乐列表
|
||||
@apiSuccess (music_list) {string} name 文件名称
|
||||
@apiSuccess (music_list) {number} len 文件名长度
|
||||
@apiSuccess (music_list) {number} sclust 件簇号
|
||||
@apiSuccess (music_list) {number{0,1}} dir_type 文件类型,文件或文件夹
|
||||
@apiSuccess (music_list) {number{0,1}} fn 长文件名或短文件名
|
||||
|
||||
@apiSuccessExample {number} 成功响应:
|
||||
成功获取音乐列表
|
||||
|
||||
@apiErrorExample {number} 失败响应:
|
||||
API返回nil
|
||||
]]
|
||||
function music:loadMusicList()
|
||||
local music_list = {}
|
||||
if (self.music_path) then
|
||||
-- 如果有指定路径,扫描路径中的文件模拟
|
||||
else
|
||||
-- 否则用模拟音乐列表作为列表返回
|
||||
local music_table = simulationMusicList;
|
||||
local music_number = #music_table;
|
||||
for i = 1, music_number do
|
||||
local music = {};
|
||||
music.name = music_table[i];
|
||||
music.len = #music_table[i];
|
||||
music.sclust = i;
|
||||
music.dir_type = DB.DIR_TYPE_FILE;
|
||||
music.fn = 0;
|
||||
table.insert(music_list, music);
|
||||
end
|
||||
end
|
||||
return music_list;
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
@api {SET} music:freeMusicList(music_list) 释放音乐列表
|
||||
@apiName freeMusicList()
|
||||
@apiGroup MusicGroup
|
||||
@apiVersion 1.0.0
|
||||
@apiDescription 释放从loadMusicList获取到的音乐列表
|
||||
|
||||
@apiParam {table} music_list 从loadMusicList方法获取到的音乐列表
|
||||
|
||||
@apiParamExample 示例:
|
||||
music_list = music:loadMusicList(1, 5) -- 扫描第1个开始,到第5个结束的MPA文件
|
||||
music_num = #music_list -- 计算获取到的MP3文件数量
|
||||
for i=1, music_num do
|
||||
print(music_list[i].name) -- 逐个打印音乐名称
|
||||
end
|
||||
music:freeMusicList(music_list) -- 释放music_list
|
||||
|
||||
@apiSuccessExample {number} 成功响应:
|
||||
music_list.name内存被成功释放
|
||||
|
||||
@apiErrorExample {number} 失败响应:
|
||||
music_list.name内存未被成功释放,最后可能导致内存溢出
|
||||
]]
|
||||
function music:freeMusicList(music_table)
|
||||
local music_number = #music_table;
|
||||
if music_number > 1 then
|
||||
for i = 1, music_number do
|
||||
-- for k, v in pairs(music_table[i]) do
|
||||
log:d("free music name: " .. music_table[i].name)
|
||||
-- end
|
||||
end
|
||||
else
|
||||
for k, v in pairs(music_table[1]) do
|
||||
log:d("free music name: " .. music_table[1].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
@api {GET} name,dev,mode,status=music:getMusicPlayInfo([only_get_name]) 获取播放器信息
|
||||
@apiName getMusicPlayInfo()
|
||||
@apiGroup MusicGroup
|
||||
@apiVersion 1.0.0
|
||||
@apiDescription 获取播放器信息,如音乐名称、播放设备、播放模式、播放状态等
|
||||
@apiParam (可选参数) {number{DB.MUSIC_GET_NAME_BY_INFO}} [only_get_name] 仅获取歌曲名称,可以节省lua内部压栈操作,缩短操作时间
|
||||
|
||||
@apiParamExample 示例:
|
||||
-- 一次获取所有播放信息
|
||||
music_name, play_dev, play_mode, play_status = music:getMusicPlayInfo()
|
||||
|
||||
-- 仅获取歌曲名称
|
||||
music_name = music:getMusicPlayInfo(DB.MUSIC_GET_NAME_BY_INFO)
|
||||
|
||||
@apiSuccessExample {number} 成功响应:
|
||||
成功获取所需信息
|
||||
|
||||
@apiErrorExample {number} 失败响应:
|
||||
获取到信息为nil
|
||||
]]
|
||||
function music:getMusicPlayInfo(get_cur_name)
|
||||
if (get_cur_name == DB.MUSIC_GET_NAME_BY_INFO) then
|
||||
return self.music_list[self.music_sclust]
|
||||
end
|
||||
return self.music_list[self.music_sclust], self.play_device, self.play_mode, play_status
|
||||
end
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
@api {SET} music:setMusicPlayInfo(mode,device) 设置播放信息
|
||||
@apiName setMusicPlayInfo()
|
||||
@apiGroup MusicGroup
|
||||
@apiVersion 1.0.0
|
||||
@apiDescription 设置播放器设备、模式等
|
||||
|
||||
@apiParam {number{nil,DB.MUSIC_PLAY_MODE_FCYCLE_ONE,DB.MUSIC_PLAY_MODE_FCYCLE_ALL,DB.MUSIC_PLAY_MODE_FCYCLE_RANDOM}} mode 播放模式
|
||||
@apiParam {number{nil,DB.MUSIC_PLAY_DEVICE_PHONE,DB.MUSIC_PLAY_DEVICE_WATCH,DB.MUSIC_PLAY_DEVICE_EARPHONE}} device 播放设备
|
||||
|
||||
@apiParamExample 示例:
|
||||
-- 同时设置播放手表音乐和循环播放模式
|
||||
music:setMusicPlayInfo(DB.MUSIC_PLAY_MODE_FCYCLE_ONE, DB.MUSIC_PLAY_DEVICE_WATCH)
|
||||
|
||||
-- 仅设置播放手机音乐
|
||||
music:setMusicPlayInfo(nil, DB.MUSIC_PLAY_DEVICE_PHONE)
|
||||
|
||||
-- 仅设置列表循环模式播放
|
||||
music:setMusicPlayInfo(DB.MUSIC_PLAY_MODE_FCYCLE_ALL, nil)
|
||||
|
||||
@apiSuccessExample {number} 成功响应:
|
||||
音乐播放设置正常
|
||||
|
||||
@apiErrorExample {number} 失败响应:
|
||||
音乐播放设置异常
|
||||
]]
|
||||
function music:setMusicPlayInfo(music_mode, music_device)
|
||||
self.play_mode = music_mode;
|
||||
self.play_device = music_device;
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return music
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user