Avalonia跨平台入门第十九篇之语音播放

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送;今天趁着大周末的时间接着去摸索语音的播放效果,最终实现的效果:

c145e98c47c833e93d21bd2f9b7b2f7e.gif

播放语音使用了OpenAL:

public static void PlayVoice(string filename)
{using(AudioContext context = new AudioContext()){int buffer = AL.GenBuffer();int source = AL.GenSource();int state;int channels, bits_per_sample, sample_rate;byte[] sound_data = LoadWave(File.Open(filename, FileMode.Open), out channels, out bits_per_sample, out sample_rate);AL.BufferData(buffer, GetSoundFormat(channels, bits_per_sample), sound_data, sound_data.Length, sample_rate);AL.Source(source, ALSourcei.Buffer, buffer);AL.SourcePlay(source);Trace.Write("Playing");// Query the source to find out when it stops playing.do {Thread.Sleep(250);Trace.Write(".");AL.GetSource(source, ALGetSourcei.SourceState, out state);}while ((ALSourceState) state == ALSourceState.Playing);Trace.WriteLine("");AL.SourceStop(source);AL.DeleteSource(source);AL.DeleteBuffer(buffer);}
}

1、至于播放语音的动画,一开始想到用OpacityMask试试,结果失败了;

2、想着数据触发器绑定样式,结果貌似不支持

3、后面想到上面覆盖Rectangle控制他的Margin实现;

3、然后找到Avalonia.Xaml.Behaviors 这个类库,结果也没成功;

4、后来发现Github上的一种解决方案

https://github.com/AvaloniaUI/Avalonia/issues/2427 
用#5710实现
<Button Classes.myClass= "{Binding xxx}" />

然后就有了最初的一版写法:

<Rectangle Name="RecOverLayer" Margin="70,0,0,0" Width="35" Height="35" Fill="#E5E5E5"Classes.MyAnimation="{Binding $parent[Controls:ChatBubble].IsStartPlay,Mode=TwoWay}"><Rectangle.Styles><Style Selector="Rectangle.MyAnimation"><Style.Animations><Animation Duration="0:0:1"IterationCount="{Binding Duration,Converter={StaticResource PlayDurationToIterationCountConverter}}" FillMode="Both" PlaybackDirection="Reverse"><KeyFrame Cue="100%"><Setter Property="Margin" Value="0"/></KeyFrame></Animation></Style.Animations></Style></Rectangle.Styles>
</Rectangle>

后面为了通用性,使用了绑定:

<Rectangle Name="RecOverLayer" Margin="{Binding Role,Converter={StaticResource ChatRoleTypeToRectangleMarginConverter}}" Width="35" Height="35" Fill="{Binding Role,Converter={StaticResource ChatRoleTypeToRectangleFillConverter}}" Classes.MyAnimation="{Binding $parent[Controls:ChatBubble].IsStartPlay}"><Rectangle.Styles><Style Selector="Rectangle.MyAnimation"><Style.Animations><Animation Duration="0:0:1" IterationCount="{Binding Duration,Converter={StaticResource PlayDurationToIterationCountConverter}}" FillMode="Both" PlaybackDirection="Reverse"><KeyFrame Cue="100%"><Setter Property="Margin" Value="0" /></KeyFrame></Animation></Style.Animations></Style></Rectangle.Styles>
</Rectangle>

最终简单的效果先这样吧ce8d3fd5d8a861dc038d55958c16df56.png;还是有个bug,再次播放语音时,动画效果失效了65fe015aee560f89afe211ae9b653856.png;回头再摸索一下原因吧;编程不息、Bug不止、无Bug、无生活e417f7cf8533560f9f5812ca4ccd31c7.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件项目组织管理(九)项目人力资源管理

文章目录什么是人力资源人力资源的特征什么是项目人力资源管理管理员工的关键所在马斯洛的需求层次理论赫兹伯格的双因素理论权力理论提高项目工作有效性的7种习惯人力资源管理过程人力资源管理的工具方法责任分配矩阵资源负荷资源平衡团队发展的5个阶段&#xff08;塔克曼模型…

javax.jdo.option.ConnectionURL配置的问题

2019独角兽企业重金招聘Python工程师标准>>> Hive安装过程中出现 The reference to entity "createDatabaseIfNotExist" must end with the ; delimiter.问题&#xff0c;具体如下所示&#xff1a; [Fatal Error] hive-site.xml:132:95: The reference to…

设计模式21:State 状态模式(行为型模式)

State 状态模式&#xff08;行为型模式&#xff09; 动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象的状态如果改变&#xff0c;其行为也会随之而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支持的行为和读写状态的行为就可能完全…

在 k8s 以外的分布式环境中使用 Dapr

在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的&#xff0c;有公有云TKE&#xff0c;AKS&#xff0c;还有私有云的Rancher &#xff0c;它并没有传闻中的那么难&#xff0c;而且我认为它非常容易上手。不过&#xff0c;我还是有很多人不愿意使用k8s 。…

javascript原型链中 this 的指向

为了弄清楚Javascript原型链中的this指向问题&#xff0c;我写了个代码来测试&#xff1a; var d {d: 40};var a {x: 10,calculate: function (z) {return this.x this.y z this.d},__proto__:d};var b {y: 20,__proto__: a};var c {y: 30,__proto__: a};运行如下的代码…

Lucene5.5.4入门以及基于Lucene实现博客搜索功能

前言 一直以来个人博客的搜索功能很蹩脚&#xff0c;只是自己简单用数据库的like %keyword%来实现的&#xff0c;所以导致经常搜不到想要找的内容&#xff0c;而且高亮显示、摘要截取等也不好实现&#xff0c;所以决定采用Lucene改写博客的搜索功能。先来看一下最终效果&#x…

都是基于.NET平台,WPF能取代Winform吗?

学Winform还是WPF&#xff1f;很多winform的学者时常在我的技术群咨询要不要学习WPF&#xff1f;我一贯的观点是必须学啊&#xff01;如果是搞工控做cs软件开发&#xff0c;WPF自然是首选。WPF优势在哪里&#xff1f;①前后端分离&#xff1a;WPF是数据驱动的而非Winform的事件…

正确对待生活

三文鱼&#xff0c;国人称为马哈鱼。是一类洄游性鱼类&#xff0c;为常被食用的鱼类之一。主要生活在大西洋及太平洋&#xff0c;在美洲大湖及其他湖可以找到。三文鱼在淡水环境下出生&#xff0c;之后移到海水生长&#xff0c;又会洄游到淡水繁殖。三文鱼会利用太阳和地球磁场…

WPF 实现验证码控件

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 01—代码如下一、创建CheckCode.xaml代码如下。<ResourceDictionary xmlns"http://schemas.microsoft.c…

Mysql数据库性能优化

2019独角兽企业重金招聘Python工程师标准>>> Mysql数据库性能优化&#xff0c;可以从下面三点入手&#xff1a; 数据库设计 SQL语句优化 架构优化 一.数据库设计优化 1.适度的违反范式&#xff0c;适度 遵循三大范式就会带来查询时经常需要join&#xff0c;导致…

4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2

1. 前言上一篇文章我们了解了bombardier&#xff0c;并知道了bombardier.yml与开源项目bombardier的关系&#xff0c;接下来的文章我们了解一下wrk、wrk2&#xff0c;并对比一下它们与bombardier的关系2. 认识wrkwrk是一种现代 HTTP 基准测试工具&#xff0c;能够在单个多核 CP…

dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分

1. dispatchTouchEvent 是处理触摸事件分发,执行super.dispatchTouchEvent(ev)&#xff0c;事件向下分发。 2. onInterceptTouchEvent是ViewGroup提供的方法&#xff0c;默认返回false&#xff0c;返回true表示拦截。 3. onTouchEvent是View中提供的方法&#xff0c;ViewGroup也…

Avalonia跨平台入门第二十篇之语音播放问题

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放;今晚加个班来解决…

递归算法浅谈

递归算法 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。   一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题类似的规模较小的问题来求解&#xff0c;递归策略仅仅需少量…

ThoughtWorks技术雷达专区

作为一家服务于全球不同类型的IT专业服务公司&#xff0c;ThoughtWorks从未停止过对卓越技术的追求&#xff0c;为此&#xff0c;ThoughtWorks的全球技术委员会(TAB)会定期讨论技术战略&#xff0c;并将其绘制成一份能够体现技术趋势的雷达图&#xff0c;它相当于当下技术领域的…

腾讯视频VIP周卡深圳地区免费领!附非深圳免费领腾讯视频会员攻略

深圳今天开始&#xff0c;暂停了所有公共交通&#xff0c;小区开始封闭管理&#xff0c;大家都居家办公&#xff0c;腾讯官方今天给深圳地区用户免费发放7天腾讯视频VIP会员&#xff0c;居家期间&#xff0c;可以追剧了&#xff01;这是腾讯官方给深圳地区的抗疫福利&#xff0…

SQL Server 权限的分类

SQL Server 的权限可以分三类 第一类 server 层面上的&#xff1a; select * from sys.fn_builtin_permissions(default) where class_desc like server; 第二类 database 层面&#xff1a; select * from sys.fn_builtin_permissions(default)    where class_desc like d…

Redis集群监控RedisClusterManager

Redis集群监控RedisClusterManagerRedisClusterManager监控Redis集群1234环境要求&#xff1a;Java8jdk配置这里略过RedisClusterManager 下载地址&#xff1a;https://git.oschina.net/yanfanVIP/RedisClusterManager/releases1234567891011121314151617181920212223242526272…

Visual Studio怎么使用中文帮助文档

今天给大家带来vs中怎么使用帮助文档&#xff1f;事情起因是这样的&#xff0c;上周有个哥们问我问题&#xff0c;字符串怎么分割啊&#xff0c;我当时有点忙&#xff0c;我就说你去看看帮助文档。然后过了三十秒 我看见他打开了百度。。。。。。我郁闷了 &#xff0c;我说你直…

王道408数据结构——第六章 图

文章目录一、图的基本概念二、图的储存邻接矩阵邻接表十字链表邻接多重表三、图的基本操作四、图的遍历广度优先搜索&#xff08;BFS&#xff09;深度优先搜索&#xff08;DFS&#xff09;图的遍历和图的连通性五、最小生成树Prim算法Kruskal算法六、最短路径Dijkstra求单源最短…