- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 music21 来处理 MIDI 和 mXML 文件,并将它们转换为我在项目中使用的钢琴卷帘。
我的钢琴卷由 88 维向量序列组成,其中向量中的每个元素代表一个音高。一个向量是一个时间步长,可以是第 16 次、第 8 次、第 4 次等。元素可以获得三个值{0, 1, 2}。 0 表示音符关闭。 1 表示音符打开。 2 也意味着该音符已打开,但它始终跟随 1 - 这就是我区分同一音符的多次按键的方式。例如,让时间步长为 8,这两个音调为 C 和 E:
[0 0 0 ... 1 0 0 0 1 ... 0]
[0 0 0 ... 1 0 0 0 1 ... 0]
[0 0 0 ... 2 0 0 0 2 ... 0]
[0 0 0 ... 2 0 0 0 2 ... 0]
[0 0 0 ... 1 0 0 0 0 ... 0]
[0 0 0 ... 1 0 0 0 0 ... 0]
我们看到 C 和 E 同时演奏四分音符,然后再次演奏四分音符,最后我们以持续四分音符的 C 结束。
现在,我正在为每个音符创建 Stream()
并在音符出现时填充它。这给了我 88 个流,当我将其转换为 MIDI 并使用 MuseScore 打开该 MIDI 时,给我留下了无法阅读的困惑局面。
我的问题是,有没有更好的方法可以将这种钢琴卷帘转换为 MIDI?一些我可以使用的算法或想法将不胜感激。
最佳答案
在我看来,music21 是一个很好的库,但级别太高了这个工作。没有流、四分音符或和弦这样的东西在 MIDI 中——只有消息。试试 Mido图书馆代替。这里是示例代码:
from mido import Message, MidiFile, MidiTrack
def stop_note(note, time):
return Message('note_off', note = note,
velocity = 0, time = time)
def start_note(note, time):
return Message('note_on', note = note,
velocity = 127, time = time)
def roll_to_track(roll):
delta = 0
# State of the notes in the roll.
notes = [False] * len(roll[0])
# MIDI note for first column.
midi_base = 60
for row in roll:
for i, col in enumerate(row):
note = midi_base + i
if col == 1:
if notes[i]:
# First stop the ringing note
yield stop_note(note, delta)
delta = 0
yield start_note(note, delta)
delta = 0
notes[i] = True
elif col == 0:
if notes[i]:
# Stop the ringing note
yield stop_note(note, delta)
delta = 0
notes[i] = False
# ms per row
delta += 500
roll = [[0, 0, 0, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 2, 0, 0, 0, 2, 0],
[0, 1, 0, 2, 0, 0, 0, 2, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0]]
midi = MidiFile(type = 1)
midi.tracks.append(MidiTrack(roll_to_track(roll)))
midi.save('test.mid')
关于python - 在 music21 中将钢琴卷转换为 MIDI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661688/
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在努力将 Apple Music 集成到我的网络应用程序中。我使用 Apple 的 MusicKit JS 让用户验证一次。但是,我很好奇结果是否为 Music User Token到期。我将此
Apple 在 StoreKit 框架中提供了一种方法来检测用户是否订阅了 Apple Music,但它根本不起作用。我订阅了 Apple Music,既可以在我的应用程序内收听歌曲,也可以从我的应用
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
有人有关于背景音乐程序生成的好书/文章推荐吗? (没有人声,只有乐器)。 我对以下内容不感兴趣: How do I generate the sound of a particular note on
我正在使用[MPMusicPlayerController applicationMusicPlayer]播放Apple Music。 (AVPlayer和AVAudioPlayer不适用于Apple
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我正在考虑使用程序生成音乐。我希望找到一个非常简单的 API,我可以在其中调用乐器、音符、持续时间并将歌曲串在一起(我当然会选择任何东西,但这将是我的偏好)。有没有图书馆可以做到这一点? 最佳答案 您
我正在使用eclipse和libgdx开发一个简单的游戏。 目前,我在游戏中使用“音乐”而不是“声音”来产生声音效果。 我制作了一个用于使所有声音fx静音的按钮,但在涉及“声音”而不是音乐时遇到了问题
我正在使用Apple的新Apple Music API制作应用程序。我有一个带有歌曲列表的屏幕,用户可以点击其中的一个来播放。我的代码部分有效。轻击的歌曲将播放,但不会出现在控制中心上。控制中心保持为
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我在本地 iOS 音乐应用程序中获取当前正在播放的歌曲信息(如(标题、艺术家...))时遇到了一些问题。 这是确切的问题,我的应用程序正在使用 MPMusicPlayerController与 iPo
我正在用 swift 制作一个音乐应用程序。该应用程序允许用户通过 Apple Music 应用程序订阅 Apple Music 来播放音乐。我可以通过以下方式检查用户是否订阅了 Apple Musi
问题 我在加载歌曲以进行我尝试创建的小型 Android 游戏练习时遇到困难。所有图形和渲染都完美运行,将其下载到我的 Android 平板电脑上效果很好,显示效果也很好。但是,当我尝试添加一些背景音
我想使用Essentia Library提取本地音频文件的高级音乐功能。 在Windows中使用Essentia的默认方法是使用预编译的二进制文件,例如streaming_extractor_musi
尝试使用以下代码使用 MPMusicPlayerController 播放歌曲 let musicPlayerController = MPMusicPlayerController.systemMu
当您单击此页面底部的“下一步,连接”部分时,我想重新创建动画 http://www.apple.com/music/radio/ 有谁知道如何在 JS 或 CSS3 中重新创建它以获得完美的页面转换?
我创建了一种“格式”来存储音乐片段(前奏部分、重复部分、结尾部分)和这些片段的时间信息(偏移量、乐谱长度),这样我就可以实时混合它们,就像这是一首音乐,同时无限期地重复重复的部分(可选)。这样,片段可
我正在制作一个音乐应用程序,您可以在其中向现有音序器添加新乐器。这些乐器是单独的 AudioUnitSampler,存储在一个数组中,因此当加载新乐器和音轨时,它会加载该音轨将要使用的声音。 这就是我
我正在编写一个节拍器应用程序,当用户在应用程序之外(浏览等)并且没有有意识地按下停止按钮时,我希望通过服务继续运行声音。 看来我应该使用 startForeground() 因为它不是那种你想要在后台
我是一名优秀的程序员,十分优秀!