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