源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

182 lines
4.7 KiB

VoiceVo = VoiceVo or BaseClass()
function VoiceVo:__init()
end
function VoiceVo:__defineVar()
return {
voice_id = 0,
voice_path = nil,
voice_data = nil,
voice_clip = nil,
is_loading = nil,
abort_play = nil,
last_play_start_time = nil,
}
end
function VoiceVo:IsPlaying()
if not self.last_play_start_time then return false end
local leftTime = self.voice_clip.length - Status.NowTime + self.last_play_start_time
if leftTime <= 0 then
return false
else
return leftTime
end
end
function VoiceVo:Play()
if SystemRuntimePlatform.IsWindows() then
return
end
if self.is_loading then return end
if self.voice_clip and self.voice_clip.length ~= 0 then
self.last_play_start_time = Status.NowTime
ChatVoiceManager:getInstance():PlayAudioClip(self.voice_id, self.voice_clip)
elseif self.voice_data and (not self.voice_clip or self.voice_clip.length ~= 0) then
lua_soundM:CreateAudioClip(self.voice_data, ChatVoiceManager:getInstance():GetVoiceVersion(self.voice_id), function(ac)
if self.abort_play then
self.abort_play = nil
return
end
if self._use_delete_method then
return
end
if ac and ac ~= -1 then
self.voice_clip = ac
self:Play()
else
print("Generate audioclip by data failed!!!")
end
end)
if self.voice_clip and not self._use_delete_method then
self:Play()
end
elseif self.voice_path then
local mp3Path
if AppConst.DebugMode and not Application.isMobilePlatform then
mp3Path = self.voice_path
else
mp3Path = string.gsub(self.voice_path, ".wav", ".mp3")
SDKUtil.CallSDKFunc("ChatSpeaker", "Convert", {wavPath = self.voice_path, mp3Path = mp3Path})
end
self.is_loading = true
self:StartLoadingChecker()
local function onLoadVoiceCallback(ac)
self:StopLoadingChecker()
self.is_loading = nil
if self.abort_play then
self.abort_play = nil
return
end
if self._use_delete_method then
return
end
if ac and ac ~= -1 then
if ac.length >= 1 then
self.voice_clip = ac
self.voice_data = data
self:Play()
else
self.voice_clip = nil
self.voice_data = nil
Message.show("录音时间太短了!")
end
else
print("load audioclip failed!!")
end
end
lua_soundM:LoadVoice(mp3Path, onLoadVoiceCallback)
elseif self.voice_clip and self.voice_clip.length == 0 then
ChatVoiceManager:getInstance():PlayAudioClip(self.voice_id, self.voice_clip)
else
print("---------------VoiceVo play error--------------")
end
end
function VoiceVo:SetVoiceData(voice_id, voice_data)
self.voice_id = voice_id
self.voice_data = voice_data
end
function VoiceVo:GetVoiceData(callback)
if self.is_loading then return end
if self.voice_path then
local mp3Path
if AppConst.DebugMode and not Application.isMobilePlatform then
mp3Path = self.voice_path
else
mp3Path = string.gsub(self.voice_path, ".wav", ".mp3")
SDKUtil.CallSDKFunc("ChatSpeaker", "Convert", {wavPath = self.voice_path, mp3Path = mp3Path})
end
self.is_loading = true
self:StartLoadingChecker()
local function onLoadVoiceCallback(ac, data)
local cModel = ChatModel:getInstance()
self:StopLoadingChecker()
cModel.loading_voice = nil
self.is_loading = nil
if self._use_delete_method then
return
end
if ac and ac ~= -1 then
if ac.length >= 1 then
self.voice_clip = ac
self.voice_data = data
if callback then
callback(self.voice_data, self.voice_clip.length)
if cModel.end_speech_data and cModel.end_speech_data ~= "" then
Message.show(cModel.end_speech_data)
end
end
else
self.voice_clip = nil
self.voice_data = nil
Message.show("录音时间太短了!")
end
else
print("Load Voice Failed!!!")
end
cModel.end_speech_data = nil
end
lua_soundM:LoadVoice(mp3Path, onLoadVoiceCallback)
else
print("Can't not load data from a nil voice path!!")
end
end
function VoiceVo:StartLoadingChecker()
self:StopLoadingChecker()
ChatModel:getInstance().timer_loading = GlobalTimerQuest:AddPeriodQuest(function()
ChatModel:getInstance().loading_voice = nil
self.abort_play = nil
print("Generate voice data overtime!!")
end, 3, 1)
end
function VoiceVo:StopLoadingChecker()
if ChatModel:getInstance().timer_loading then
GlobalTimerQuest:CancelQuest(ChatModel:getInstance().timer_loading)
end
end
function VoiceVo:Stop()
if self.is_loading then
self.abort_play = true
else
ChatVoiceManager:getInstance():StopAudioClip(self.voice_id, self.voice_clip)
end
end
function VoiceVo:CheckCanDelete()
if self.last_play_start_time and Status.NowTime - self.last_play_start_time > 10 then
return true
end
return false
end
function VoiceVo:__delete()
self:Stop()
soundMgr:StopVoice(self.voice_id, self.voice_clip)
self.voice_data = nil
self.voice_clip = nil
end