问题标签 [midi-instrument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
276 浏览

python - MIDI乐器索引python

我有一些 MIDI 文件。每个 MIDI 文件都有一些乐器。我需要知道每个 MIDI 文件包含哪些乐器。我发现了一些python可以解析 midi 文件的库,例如mido。例如,下面是解析一个 MIDI 文件的结果:

我可以看到这个 MIDI 文件中有多少曲目,但我不知道每个曲目播放的是什么乐器。这是midi仪器。有人知道解决方案吗?

0 投票
2 回答
202 浏览

android - 我可以访问 Google Play 音乐 MIDI 声音吗?

预装在我的 Android 手机上的 Google Play 音乐应用程序可以播放 MIDI 文件,这意味着它有一个可以访问和使用的 MIDI 声音库。

这些声音是应用程序的一部分,还是 Android 操作系统代码的一部分?如果我正在创建一个创建 MIDI 数据的应用程序,有没有办法可以访问这些声音以便在同一个应用程序中创建和播放音符?

0 投票
1 回答
385 浏览

python - 只分析 Pretty_Midi Instruments

试图找出解决此问题的好方法,但想寻求最好的方法。

在我的项目中,我正在查看神经网络的多个乐器音符对。唯一的问题是有多个具有相同名称的仪器,仅仅因为它们具有相同的名称并不意味着它们 100% 的时间都是相同的仪器。(应该是,但我想确定。)

我个人想分析乐器本身(例如有关乐器的元数据),而不是与之相关的音符。那可能吗?

我还应该提到我正在使用 pretty-midi 来收集乐器。

0 投票
0 回答
203 浏览

artificial-intelligence - Fluid-synth 始终确保存在银行编号

问题总结:

我目前正在python中使用pretty_midi和fluidsynth分析乐器/音符对。有时当我在我的乐器对象上调用流体合成器时,我会收到如下错误:

fluidsynth: error: There is no preset with bank number x and preset number z in SoundFont 1


搜索:

据我了解,问题似乎是我需要一个声音字体文件。我也从其他人那里找到了类似的问题:

运行pyfluidsynth + pyaudio demo,alsa和jack问题很多

可惜没有回复。。。


我想从这篇文章中得到什么......(请感谢你):

  1. 我想知道如何下载多种歌曲字体/如何存储它们。
  2. 当错误确实发生时,我如何更好地中断错误,以便我可以在线查找歌曲字体文件或查看我是否已经在本地计算机上。
  3. 如果它抛出错误,为什么我仍然从流体合成器获得输出???我再次通过比较合成波形来分析乐器/音符对,这会影响我正在做的任何事情吗?

代码图片:(使用图片是因为问题更多是后端问题/我有很多其他代码可以使这个齿轮正常工作。)

我如何处理输出:


提取乐器音符对的属性。为了让流体合成器使用不同的字体文件,我会将它作为流体合成器内部的参数传递。


整体输出:

我想提前感谢大家甚至查看这个。整个社区在最后几篇文章中都非常有帮助,所以再次感谢大家。

0 投票
1 回答
276 浏览

dataset - 如何将此数据转换为 MIDI 文件?

我有音符索引(每个八度有 12 个音符)与时间(节拍)数据。如何将此数据转换为 MIDI 文件?

图表形式数据的示例图像

乐器是钢琴。

另外,请注意同时有多个音符。

提前致谢。

0 投票
0 回答
186 浏览

swift - AVAudioEngine 在不同的环境中给出看似随机的错误

我正在尝试编写一个MIDIPlayer类,它是 anAVAudioEngine和 an的包装器AVAudioUnitMIDIInstrument。我编写了一个循环,获取所有AudioComponents类型的名称和 ASBD MusicDevice,然后根据与字体替换非常相似的列表选择最需要的单元,Apples DLS MusicDevice 作为最终后备。这是我的示例代码:

该代码在 Xcode 11.3.1 操场上运行得非常好,但是,当我在操场外使用完全相同的代码时,我会遇到不同类型的错误:当我将相同的代码复制到命令行项目并从 XCode 运行它时,它仍然有效,但控制台给了我以下错误:

[AudioHAL_Client] AudioHardware.cpp:666:AudioObjectGetPropertyData: AudioObjectGetPropertyData: no object with given ID 0

当我在没有 Xcode 的情况下运行可执行文件时,不会报告任何错误。

当我创建单个 View 应用程序时,将类及其设置函数放在它自己的源文件中并applicationDidFinishLaunching在 AppDelegate 的方法中创建一个实例,我收到以下错误:

[AudioHAL_Client] HALC_ShellDriverPlugIn.cpp:104:Open: HALC_ShellDriverPlugIn::Open: opening the plug-in failed, Error: 2003329396 (what)

[AudioHAL_Client] AudioHardware.cpp:666:AudioObjectGetPropertyData: AudioObjectGetPropertyData: no object with given ID 0

这些错误甚至在我的设置函数被调用之前就被写入控制台。但是,代码仍然有效(我听到音符播放),但前提是我更改了instrumentComponentSubstitutionList以便找到 Apple AU 之一(换句话说:不是 SmartMusicSoftSynth)。当我将 SoftSynth 保留为首选设备时,代码崩溃并出现额外错误:

[avae] AVAEInternal.h:103:_AVAE_CheckNoErr: [AUInterface.mm:461:AUInterfaceBaseV3: (AudioComponentInstanceNew(comp, &_auv2)): error -3000

注意:在 Playground 和命令行应用程序中,SoftSynth 可以工作。

一些可能与该问题相关或无关的观察结果:

  1. 在这篇博文http://www.rockhoppertech.com/blog/multi-timbral-avaudiounitmidiinstrument/ Gene DeLisa 提到AVAudioUnitSampler是抽象类的唯一子类AVAudioUnitMIDIInstrument。这篇文章来自 2016 年,但我没有找到任何关于此的更多信息。但是,很明显,DLS MusicDevice 和第 3 方 SoftSynth 都可以工作——至少在某些环境中是这样。

  2. 从发现AudioComponents的两个 Apple 设备中提取的 ASBD 将其componentFlags属性设置为 2。文档说:必须设置为零,除非请求已知的特定值。SoftSynth的componentFlags属性为 0。

  3. 当我尝试从输入捕获音频时,我仍然遇到某种相关的问题如何允许 Xcode 访问麦克风?? - 到目前为止,命令行应用程序在从 XCode 或通过终端运行时显示不同的行为,并且在这两个问题中都涉及 CoreAudio。

我的问题:

为什么我会收到这些错误?

为什么 3rd 方插件可以在 Playground 和命令行应用程序中工作,但不能在单视图应用程序中工作?

AVAudioEngine 是否准备好托管除单音色 SamplerUnit 之外的其他乐器单元?

还是我必须下台并直接使用instrumentAU而不是AVAudioUnitMIDIInstrument包装器?

0 投票
1 回答
435 浏览

python - 使用 Python Mido 库选择 GM MIDI Level 2 乐器

我正在使用 Python Mido 库来创建 MIDI 文件。我发现要更改乐器,您可以program_change在给定频道的轨道上添加一条消息:

这可行,但我只能访问 GM MIDI Level 1 乐器。我也想访问 GM MIDI Level 2乐器。

请使用代码向我展示如何执行此操作。我通过谷歌搜索找到的所有 MIDI 文档都令人难以置信的混乱。

0 投票
1 回答
31 浏览

ios - 如何在 Touch Down 实现时防止 SwiftUI 上的重新触发

我关注了这篇中型文章,以便为我的应用程序实现 on touch down/on touch up 手势控制。它可以工作,但可以在同一个元素/视图上重新触发。该应用程序是一种仪器,如果检测到另一个触摸,这会导致按键偶尔卡在触发位置。所以偶尔有些音符会卡在 on 位置并停留在那里。代码如下:

如何调整此实现,以便不会重新触发已按下的音符?

0 投票
1 回答
280 浏览

python - 如何从 Ableton Live 控制表面脚本向我的 Arduino 板发送 MIDI 数据

我正在尝试将 MIDI 数据从 Ableton Live 的控制表面脚本发送到我的 Arduino 板。

目前 Arduino 设置为记录在每个通道上收到的每条 MIDI / SysEx 消息,这就是它现在所做的一切。我可以通过使用 Live 的外部乐器来确认它是否正常工作:我将外部乐器设置为将 MIDI 发送到 Arduino 板并记录传入事件(使用 NoteOn、NoteOff、PitchBend 测试)。

但是当涉及到控制表面脚本时,什么都没有。这是我尝试过的:

我在 Live 的日志中看到了两条消息,但我的板上没有任何传入的 MIDI(Arduino RX LED 也不闪烁)。

下面是 MIDI 端口的配置:

在此处输入图像描述

我究竟做错了什么?任何帮助表示赞赏。

0 投票
1 回答
17 浏览

python-3.x - 将动画与 midi 数据同步

我正在开发一个生成动画的小程序,并且在大多数情况下,它都按预期工作。我唯一遇到问题的地方是当 midi 开始的持续时间非常短并且我的动画变得非常不同步时。

我的过程的基本轮廓是这样的:

  1. 找出当前起始点和紧随其后的起始点之间的差异(以秒为单位)。

  2. 为当前起始生成 n 帧,其中 n 为圆形(差异 * 帧速率)

但是当太多的小持续时间开始一起播放时,跟随它的整个动画就会不同步,因为所有最小的时间延迟导致在步骤 2 中舍入 n 相加。

有没有更好的方法来解决这个问题,我的动画会同步,而不管起始点的变化如何?