Lua 音符转换为数字
2018-12-28 11:18:30
收藏:0
阅读:176
评论:1
我需要使用 Lua 将一些表示和弦的音符输入转换为其根音符 0 上方的数字。
所以从midi数据中我们得到 C13 和弦的音符
输入:C、E、G、A#、D、F、A
由于根音符 0 是 C,因此我们从 C 音符开始,
在下面我们有钢琴键盘的 2 个八度,每个八度有 12 个音符,和弦在其中被演奏
0C 1C# 2D 3D# 4E 5F 6F# 7G 8G# 9A 10A# 11B 12C 13C# 14D 15D# 16E 17F 18F# 19G 20G# 21A 22A# 23B
所以 C 是根音符 0
D、F、A 是在下一个八度上演奏的
结果:0、4、7、10、14、17、21
所以如果我们有 D 和弦
输入:D、F#、A
D 是根音符 0
所有音符都在第一个八度上演奏
0D 1D# 2E 3F 4F# 5G 6G# 7A 8A# 9B 10C 11C# 12D 13D# 14E 15F 16F# 17G 18G# 19A 20A# 21B 22C 23C#
结果:0、4、7
G#m7#9 和弦
输入:G#、B、D#、F#、B
0G# 1A 2A# 3B 4C 5C# 6D 7D# 8E 9F 10F# 11G 12G# 13A 14A# 15B 16C 17C# 18D 19D# 20E 21F 22F# 23G
结果:0、3、7、10、15
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

local function notes2nums(input) local map = {A = 9, ["A#"] = 10, B = 11, C = 0, ["C#"] = 1, D = 2, ["D#"] = 3, E = 4, F = 5, ["F#"] = 6, G = 7, ["G#"] = 8} local base, prev return (input:gsub("([^,]+)", function(note) local num = map[note] or error(("Unexpected note value '%s'"):format(note)) base = base or num num = num - base if prev and num < prev then num = num + 12 end prev = num return tostring(num) end)) end print(notes2nums("D,F#,A")) print(notes2nums("C,E,G,A#,D,F,A")) print(notes2nums("G#,B,D#,F#,B"))
0,4,7 0,4,7,10,14,17,21 0,3,7,10,15
```