feat: voiceAnnouncements.ets修改

This commit is contained in:
Surenjun 2025-03-27 11:32:24 +08:00
parent 53bfef994e
commit e51f80f783

View File

@ -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<boolean> {
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<mediaLibrary.FileAsset> {
async queryFile(displayName:string): Promise<mediaLibrary.FileAsset> {
return new Promise(async (resolve, reject) => {
const context = AppStorage.get('context')
const context = AppStorage.get<common.UIAbilityContext>('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;