Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用 Wolfram 语言和 Unity 游戏引擎构建虚拟钢琴

如何使用 Wolfram 语言和 Unity 游戏引擎构建虚拟钢琴

作者头像
WolframChina
发布于 2021-12-02 10:49:51
发布于 2021-12-02 10:49:51
2.1K0
举报
文章被收录于专栏:WOLFRAMWOLFRAM

您知道什么比学钢琴更难吗?在没有钢琴,也没有任何音乐理论知识的情况下学习钢琴。对我来说,买一架真正的钢琴是不可能的。我没有资金,大学的小公寓也没有空间放钢琴。很自然地,看起来我必须自己构建一个钢琴——当然是数字化的。幸运的是,我有Mathematica、Unity和几个小时的空闲时间。因为使用Wolfram 语言 (https://wolfr.am/10mTqMAq6) 和UnityLink (https://wolfr.am/10mTnjzOC)在 Unity 中工作非常快速和高效,所以我创建了一个可演奏的钢琴部分,甚至在这个过程中学习了一些音乐理论。 首先,我确定建造钢琴需要以下条件:

  • 每个音符的音频
  • 钢琴键的几何形状
  • 便携式、交互式、实时渲染音频和 3D 物理引擎

前两个可以在 Wolfram 语言中轻松完成。至于最后一个,我选择使用新引入的 UnityLink — Wolfram 语言和实时开发平台 Unity 之间的强大链接。使用 UnityLink,现在可以结合Wolfram语言在渲染、音频和物理方面令人印象深刻的模拟优势与 Unity 将这三者有效地打包到 Web、桌面、移动和控制台平台的独立应用程序中相结合。

什么是钢琴?

在深入研究代码之前,让我们先了解一下钢琴和它演奏的音符的一些背景知识。了解实体钢琴背后的理论将帮助我们更好地在 Unity 中以数字方式重新创建它。

钢琴的起源可以追溯到 18 世纪早期的意大利,它是由Bartolomeo Cristofori发明的。从那时起,它经历了许多设计更改,最终形成了(大部分)标准化的按键配置。

现代钢琴共有 88 个键,其中 52 个是白色的,用于演奏自然音符(A、B、C、D、E、F 和 G)。剩余的36个键是黑色的,用于演奏所述记号(A♯/ B♭,C♯/ d♭,D♯/ E♭,F♯/ G♭和G♯/ A♭)。♯ 和 ♭ 符号分别代表尖锐和平坦。在这里您可以看到所有 88 个键,并标有相应的音符:

音符可以进一步分为八度,每个八度包含 12 个键。具有相同音符但处于不同八度的两个键将具有不同的音高。钢琴的八度在此图中用颜色编码:

钢琴包含七个完整的八度音程,末端有四个额外的键。这些额外的键允许在所有七个八度音阶中演奏 A 小调和 C 大调的音阶。

在这篇博文中,为简单起见,我将专注于单个音阶(按顺序排列的音符),但您可以应用此方法来创建整个钢琴。让我们使用最常见的音阶之一——C大调音阶。此音阶仅包含按 C、D、E、F、G、A 和 B 顺序排列的自然音符。可以选择任何 C 音符作为音阶的开始。在这里,我将使用第四个八度音阶中的 C 音符(也称为 C4 或中间 C):

如果您仔细观察,您会发现我们钢琴的这一小节包含所有七个自然音符和所有五个临时音符。请注意,我还在音阶中包含了下一个八度音阶 (C5) 的 C 键,因为这有助于“四舍五入”音阶:

制作音乐

哇!有了背景,我终于可以进入代码了。为了获得钢琴键的声音,我使用符号SoundNote,它可以从大量乐器中生成任何音符。对于单个音符,您只需为其指定音符名称、持续时间和乐器。当包裹在Audio 中时,它会创建一个可以直接在笔记本中播放的音频对象:

要获得特定八度的音符,您只需将八度数字连接到音符名称的末尾。例如,我可以使用此处显示的代码获得第四个八度音阶中的所有自然音符:

生成几何

钢琴键的确切形状和尺寸因制造商而异。我选择通过将每个键近似为棱镜来保持简单。使用棱镜的好处是我只需要指定基础多边形并向上挤压。但是,确保没有键重叠需要五个基本多边形变体:

剩下的就是将基本多边形转换为 3D 棱镜。这可以使用RegionProduct将多边形乘以具有给定高度的线段轻松完成:

准备项目

现在我有了音频和几何图形,是时候在 Unity 中将它们组合起来制作一架工作的钢琴了。正如我之前提到的,这可以通过 UnityLink 实现。

安装 Unity 后,加载 UnityLink 就像单个函数调用一样简单:

我首先打开一个新的 Unity 项目,我将其命名为“ MyPiano ”:

项目打开后,我现在可以从 Unity 发送和接收数据。我最终希望在Scene中创建我的钢琴——一个 3D 环境,可以充当菜单、游戏关卡或 Unity 应用程序的任何其他不同部分。但是在我创建我的Scene之前,我必须首先将我之前创建的音频和几何内容传输到 Unity。添加后,我将可以在我的 Scene 中自由使用它。

虽然不是必需的,但最好使用项目资产目录中的子目录来组织您的 Unity 项目。该 Assets 目录包含所有在项目中使用的资产(纹理,音频剪辑,网格等)。在此处显示的行中,我使用CreateUnityAssetDirectory在Assets目录中创建了五个目录:

现在我开始传输音频。为此,我将每个音符的音频传递给函数CreateUnityAudioClip,该函数会自动将其转换为 Unity 的 AudioClip 对象并将其存储在Assets目录中。这些AudioClip对象在 Wolfram 语言中表示为UnityAudioClip表达式:

接下来,我转移了钢琴键的几何形状。然而,这一次,我使用CreateUnityMesh自动将我的MeshRegions转换为 Unity 的Mesh对象,在 Wolfram 语言中表示为UnityMesh表达式。

我做了一些类似的事情来创建一个黑白材料,以及一个脚本组件来控制用户与钢琴键的交互。为简洁起见,我省略了这些,但可以在这篇文章的可下载笔记本中找到完整的代码。

设置场景

转移所有资产后,我终于可以为我的钢琴制作场景了。我首先创建一个新的默认场景:

如果您不熟悉 Unity,这里是Scenes的简要说明。Scenes包含游戏对象,而游戏对象又充当组件的容器。您可以将场景视为环境,将游戏对象视为该环境中的事物,将组件视为这些事物的行为。

在我的钢琴场景中,我将为每个键制作一个游戏对象。然后,我会将我之前创建的脚本组件附加到这些游戏对象中的每一个,以便在用户与它们交互时它们会发出声音并移动。

我可以一次添加一个键;然而,这将被证明是乏味的,并且在未来难以扩展。相反,我在两个列表中定义了有关每个白键和每个黑键的信息。然后我可以遍历这些列表以自动创建每个键。对于每个键,我指定了它对应的计算机键盘键、它应该播放的音符以及它应该使用的网格索引。请注意,黑键的网格索引被隐式假定为 5:

为了保持我的场景井井有条,我还将我的所有键分组到一个名为 “Piano Scale” 的主游戏对象下:

我首先遍历所有的白键:

接下来是黑键:

对于每个键,我使用CreateUnityGameObject创建一个具有适当网格的游戏对象。设置这个游戏对象的位置后,我通过将游戏对象和脚本名称传递给CreateUnityComponent来附加我之前创建的自定义脚本。我通过指定该键的键码和音频剪辑来完成。

就像那样,我有一架可以工作的(部分)钢琴。然而,它看起来并不像它想象的那么好。为了解决这个问题,我调整了物体材质以及照明和相机(可下载笔记本中的完整代码)。有了这个,我们得到了最终的结果:

现在看起来好多了!在继续之前,我还想通过调用SaveUnityScene来保存我刚刚对场景所做的所有更改:

弹钢琴

为了在 Unity 编辑器中测试钢琴,我可以使用UnityPlay和UnityStop在Play和Edit模式之间切换。当我对结果感到满意时,我可以使用 UnityBuild (https://reference.wolfram.com/language/UnityLink/ref/UnityBuild.html) 将项目构建为独立应用程序。

以下命令将自动将项目构建到我当前平台 (macOS) 的项目目录中的文件中:

构建成功后,我可以立即打开并弹奏我的钢琴应用程序:

在 Unity 中工作的优势之一是它能够构建到众多平台而无需更改您的代码。如果您可以在某个平台上玩游戏,那么 Unity 很可能可以为其构建内容。

它甚至可以构建为在 Web 浏览器中运行。尝试一下!

轮到您了!

钢琴的这一小部分可以轻松扩展为完整的钢琴键盘。SoundNote (https://reference.wolfram.com/language/ref/SoundNote.html.zh?source=wechat) 中提供了 160 多种风格和打击乐器,您还可以构建其他乐器,甚至将它们组合成一个合成器。

要开始使用 Wolfram 语言中的 UnityLink,请访问在线文档页面 (https://reference.wolfram.com/language/UnityLink/guide/UnityLink.html?source=wechat) 或尝试示例项目 (https://reference.wolfram.com/language/UnityLink/guide/SampleProjects.html?source=wechat) 之一。您可以使用内置界面 (https://www.wolfram.com/language/12/built-in-interface-to-unity-game-engine/index.html.zh?source=wechat) 做很多事情,我期待看到您在 Wolfram 社区 (https://community.wolfram.com/)上提出的项目!

版本 12 ( (https://www.wolfram.com/language/new-in-12/index.html.zh?source=wechat)) 为 Wolfram 语言带来了许多主要的新领域,包括与 Unity 游戏引擎的无缝接口。立即在桌面或 Wolfram Cloud 中使用Wolfram|One 或 Mathematica 开始编码。

本文译自博客:https://blog.wolfram.com/2019/06/06/how-i-built-a-virtual-piano-with-the-wolfram-language-and-the-unity-game-engine/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
版本12——Wolfram语言和Mathematica的一次飞跃
(本文译自Stephen Wolfram于英文12.0版发布日2019年4月16日的博客。版本12不仅囊括了拿破仑定理,还有Wolfram公理以及欧几里得所著《几何原本》一书中所涉及的几何问题, N 体问题;机器学习、神经网络、图像处理、语音识别、NLP等AI功能,并集成Wolfram|Alpha的诸多功能;计算化学、大地测量学、大型数据库的处理、丰富的Wolfram知识库、提速数值优化、非线性有限元分析、与Python的接口、高级编译器、Wolfram Super Shell、操纵网页、独立的微控制器;与Unity游戏的集成,实现VR/AR 以及机器仿真环境;集成彭博和路透社的金融数据,支持Bloomberg Terminal服务,区块链等等等。)
WolframChina
2019/07/31
3.3K1
版本12——Wolfram语言和Mathematica的一次飞跃
谷歌AI的七个“不正经”玩法,个个能玩一整天
谷歌最近就放出了几只比较搞笑的AI,可以完成一些不走寻常路的工作,比如:帮你实现靠脸吃饭,让你说的跟唱的一样~
量子位
2018/12/06
5510
神“乐”马良:AI直接将音频转换成动画
【新智元导读】根据音乐信号预测身体的运动是一个极具挑战性的计算问题。来自Facebook、斯坦福大学和华盛顿大学的研究人员开发了一种基于深度学习的方法,该方法可以将乐器的声音转换成对骨骼关键点的预测,并可以用于制作动画角色。
新智元
2018/07/31
1.4K0
神“乐”马良:AI直接将音频转换成动画
数字复古声:用 Wolfram 语言和 System Modeler 为模拟合成器建模
你有没有想过做自己的乐器?做一个乐器的数学模型听起来怎么样?无论你是否在寻找一个划算的替代品,或者是一位简单派但想要最好的声音,或者是一位对声音设计好奇的Wolfram语言爱好者,你可以使用Wolfram System Modeler搭建一个虚拟版本的模块化合成器。
WolframChina
2020/10/30
2K0
数字复古声:用 Wolfram 语言和 System Modeler 为模拟合成器建模
Wolfram语言和Mathematica版本13的最新功能
本文译自 Wolfram 博客:https://blog.wolfram.com/2021/12/13/launching-version-13-0-of-wolfram-language-mathematica/
WolframChina
2022/04/01
2.5K0
Wolfram语言和Mathematica版本13的最新功能
Wolfram 语言和Mathematica 版本12 发布了
我们很高兴地宣布Mathematica 和 Wolfram语言英文版本 12 今天发布了!这是一次重大的版本更新,新版本在诸多领域引入了数百个新功能,范围涵盖数学与几何、可视化、音频与图像处理以及机器学习等,并对Mac和Linux笔记本界面进行了重大改进,还增强了众多系统性能。关键的新功能包括:
WolframChina
2019/04/30
1.2K0
万余首钢琴作品、一千多个小时,字节跳动发布全球最大钢琴MIDI数据集
机器之心专栏 机器之心编辑部 近期,字节跳动发布全球最大的古典钢琴数据集 GiantMIDI-Piano,包括来自 2,784 位作曲家 10,854 首作品的 MIDI 文件,总时长为 1,237 小时。研究者为完成该数据集的构建,开发并开源了一套高精度钢琴转谱系统。 钢琴转谱是一项将钢琴录音转为音乐符号(如 MIDI 格式)的任务。在人工智能领域,钢琴转谱被类比于音乐领域的语音识别任务。然而长期以来,在计算机音乐领域一直缺少一个大规模的钢琴 MIDI 数据集。 近期,字节跳动发布了全球最大的古典钢琴数据
机器之心
2023/03/29
1.1K0
万余首钢琴作品、一千多个小时,字节跳动发布全球最大钢琴MIDI数据集
FL Studio水果软件最新更新版本号V21.0.0
支持苹果 Silicon 芯片 – 对苹果 Silicon 芯片(M1 芯片以及相关 CPU)的原生 ARM 代码支持,但请注意: NewTime、NewTone 和一些 DirectWave 采样格式的导入功能尚未完全重构可能会有问题。
用户7442547
2022/12/12
1.2K0
FL Studio水果软件最新V21中文版本安装包下载
FL Studio 21即将推出 – 新功能和改进。如果您从事音乐制作,那么您不可能没有听说过 FL Studio,或者很可能已经使用过这个音乐程序。好了,新版本的 FL Studio 21 DAW 已经准备好向公众发布了。Image-line 正在为 2022 年的大型揭幕准备最终细节。纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换!Mac版新增对苹果M2/1家族芯片原生支持。FL Studio 21 已经发布,并且有许多令人兴奋的新更新和插件可供用户使用,以帮助他们进行创作和工作流程。新功能是由一个专注于新插件开发的团队创建的,而不是由FL Studio本身的团队创建的。
用户7442547
2022/12/13
8660
FL Studio水果21最新中文版详细功能介绍
水果具有独特的底层逻辑,其开创了编曲“块”的思维。用FL Studio编曲的流程是在把一个样式编辑好,然后将编辑好的样式当做音频块,在播放列表中像“搭积木”一样任意编排,形成一首歌,这种模式非常利于电子音乐编曲。
用户7442547
2023/03/06
4.7K0
水果编曲FL Studio20.99中文版吗免费下载
水果编曲FL Studio20.99中文版是由公益小组【FL水果英翻组】特别为大家送上20.99测试版功能全解析,提前了解最终正式版会带来的新功能。
用户9208731
2021/12/18
1.3K0
水果编曲FL Studio20.99中文版吗免费下载
Wolfram 语言 与 Mathematica 12.3 新功能
最新中英文版本已经上线,赶紧下载 (https://wolfram.com/get-upgrade/),和 Wolfram 博士一起来体验最新版本的强悍功能:
WolframChina
2021/08/24
1.4K0
Wolfram 语言 与 Mathematica 12.3 新功能
FLstudio最新21.0版本下载更新介绍
萌化全场!FL还有水果娘DAW界萌神!极富二次元造型的水果娘FL chan通过FL插件Fruity Dance登场,为其定义舞蹈动作后可让她随用户编出的乐曲跳舞。水果娘被网友大量演绎为多种形象,许多up主通过召唤水果娘为乐曲「注入灵魂」。纯正简体中文支持,全新分频器及频率直方图,音频控制更出色!Mac版新增对苹果M1家族芯片原生支持。全能数字音乐工作站(DAW)编曲、剪辑、录音、混音,20余年的技术积淀和实力研发,FL Studio 已经从电音领域破圈,成功蜕变为全球瞩目的全能DAW,把电脑变成全功能音乐工作室!
用户7442547
2022/08/22
8900
最新版水果FL Studio21新版本更新全解析!80项更新与改进!
万众期待的 FL Studio 21 版本将于正式发布上线,目前在紧锣密鼓的安排上线中,届时所有购买正版 FL Studio 的用户,都可以免费升级到21版!按照惯例,本次新版也会增加全新插件,来帮助大家更好地创作。今天先给大家分享一下,介绍全部功能讲解,后续会有专门的解说功能视频发布。
用户7442547
2022/12/07
3.7K0
Tone.js —— Web Audio 框架中文使用指南
Tone.js 是一个Web Audio框架,用于在浏览器中创建交互式音乐。Tone.js旨在使音乐家和基于Web Audio 应用程序的音频程序员都能熟悉应用。在应用层,Tone.js 提供了常见的DAW(数字音频工作站)功能,如用于同步和调度事件的全局传输,以及预构建的合成器和音效。此外,Tone.js 提供高性能的构建模块,以创建您自己的合成器、音效和复杂的控制信号。
泯泷、
2024/03/13
1.2K0
FL Studio21下载MacOS版简体中文支持苹果M1处理器
FL 工作室 21 引入更快、更精确的音频编辑、改进的内容发现、对 DAW 情绪的控制以及更多鼓舞人心的创意工具。现有客户全部免费,因为我们喜欢您的终身免费更新!FL Studio是一款功能非常强大的音乐创作编辑软件它就是FL Studio(水果软件)。使用FL Studio中文版可以轻松帮我们制作自己的音乐唱片,拥有强大且专业的编曲混音创作工具,有需要的朋友不要错过了。
用户7442547
2022/12/14
4.4K0
音乐创作引擎实现即时交互体验的探索
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息   //   编者按:随着音乐生产所依赖的设备成本不断降低,音乐消费者与创作者之间的界限正在逐渐消融。我们提出了一种新型音乐创作引擎。借助人工智能和即时演算技术,音乐的创作过程和体验过程得以实现融合:音乐将不再是视觉场景中的静态资源,而成为一种可以对用户即兴创作灵感做出实时响应的可交互元素。这使得更多的音乐消费者有机会体验置身于交互式音乐场景之中的趣味性。LiveVideoStackCon 2
LiveVideoStack
2023/04/04
5830
音乐创作引擎实现即时交互体验的探索
30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】
Mesh Filter 组件包含对网格的引用。该组件与同一个游戏对象上的 Mesh Renderer 组件配合使用;Mesh Renderer 组件渲染 Mesh Filter 组件引用的网格。
呆呆敲代码的小Y
2023/07/05
3.4K0
30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】
想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)
VOXL是一款简单且易于理解的多重体素沙盒游戏,使用Unity的UNET网络系统开发。
恬静的小魔龙
2022/08/07
2K0
想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)
如何运用深度学习自动生成音乐
我可能不是爱因斯坦那样的物理学家,但我完全同意他的音乐思想!我每天都听音乐。我往返办公室的过程中就伴随着音乐的旋律,老实说,这有助于我专心工作。
人工智能小咖
2020/02/19
2.4K0
如何运用深度学习自动生成音乐
推荐阅读
相关推荐
版本12——Wolfram语言和Mathematica的一次飞跃
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档