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'
|
const TAG = 'VoiceAnnounce'
|
||||||
|
|
||||||
|
interface Queue{
|
||||||
|
url: string,
|
||||||
|
callback?: Function
|
||||||
|
}
|
||||||
|
|
||||||
|
type PlayAudio = (urls: string[], shit?: boolean, callback?: Function) => Queue | void
|
||||||
|
|
||||||
export default class VoiceAnnounce {
|
export default class VoiceAnnounce {
|
||||||
//队列时候立马终止
|
//队列时候立马终止
|
||||||
private isStopped: Boolean
|
private isStopped: Boolean
|
||||||
private queue: {
|
private queue: Queue[]
|
||||||
url: string,
|
private newQueue: Queue[]
|
||||||
callback?: Function
|
|
||||||
}[]
|
|
||||||
private newQueue: {
|
|
||||||
url: string,
|
|
||||||
callback?: Function
|
|
||||||
}[]
|
|
||||||
private pendingQueue: String[]
|
private pendingQueue: String[]
|
||||||
private callback: Function;
|
private callback: Function;
|
||||||
|
|
||||||
@ -26,15 +27,18 @@ export default class VoiceAnnounce {
|
|||||||
this.queue = []
|
this.queue = []
|
||||||
}
|
}
|
||||||
|
|
||||||
async playAudio(urls: string[], shit?: boolean, callback?: Function) {
|
async playAudio(urls: string[], shit?: boolean, callbackFn?: Function) {
|
||||||
const { isStopped, queue } = this;
|
const isStopped = this.isStopped;
|
||||||
const tempUrls = urls.map((url, index) => {
|
const queue = this.queue;
|
||||||
return {
|
|
||||||
url,
|
const tempUrls: Queue[] = urls.map((url, index) => {
|
||||||
callback: (index === urls.length - 1) ? callback : undefined
|
const callback:Function|undefined = (index === urls.length - 1) ? callbackFn : undefined
|
||||||
}
|
const temp:Queue = {url, callback}
|
||||||
|
return temp
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (shit) {
|
if (shit) {
|
||||||
//队列清空,重新初始化
|
//队列清空,重新初始化
|
||||||
this.isStopped = true;
|
this.isStopped = true;
|
||||||
@ -53,7 +57,9 @@ export default class VoiceAnnounce {
|
|||||||
|
|
||||||
async executeQueue() {
|
async executeQueue() {
|
||||||
const go = async () => {
|
const go = async () => {
|
||||||
const { queue, isStopped, newQueue } = this;
|
const queue = this.queue;
|
||||||
|
const isStopped = this.isStopped;
|
||||||
|
const newQueue = this.newQueue;
|
||||||
const avPlayer = new AVPlayer();
|
const avPlayer = new AVPlayer();
|
||||||
if (isStopped) {
|
if (isStopped) {
|
||||||
//清空原来队列
|
//清空原来队列
|
||||||
@ -77,8 +83,7 @@ export default class VoiceAnnounce {
|
|||||||
|
|
||||||
|
|
||||||
class AVPlayer {
|
class AVPlayer {
|
||||||
public avPlayer: any = null;
|
public avPlayer?: media.AVPlayer;
|
||||||
|
|
||||||
private voiceUrl: string[];
|
private voiceUrl: string[];
|
||||||
private voiceStatus: 'completed' | 'playing'
|
private voiceStatus: 'completed' | 'playing'
|
||||||
private endCallback: Function
|
private endCallback: Function
|
||||||
@ -87,7 +92,7 @@ class AVPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例
|
// 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例
|
||||||
async play(name, callback) {
|
async play(name:string, callback:Function):Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
//检查SD中的语音
|
//检查SD中的语音
|
||||||
// console.info('surenjun name',name)
|
// console.info('surenjun name',name)
|
||||||
@ -123,7 +128,7 @@ class AVPlayer {
|
|||||||
this.avPlayer = await media.createAVPlayer();
|
this.avPlayer = await media.createAVPlayer();
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
await this.setAVPlayerCallback(() => {
|
await this.setAVPlayerCallback(() => {
|
||||||
resolve()
|
resolve(true)
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
const context: common.UIAbilityContext = AppStorage.get('context')
|
const context: common.UIAbilityContext = AppStorage.get('context')
|
||||||
@ -133,34 +138,28 @@ class AVPlayer {
|
|||||||
message: `${name}语音文件不存在`,
|
message: `${name}语音文件不存在`,
|
||||||
duration: 4000
|
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) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
const context = AppStorage.get('context')
|
const context = AppStorage.get<common.UIAbilityContext>('context')
|
||||||
const mediaLib = mediaLibrary.getMediaLibrary(context);
|
const mediaLib = mediaLibrary.getMediaLibrary(context);
|
||||||
let ret
|
let fileResult = await mediaLib.getFileAssets({
|
||||||
let fetchOp = {
|
|
||||||
selections: `media_type=? AND display_name = ?`,
|
selections: `media_type=? AND display_name = ?`,
|
||||||
selectionArgs: [`${mediaLibrary.MediaType.AUDIO}`, displayName],
|
selectionArgs: [`${mediaLibrary.MediaType.AUDIO}`, displayName],
|
||||||
};
|
});
|
||||||
let fileResult = await mediaLib.getFileAssets(fetchOp);
|
|
||||||
let retCount = fileResult.getCount();
|
let retCount = fileResult.getCount();
|
||||||
if (retCount > 0) {
|
if (retCount > 0) {
|
||||||
ret = await fileResult.getFirstObject();
|
let ret = await fileResult.getFirstObject();
|
||||||
return resolve(ret);
|
return resolve(ret);
|
||||||
} else {
|
} else {
|
||||||
return reject(false);
|
return reject(false);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//音频播放队列
|
//音频播放队列
|
||||||
@ -175,7 +174,7 @@ class AVPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 注册avplayer回调函数
|
// 注册avplayer回调函数
|
||||||
setAVPlayerCallback(callBack) {
|
setAVPlayerCallback(callBack:Function) {
|
||||||
this.avPlayer.on('error', (err) => {
|
this.avPlayer.on('error', (err) => {
|
||||||
this.avPlayer && this.avPlayer.stop()
|
this.avPlayer && this.avPlayer.stop()
|
||||||
this.avPlayer && this.avPlayer.reset()
|
this.avPlayer && this.avPlayer.reset()
|
||||||
@ -185,7 +184,7 @@ class AVPlayer {
|
|||||||
let num = 0;
|
let num = 0;
|
||||||
// 状态机变化回调函数
|
// 状态机变化回调函数
|
||||||
this.avPlayer.on('stateChange', async (state, reason) => {
|
this.avPlayer.on('stateChange', async (state, reason) => {
|
||||||
const { endCallback } = this;
|
const endCallback = this.endCallback;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 'idle': // 成功调用reset接口后触发该状态机上报
|
case 'idle': // 成功调用reset接口后触发该状态机上报
|
||||||
break;
|
break;
|
||||||
Loading…
x
Reference in New Issue
Block a user