问题详情
是否存在这样的action或者功能?
对一个items里面所有的midi音符进行列表并排序:
1 统计每两个相连音之间的间隔时间,以秒或者毫秒为计算单位并排序。
2 统计所有音符的时长,以秒或者毫秒为时间单位排序。
3 统计所有音符的力度,并排序。
排序可以从大到小,或者从小到大,或者以时间序列。
自带的event list实现不了这个功能。
做过的尝试
自带的event list实现不了这个功能。
是否存在这样的action或者功能?
对一个items里面所有的midi音符进行列表并排序:
1 统计每两个相连音之间的间隔时间,以秒或者毫秒为计算单位并排序。
2 统计所有音符的时长,以秒或者毫秒为时间单位排序。
3 统计所有音符的力度,并排序。
排序可以从大到小,或者从小到大,或者以时间序列。
自带的event list实现不了这个功能。
自带的event list实现不了这个功能。
用脚本很容易做到,但是有些好奇是干嘛用的?
哪个daw也没这功能吧。。。没啥用处
写算法音乐的时候,需要知道音符之间的出现规律,而规律需要统计学的一些数据,所以如果有这样的一个工具的话会方便一些。
那估计得你自己写脚本了。
尝试了一下,但是没法用,贴过来大家看看是啥问题?如下:
-- 获取当前项目和轨道
local project = reaper.GetProject()
local tracks = reaper.GetTracks(project)
-- 获取所有的MIDI items
local items = reaper.GetSelectedMediaItems(project)
-- 对items进行遍历
for i, item in ipairs(items) do
-- 获取MIDI音符
local regions = reaper.GetMediaItemRegions(item)
-- 对音符进行排序
table.sort(regions, function(a, b)
local startA, endA = reaper.GetMediaRegionInfo_Value(a, "R_STARTTIME")
local startB, endB = reaper.GetMediaRegionInfo_Value(b, "R_STARTTIME")
return startA < startB
end)
-- 初始化起始时间和间隔时间列表
local startTime = regions[1]
local intervalTime = {}
-- 计算每两个相邻音符之间的间隔时间
for j = 2, #regions do
local startTime = reaper.GetMediaRegionInfo_Value(regions[j-1], "R_STARTTIME")
local endTime = reaper.GetMediaRegionInfo_Value(regions[j], "R_STARTTIME")
local interval = math.abs(endTime - startTime) * 1000 -- 转换为毫秒
table.insert(intervalTime, interval)
end
-- 打印间隔时间列表
for _, v in ipairs(intervalTime) do
reaper.ShowConsoleMsg(v .. "\n")
end
end
是啊。
如果自己不明白脚本每一行的含义,请不要直接使用 AI 提供的代码。
这个答案是正解~!!!