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;其支持的行为和读写状态的行为就可能完全…

java和C++之单例类双重检查加锁

1、Java public class Singleton {private volatile static Singleton instance;public static Singleton getInstance () {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;} } 2、C class Singlet…

基于Qt的光盘刻录开发

.转载于:https://blog.51cto.com/weiyuqingcheng/1921369

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

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

软件项目组织管理(十)项目沟通管理

软件项目成功的主要因素 用户参与主管层的支持需求的清晰表述 沟通管理的目标 及时而适当地创建、收集、发送、储存和处理项目的信息。 沟通管理的过程 沟通规划信息发布绩效报告利益相关者管理 沟通渠道数目计算公式 Sn*(n-1)/2 S&#xff1a;沟通渠道数量 n&#xff1…

ubuntu 14.04 安装Java JDK

Linux 下安装配置 JDK7 自从从Oracle收购Sun近三年来&#xff0c;已经有很多变化。早在8月&#xff0c;甲骨文将“Operating System Distributor License for Java”许可证终结&#xff0c;这意味着第三方将不可以依据这一许可分发他们的软件包。  因此Ubuntu Linux已经开始禁…

shell 获取值 默认值

default0PAGE_PVcat a.log|awk {print $1}PAGE_PV${PAGE_PV:-${defaut}}转载于:https://blog.51cto.com/lihongyi/1567518

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};运行如下的代码…

C和指针之删除字符串第一次出现的子串

1、问题 函数首先先判断substr是否出现在str中,如果它并没有出现,返回0,如果出现,函数应该把str *中位于该字符串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1,如果 *多次出现str中,函数只删除第1次出现的子串,函数的第2个参数绝不会被修改。 2、…

C# 中是否支持 Like 和 ln 条件的参数化查询 ?

咨询区 Tom Ritter.NET 中的参数化查询我一直都像下面这样写。SqlCommand comm new SqlCommand("SELECT * FROM Products WHERE Category_ID categoryid ", conn); comm.Parameters.Add("categoryid", SqlDbType.Int); comm.Parameters["categor…

软件项目组织管理(十一)项目风险管理、项目采购管理

什么是风险 可能给项目的成功带来威胁或损害的可能性。 风险管理的目标 对项目目标而言的正面事件的概率和影响结果最大化&#xff0c;把负面事件的概率和影响最小化。 风险承受度 从潜在回报中得到满足或快乐的程度。 应对风险的基本措施 规避接收减轻转移 什么是项目…

Java探索之旅(6)——对象和类

1.知识要点 假设&#xff1a; public ClassName{int data;String name;ClassName(){data1;}public static int getdata(){return data;}}</span> ❶含main()的为主类。多个类放在一个文件中&#xff0c;只能有一个主类。 ❷类可以不定任何构造方法(函数)&#xff0c;系统…

BZOJ3924 : [Zjoi2015]幻想乡战略游戏

对于一个点&#xff0c;要求出它到所有点的带权距离和&#xff0c;只需记录下树分治的结构然后查询即可。 修改$O(\log n)$&#xff0c;查询$O(\log n)$。 到所有点带权距离和最小的点显然是这棵树的带权重心。 以1号点为根&#xff0c;考虑一条从父亲x到孩子y的边&#xff1a;…

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

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

C和指针之反转字符串

1、问题 把参数字符串中字符反向排序&#xff0c;请使用指针而不是数组下标&#xff0c;不要使用任何C函数库中 2、实现 #include <stdio.h> #include <stdlib.h> /****函数把参数字符串中字符反向排序&#xff0c;请使用指针而不是数组下标&#xff0c;不要使用任…

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

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

王道408数据结构——第一章 绪论

文章目录一、概念数据结构研究内容二、数据三要素逻辑结构储存结构&#xff08;物理结构&#xff09;运算三、算法和算法评价时间复杂度空间复杂度四、数字相关汇总算法性能二叉树相关图相关矩阵相关一、概念 数据结构研究内容 数据结构是一门研究在非数值计算中&#xff0c;…

C和指针之Eratosthenes-埃拉托斯特尼筛方法找质数

1、问题 *Eratosthenes-埃拉托斯特尼筛方法找质数,给出要筛数值的范围n,先用2去筛,2的倍数不是质数, * 再用下一个素数,也就是3筛,把3留下,把3的倍数不是质数,接下去用下一个素数5筛,把5留下,把5的倍数不是质数, *c不断重复下去...... 2、代码实现 #include…