问题标签 [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 回答
94 浏览

raspberry-pi - CSound 乐器的补丁存储

我的 CSound 乐器通过 MIDI 控制器消息更新了一些参数。它需要能够存储和检索参数集(补丁)并更新 MIDI 补丁更改消息上的参数。

除了从 Python 操作码构建它之外,还有其他 CSound 方法吗?

我想我可以在 PureData 中构建一个补丁管理器,但是这会对 Raspberry PI 造成超出实用性的负担吗?当不忙于更改补丁时,PureData 程序会完全占用 CPU 吗?

0 投票
1 回答
2555 浏览

java - MIDI - 使用来自不同银行的乐器更改 MidiMessage 程序

我使用的默认合成器的音库包含各种不同的乐器。例如,这个代码片段......

...打印以下内容:

MidiChannel我可以通过, programChange方法和演奏这些库中的任何一种乐器noteOn,就像这样(演奏库 1152 中的乐器 14,“Carillon”):

我想将程序更改事件添加到序列的轨道,以便我可以在序列中演奏“钟琴”乐器。我试着用一个ShortMessage

但是,当我在银行 1152 中寻找工具 14 时,这会将工具更改为银行 0 中的工具 14(“Tubular-bell”)。尝试将 ShortMessage 构造函数中的最后两个参数中的任何一个更改为 1152 会导致javax.sound.midi.InvalidMidiDataExceptionfor数据字节值超出范围。其他 MidiMessage 子类似乎也不包含从其他银行加载工具的选项。

如何在 MidiEvent 的 MidiMessage 中使用来自不同银行的乐器?

0 投票
2 回答
424 浏览

c# - Midi-dot-net 声音播放两次

首先我不是专业程序员,但只是一个对优秀的库 Midi-Dot-Net 有一点问题的学生。

我使用 Midi-Dot-Net 库在 Visual Studio 中用 C# 语言编写一个简单的应用程序。但我遇到了一个非常令人困惑的问题。

我在 Form1.cs 中放了一些代码

因此,我放置了新的字符串并将其命名为 nutka,而 nutka 将在我的 USB MIDI 键盘上接收按下的音符的名称。然后我放置了 IF 语句,并将 nutka 与“A0”(键盘上的第一个音符)进行了比较。

然后,如果它是“A0”,我按下我的 outputDevice 播放特定音符。它会播放,但会播放两次,一次 - 当我按下键盘上的键(带有音符 A0)时,第二次 - 当我释放该键时。

我做了一个断点,public void NoteOn(NoteOnMessage msg)并注意到一个应用程序在这里返回两次并播放了两次该音符,但仍然不知道为什么。

还有一件事,有一种方法public void NoteOff(NoteOffMessage message),但它似乎不起作用。

我实在想不通,我正在寻求任何帮助。

更新 ...更新... 更新

出现了另一个问题(由于CLChris Dunaway的建议和Justin的逐步解释,第一部分得到了解决)。

谢谢贾斯汀 :) 我认为没有任何问题的生活是不可能的 :)

clock.Schedule只能播放 MIDI 声音,但我想播放示例钢琴音符(wav 文件格式),在 4-5 周内,我的大学将帮助我为每个音符录制自己的钢琴声音。我也想同时播放它们。

我以为一切都会好起来的,但现在……同时播放有问题。我试图检查三种可能性:

1)我试图从我拥有的基本音符库中播放钢琴声音并使用 SoundPlayer:

我将它用于具有不同 SoundPlayer 名称(取决于音符名称)的每个音符语句,我注意到的是 - 我不能同时播放音符。

2)所以我使用了下一个 WMP 库和 WindowsMediaPlayer:

例如:

好的......它同时播放,但看起来我播放的音符越多,或者我只是播放一首歌,我得到的延迟就越大,最后我的程序卡在播放任何东西......

3)我试图使用 Microsoft.DirectX.AudioVideoPlayback:

我开始了我的程序,按下一个键,然后砰!崩溃并显示错误消息:

当然我没有忘记使用:

现在我不知道我能一次又一次地做些什么——我需要一个有经验的人的帮助:)

0 投票
0 回答
412 浏览

c# - Midi-dot-net同时播放音符并具有高延迟

在用 noteOn 键事件解决问题后(谢谢贾斯汀),我注意到另外两个问题:延迟太高和不可能同时播放。

首先我使用 IF 语句:

这很好用,没有延迟,但它也允许我只使用 MIDI Pitch 而不是 .wav 文件。

当我使用其他可能性播放音符时(来自添加到资源的文件):

看起来和工作正常,但 SoundPlayer 不允许我同时播放音符。

我尝试的另一种方法是 WMP 库:

好的......它同时播放,但发生了一件有趣的事情,我播放的音符越多,延迟越大(我按下一个键和我听到声音之间的延迟),最后我的程序卡在播放任何东西(仍然收到 noteOn 消息)...看起来内存缓冲区突然消失了或类似的东西?

我试图检查的最后一件事是 DirectX 库:

构建和编译 - 没有问题,没有任何错误,但是当我按下我的 midi 设备上的一个键时,应用程序返回消息:

我的问题是- 是否可以将我的文件 (.wav) 添加到解决方案资源并延迟同时播放它们,这将允许我像使用普通钢琴一样演奏?普通钢琴我的意思是低延迟,几乎不明显的延迟。

0 投票
0 回答
49 浏览

vb.net - 在第一个字节之后将 3 个字节组合在一起

我有一个名为“MyHex.txt”的文本文件,该文件具有这些值

我正在用我的 Sub 像这样打开我的文件,并尝试检查数组中的第一个字节是否为“F0”,然后设置值。我需要将接下来的三个字节组合在一起,然后是接下来的三个字节,依此类推

更新:需要每三个字节对值进行分组。所以它们可以被解码

使用

更新 2:

删除 Sysex“标题”后,我留下了这个

第一次转储:

第二次转储

第 29 个字节和最后一个字节是唯一改变的字节。

0 投票
1 回答
204 浏览

java - 导出到 .jar 文件时,MIDI 乐器听起来不同

我制作了一个使用 java 声音 API 中的 MIDI 包合成声音的 java 程序,但是,当我将它导出到 .jar 文件时,播放的声音与我在 eclipse 中运行它时的声音完全不同。有谁知道它为什么这样做或如何解决这个问题?

可以在此处找到乐器列表:http ://www.hittrax.com.au/images/artists/gmgs.pdf

下面是我的一段代码

下图显示了我录制时的音频,第一个是 eclipse 上的声音,第二个是导出到 .jar 时的声音

声波

0 投票
1 回答
1727 浏览

java - 为什么我只得到一个钢琴音符(Java)?

我刚刚编写了垃圾音乐播放器的代码。每次我们给它两个整数:“乐器”和“节点”,它会播放那个乐器的节点。很简单。我试过了,但即使我更改了“乐器”(更改了输入中的 int),也只会播放钢琴音符。代码如下:

0 投票
1 回答
2127 浏览

python - 在 Python Music21 库中播放鼓声

自从我开始阅读“用计算机制作音乐:Python 中的创造性编程”一书以来已经过去了几个星期,现在我在尝试使用这个库播放鼓声时被卡住了。我正在使用 Mit 的 music21 库,因为这本书提出的那个库对我不起作用(它被简单地称为“音乐”)。这是本书用于播放低音鼓声音的代码示例:

我尝试在 music21 中使用 Hi Hat 声音做同样的事情,但没有播放声音:

任何建议都会非常有帮助,因为除了它的网页之外,网络上几乎没有关于这个库的信息。

在此先感谢朱利安!

0 投票
2 回答
2112 浏览

python - 如何使用 python 获取 midi 轨道乐器名称?

我发现的唯一方法是使用music21

但它的输出不正确:

空的地方也是一个乐器名称,它只是无法读取它,但问题不在文件中,因为我可以将它正确导入到tuxguitar。此外,music21 无法粘贴大的 MIDI 文件并卡住。我尝试了 mido 库,但没有办法获取轨道乐器,我找到了一个属性,但不知道如何使用它。

如何使用 python 解析 midi 轨道乐器?

0 投票
1 回答
1348 浏览

javascript - 使用 JavaScript 在浏览器中检测 Midi-piano 键盘事件的库

我想将 MIDI 钢琴键盘插入计算机的 USB 端口,并通过在浏览器中显示某些内容来响应按键事件。

有谁知道允许 JavaScript 与前端/浏览器中的 USB MIDI 键盘事件交互的库?

类似于:
链接到 index.html 的 script.js 文件:

谢谢!