Xamarin.Forms 上的音乐文件节奏和强度检测

Posted

技术标签:

【中文标题】Xamarin.Forms 上的音乐文件节奏和强度检测【英文标题】:Music file rhythm and intensity detection on Xamarin.Forms 【发布时间】:2019-06-05 13:39:29 【问题描述】:

我们的产品是可调光灯泡,通过蓝牙和App连接,App可以调节灯泡的亮度(颜色),亮度值1-100。

现在应用想要添加一个根据音乐(Mp3)自动变暗的功能。在播放音乐时,它会根据音乐的节奏和声音大小自动调节灯光的亮度。

音乐已使用https://github.com/adrianstevens/Xamarin-Plugins/tree/master/SimpleAudioPlayer播放

我的问题是,在播放音乐(Mp3)时,如何将音乐的节奏和强度转换为1-100的数字,并作为亮度值发送给灯泡?

网上找了很多C#(基于Windows)的音乐分析例子,但没有找到Xamarin。

感谢您的帮助!

【问题讨论】:

怀疑你是否会找到任何现有的包做这个专门的事情。您只需进行一些研究并自己编写即可。 我是开发人员,我使用 C#,现在我使用 Xamarin 开发应用程序。 @Davesoft 【参考方案1】:

听起来很酷!你的问题有两个部分,

增强音频播放器 - 由于您已经实现了音频播放器,您需要做的就是向滑块添加一个 Value changed 事件,如 this official Microsoft Example 所示,以便更改滑块的值现在也将与您的设备/灯泡通信

与您的设备通信 - 这将取决于您的设备如何通过蓝牙接受值。我们无法确定您的灯泡接受哪些串行值,但您必须通过蓝牙发送串行数据值。您可以使用this 来帮助简化这部分。

【讨论】:

我已经实现了灯泡的蓝牙BLE控制,您也可以使用滑块手动控制灯的亮度。目前,当需要实现音乐播放时,灯的亮度是根据音乐的强度自动控制的。难点在于将音乐转换为 1-100 的数字流来指示强度。 您能否在歌曲开头将音频上传到服务器,并返回一个 json,其中包含每 1/10 秒的强度值。特别是因为您已经能够在桌面上执行此操作 这是一个可选的解决方案。 @Saamer @PaulZhang 好酷,因为您使用的是 .Net 标准,您是否考虑过使用可用于音频处理 AudioTools、CSCore、SoundFingerprinting 等的 nuget 包? @Sammer CSCore 和 SoundFingerprinting 感觉不错,我去研究一下。谢谢你的建议!

以上是关于Xamarin.Forms 上的音乐文件节奏和强度检测的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Forms 上的 XAML 中将 BindingContext 设置为 ViewModel

TeamCity 上的 Xamarin 表单:Xamarin.Forms 任务与目标不匹配

如何使用 Xamarin 从 Xamarin.Forms.ItemTappedEventArgs e 上的 e.Item 获取值

Xamarin Forms不会在Visual Studio 2017中创建.csproj文件

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题

iOS 上的 Xamarin.Forms Master/Detail 边缘滑动