From e51f80f7831376647956152062e86a5efd0b22cf Mon Sep 17 00:00:00 2001 From: Surenjun Date: Thu, 27 Mar 2025 11:32:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20voiceAnnouncements.ets=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nnouncements.ts => voiceAnnouncements.ets} | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) rename entry/src/main/ets/pages/judgeSDK/utils/{voiceAnnouncements.ts => voiceAnnouncements.ets} (83%) diff --git a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ts b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets similarity index 83% rename from entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ts rename to entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets index 0f8cbaaf..702abd1e 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets @@ -7,17 +7,18 @@ import common from '@ohos.app.ability.common'; const TAG = 'VoiceAnnounce' +interface Queue{ + url: string, + callback?: Function +} + +type PlayAudio = (urls: string[], shit?: boolean, callback?: Function) => Queue | void + export default class VoiceAnnounce { //队列时候立马终止 private isStopped: Boolean - private queue: { - url: string, - callback?: Function - }[] - private newQueue: { - url: string, - callback?: Function - }[] + private queue: Queue[] + private newQueue: Queue[] private pendingQueue: String[] private callback: Function; @@ -26,15 +27,18 @@ export default class VoiceAnnounce { this.queue = [] } - async playAudio(urls: string[], shit?: boolean, callback?: Function) { - const { isStopped, queue } = this; - const tempUrls = urls.map((url, index) => { - return { - url, - callback: (index === urls.length - 1) ? callback : undefined - } + async playAudio(urls: string[], shit?: boolean, callbackFn?: Function) { + const isStopped = this.isStopped; + const queue = this.queue; + + const tempUrls: Queue[] = urls.map((url, index) => { + const callback:Function|undefined = (index === urls.length - 1) ? callbackFn : undefined + const temp:Queue = {url, callback} + return temp }); + + if (shit) { //队列清空,重新初始化 this.isStopped = true; @@ -53,7 +57,9 @@ export default class VoiceAnnounce { async executeQueue() { const go = async () => { - const { queue, isStopped, newQueue } = this; + const queue = this.queue; + const isStopped = this.isStopped; + const newQueue = this.newQueue; const avPlayer = new AVPlayer(); if (isStopped) { //清空原来队列 @@ -77,8 +83,7 @@ export default class VoiceAnnounce { class AVPlayer { - public avPlayer: any = null; - + public avPlayer?: media.AVPlayer; private voiceUrl: string[]; private voiceStatus: 'completed' | 'playing' private endCallback: Function @@ -87,7 +92,7 @@ class AVPlayer { } // 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例 - async play(name, callback) { + async play(name:string, callback:Function):Promise { try { //检查SD中的语音 // console.info('surenjun name',name) @@ -123,7 +128,7 @@ class AVPlayer { this.avPlayer = await media.createAVPlayer(); return new Promise(async (resolve, reject) => { await this.setAVPlayerCallback(() => { - resolve() + resolve(true) }); try { const context: common.UIAbilityContext = AppStorage.get('context') @@ -133,34 +138,28 @@ class AVPlayer { message: `${name}语音文件不存在`, duration: 4000 }); - resolve(1) + resolve(true) } }) } - - } - async queryFile(displayName): Promise { + async queryFile(displayName:string): Promise { return new Promise(async (resolve, reject) => { - const context = AppStorage.get('context') + const context = AppStorage.get('context') const mediaLib = mediaLibrary.getMediaLibrary(context); - let ret - let fetchOp = { + let fileResult = await mediaLib.getFileAssets({ selections: `media_type=? AND display_name = ?`, selectionArgs: [`${mediaLibrary.MediaType.AUDIO}`, displayName], - }; - let fileResult = await mediaLib.getFileAssets(fetchOp); + }); let retCount = fileResult.getCount(); if (retCount > 0) { - ret = await fileResult.getFirstObject(); + let ret = await fileResult.getFirstObject(); return resolve(ret); } else { return reject(false); } }) - - } //音频播放队列 @@ -175,7 +174,7 @@ class AVPlayer { } // 注册avplayer回调函数 - setAVPlayerCallback(callBack) { + setAVPlayerCallback(callBack:Function) { this.avPlayer.on('error', (err) => { this.avPlayer && this.avPlayer.stop() this.avPlayer && this.avPlayer.reset() @@ -185,7 +184,7 @@ class AVPlayer { let num = 0; // 状态机变化回调函数 this.avPlayer.on('stateChange', async (state, reason) => { - const { endCallback } = this; + const endCallback = this.endCallback; switch (state) { case 'idle': // 成功调用reset接口后触发该状态机上报 break;