feat: voiceAnnouncements.ets修改
This commit is contained in:
parent
53bfef994e
commit
e51f80f783
@ -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;
|
||||
Loading…
x
Reference in New Issue
Block a user