当前位置: 首页 > news >正文

模板网站如何大量复制上线市场调研方案怎么写

模板网站如何大量复制上线,市场调研方案怎么写,成都网站建设龙兵科技,手机移动网站开发flutter开发实战-实现音效soundpool播放音频 最近开发过程中遇到低配置设备时候,在Media播放音频时候出现音轨限制问题。所以将部分音频采用音效sound来播放。 一、音效类似iOS中的Sound 在iOS中使用sound来播放mp3音频示例如下 // 通过通知的Sound设置为voip_c…

flutter开发实战-实现音效soundpool播放音频

最近开发过程中遇到低配置设备时候,在Media播放音频时候出现音轨限制问题。所以将部分音频采用音效sound来播放。

一、音效类似iOS中的Sound

在iOS中使用sound来播放mp3音频示例如下

// 通过通知的Sound设置为voip_call.caf,这里播放一段空白音频,音频结束后结束震动NSString *path = [[NSBundle mainBundle] pathForResource:@"blank_call.mp3" ofType:nil];AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundID);AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, soundCompleteCallback, NULL);
[self startShakeSound];
/// 开始播放与震动
- (void)startShakeSound {// 声音AudioServicesPlaySystemSound(soundID);// 震动AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
/// 结束播放与震动
- (void)stopShakeSound {AudioServicesDisposeSystemSoundID(soundID);AudioServicesRemoveSystemSoundCompletion(soundID);
}
//AudioServicesAddSystemSoundCompletion的回调函数
void soundCompleteCallback(SystemSoundID sound,void * clientData) {if (sound == kSystemSoundID_Vibrate) {AudioServicesPlayAlertSound(sound);//重复响铃震动} else {// 移除AudioServicesDisposeSystemSoundID(sound);AudioServicesRemoveSystemSoundCompletion(sound);AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate);AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);}
}

在iOS中通过soundID,可以控制播放与暂停,当然iOS中sound播放完成有通知回调callback。soundpool暂时没找到播放完成回调callback。

二、使用soundpool播放音频

2.1、引入soundpool

在pubspec.yaml中引入

soundpool: ^2.3.0

2.2、使用soundpool来播放音频

Soundpool的初始化要用到SoundpoolOptions

SoundpoolOptions soundpoolOptions = SoundpoolOptions();
_soundpool = Soundpool.fromOptions(options: soundpoolOptions);
_soundId = await _soundpool!.loadUri(url);

播放控制需要使用AudioStreamControl,比如播放、暂停、停止、设置音量等控制操作

  • 播放
_audioStreamControl = await _soundpool!.playWithControls(_soundId!);
  • 暂停
await _audioStreamControl!.pause();
  • 停止
await _audioStreamControl!.stop();
  • 设置音量
await _audioStreamControl!.setVolume(volume: volume);

2.3、通过播放时长控制是否可以再次播放

由于soundpool没有播放音频完成回调,这里采用通过Media将音频时长获取到之后判断时间。判断当前播放时间与上次播放的时间间隔是否超过了音频时长Duration。

if (lastPlayMilliseconds == null) {lastPlayMilliseconds = TimeUtil.currentTimeMillis();_audioStreamControl = await _soundpool!.playWithControls(_soundId!);} else {int nowMilliseconds = TimeUtil.currentTimeMillis();bool shouldPlay = true;if (audioDurationInMilliseconds != null) {if (nowMilliseconds - lastPlayMilliseconds! <audioDurationInMilliseconds!) {shouldPlay = false;}}if (shouldPlay) {// 如果上次没有播放完成,不进行播放// 通过判断播放时长_audioStreamControl = await _soundpool!.playWithControls(_soundId!);lastPlayMilliseconds = nowMilliseconds;}}

整体使用soundpool播放音频的相关代码如下

import 'package:soundpool/soundpool.dart';// 使用SoundPool
class SoundPlayer implements BaseAudioPlayer {// AudioStreamControl// SoundpoolSoundpool? _soundpool;String? audioUrl;// 上次播放时长的毫秒数int? lastPlayMilliseconds;// 时长int? audioDurationInMilliseconds;// 优先级late AudioConfig __audioConfig;late bool _playing = false; // 是否正在播放int? _soundId;AudioStreamControl? _audioStreamControl;SoundPlayer(this.__audioConfig, {Duration? duration}) {if (duration != null) {audioDurationInMilliseconds = duration!.inMilliseconds;}print("SoundPlayer audioDurationInMilliseconds:${audioDurationInMilliseconds}");SoundpoolOptions soundpoolOptions = SoundpoolOptions();_soundpool = Soundpool.fromOptions(options: soundpoolOptions);setAudioUrl(__audioConfig.audioUrl);}Future<void> setAudioUrl(String url) async {if (_soundpool != null) {_soundId = await _soundpool!.loadUri(url);}}AudioConfig get_audioConfig() {return __audioConfig;}void play() async {// Usually you don't want to wait for playback to finish.if (__audioConfig.audioUrl != null &&__audioConfig.audioUrl.isNotEmpty &&_soundId != null &&_soundpool != null) {if (lastPlayMilliseconds == null) {lastPlayMilliseconds = TimeUtil.currentTimeMillis();_audioStreamControl = await _soundpool!.playWithControls(_soundId!);} else {int nowMilliseconds = TimeUtil.currentTimeMillis();bool shouldPlay = true;if (audioDurationInMilliseconds != null) {if (nowMilliseconds - lastPlayMilliseconds! <audioDurationInMilliseconds!) {shouldPlay = false;}}if (shouldPlay) {// 如果上次没有播放完成,不进行播放// 通过判断播放时长_audioStreamControl = await _soundpool!.playWithControls(_soundId!);lastPlayMilliseconds = nowMilliseconds;}}}}void pause() async {if (__audioConfig.audioUrl != null &&__audioConfig.audioUrl.isNotEmpty &&_audioStreamControl != null) {try {await _audioStreamControl!.pause();} catch(e) {print("audioStreamControl pause e:${e.toString()}");}}}void stop() async {if (__audioConfig.audioUrl != null &&__audioConfig.audioUrl.isNotEmpty &&_audioStreamControl != null) {try {await _audioStreamControl!.stop();} catch(e) {print("audioStreamControl stop e:${e.toString()}");}}}void setVolume(double volume) async {if (__audioConfig.audioUrl != null &&__audioConfig.audioUrl.isNotEmpty &&_audioStreamControl != null) {try {await _audioStreamControl!.setVolume(volume: volume);} catch(e) {print("audioStreamControl setVolume e:${e.toString()}");}}}// 不需要该播放器,则需要调用该方法void dispose() {if (_soundpool != null) {_soundpool!.dispose();}}
}

三、小结

flutter开发实战-实现音效soundpool播放音频及控制播放、暂停、停止、设置音量等控制操作。

学习记录,每天不停进步。

http://www.ritt.cn/news/25599.html

相关文章:

  • 制作自己的网站学校外贸seo优化公司
  • 网站免费软件推荐网络公司优化关键词
  • 测量为什么要建站互联网营销策划是做什么的
  • 有api对接文档怎么做网站aso推广平台
  • 如何获取所有网站福州seo按天收费
  • 做微网站的第三方武汉网站seo
  • 做电气的什么招聘网站好商丘seo外包
  • 哪个网站有淘宝做图的素材站优云seo优化
  • 微信公众号开发网站开发点金推广优化公司
  • 河南火焰山网站开发禹最权威的品牌排行榜网站
  • 做国际网站有什么需要注意的最近一周新闻热点大事件
  • 黔南服务好的高端网站设计公司打开百度浏览器
  • 可以制作什么网站爱用建站
  • wordpress初始密码seo网站页面优化包含
  • 做网站不会P图怎么办交易平台官网
  • 网站片头动画用什么软件做的seo研究中心怎么了
  • 编程教学入门教程关键词排名优化公司外包
  • 冷色网站广州seo工资
  • 好的免费博客网站百度统计代码安装位置
  • 金华网站建设开发app制作
  • 购物网站用模板好不好网络seo哈尔滨
  • 那些网站可做代购seo网站有优化培训班吗
  • 用vs做网站 怎么安装怎么推广平台
  • 政府部门网站集约化建设方案免费产品推广软件
  • php中英文网站源码福建seo推广方案
  • 网站建设的前后台代码如何设计网站步骤
  • WordPress怎么新建导航菜单成都官网seo服务
  • 中山市城乡和住房建设局网站爱链接购买链接
  • 蒙古文网站建设工作计划北京seo公司wyhseo
  • 怀化网页seo实战密码第三版pdf