问题标签 [midi]

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 回答
216 浏览

winapi - midiOutPrepareHeader 是一个快速调用吗?

midiOutPrepareHeader、midiInPrepareHeader 只是设置一些数据字段,还是做一些更耗时的事情?

我正在尝试决定是根据需要构建和销毁 MIDIHDR,还是维护它们的池。

0 投票
3 回答
1828 浏览

midi - 虚拟 MIDI 和 VST

我想做一个简单的 VST 插件来做到这一点:

  1. 分析音频流(音量、节拍等...)
  2. 在分析仪的输出上有触发器(例如,当音量 > 阈值时执行某些操作)
  3. 根据触发器生成 MIDI 事件

这是为了能够链接插件,即使它们不是为它设计的。例如,我可以使用音频流的包络控制压缩器的增益,只需将插件的 MIDI OUT 连接到压缩器增益按钮的 MIDI IN 即可。

问题是我不知道该怎么做。VST 中是否支持这样的直接 MIDI 连接?或者,也许我需要某种“虚拟 MIDI 设备”来进行互连?

0 投票
4 回答
13594 浏览

java - 将 Midi 音符编号转换为名称和八度音阶

有谁知道 Java 世界中存在将 midi 音符编号映射到特定音符名称和八度音阶编号的任何东西。例如,参见参考表:

http://www.harmony-central.com/MIDI/Doc/table2.html

我想将 60 号 midi 音符映射到 octave 4 中相应的音符名称 (MiddleC)。我可以为此编写一个实用程序类/枚举,但这会相当乏味。有人知道吗?

我专门用它来用 Java 编写 Tenori-On/Monome 克隆,到目前为止一切都很好......

解决方案

这就是我最终使用的:

0 投票
9 回答
5765 浏览

java - Java中的MidiUnavailableException?

我在用 Java 播放 MIDI 文件时遇到了一些问题。MidiUnavailableException (MIDI OUT transmitter not available)当我尝试玩它时,我得到的是一个。我的代码是标准的:

midiseq是一个Sequencersound1是一个InputStream

此代码适用于其他几台计算机,甚至适用于 Eclipse 以及在 JAR 文件中使用时,只是在我从命令提示符启动它时不起作用。我下载了一个更稳定的 Java midi 应用程序,它抛出了同样的异常。

它不可能是硬件问题,因为 Eclipse 可以毫无问题地运行它,也不可能是编码问题,因为它可以在其他计算机上正常运行。甚至这一行代码也会抛出这个异常:

提前致谢。

编辑:我的操作系统是 Windows Vista。在我问这个问题之前,我已经下载了最新的 JRE 和 JDK(我认为是 1.6.0_13)。

编辑:代码:

打印“Sequencer 类已加载。”

但是这段代码:

抛出MidiUnavailableException.

另外,这段代码:

给了我这个:

0 投票
6 回答
1975 浏览

midi - XG MIDI 文件格式

我有一把 Yamaha MIDI 吉他,当我播放使用 XG MIDI 标准编码的 MIDI 文件时,它会导致吉他上的某些灯打开和关闭。我正在尝试确定导致此问题的 MIDI 事件,以便我可以在不使用 MIDI 文件的情况下以编程方式发送相同的事件(就像我可以发送 Note On (144) 或 Note Off (128) 命令一样)。

但是,虽然我能够找到 MIDI 协议的副本,但我无法找到 XG MIDI 协议。除了尝试将所有可能的命令发送到设备直到找到适当的命令之外,有没有办法确定导致灯改变状态的 MIDI 事件是什么?或者在某个地方我可以获得 XG MIDI 协议的副本?

0 投票
4 回答
2949 浏览

c# - .NET 中的精确计时

我刚刚看到这个问题,其中一个答案表明System.Diagnostics.Stopwatch应该只用于诊断性能,而不是用于生产代码。

在这种情况下,在 .NET 中获得精确计时的最佳方法是什么?我目前正处于使用NAudio的 MIDI 输出功能构建一个非常简单的MIDI 音序器的早期阶段。我希望能够以尽可能少的抖动将 MIDI 消息发送到(比如说)1/10 秒。这是可行的,还是像上下文切换这样的事情会毁了我的一天?

我目前在控制台应用程序中有一些代码,它Stopwatch在以 150bpm 生成 1/16 音符流时不断调用和计算抖动。在这种情况下,抖动非常低。但是,我将把它移到另一个线程,所以我不知道这种情况是否会继续存在。

0 投票
4 回答
838 浏览

java - 在网页中发送 MIDI 信息

如何在网页中播放单个 MIDI 音符?

我知道两种方法:

  1. 编写一个 ActiveX 控件。然后它只适用于Windows。我很久以前就写过ActiveX控件,但现在没人喜欢安装它们。

  2. 编写一个 Java 小程序。如果用户已经安装了 Java,但许多用户禁用了小程序,这没关系。我就是这样做的,您可以在 newfweiler.com 上看到结果——如果它恰好适用于您的特定设置。您至少需要 Java 5,尽管我想如果必须的话,我可以用 Java 1.2 重写它。“实时音序器”和“Java 声音合成器”对我不起作用;我认为您必须安装波表或其他东西才能使它们工作。

大多数用户都安装了 Flash,但我查看了 Flash 和 Flex 文档并没有看到任何与 javax.sound.midi 等效的内容。

有几种方法可以在网页中播放 MIDI 文件,您可以找到“Javascript Pianos”,它可以在您按下一个键时播放一个单音符的 MIDI 文件。您不能同时弹奏多个音符或按住键长音符。

我要做的是等效于 javax.sound.midi.Receiver.send(midiMsg, -1) 只使用大多数人通常在机器上安装的东西。

0 投票
1 回答
544 浏览

.net - 如何使用 .NET compact framework 2.0 播放 MIDI 文件?

我已经尝试过了,但它不起作用(即使我指定 .wav 文件作为输入)。也试过这个,但仍然没有声音。尽量避免使用 .wav,因为如果与 midi 相比,它们会很大。

我正在尝试使用 VS 2008 模拟器。那是问题吗?我应该在真实硬件上进行测试吗?

在 .NET compact framework 2.0 上播放 midi 的最佳方式是什么?

0 投票
2 回答
774 浏览

windows - 使用 MME 和 DirectMusic 时的 ANSI 或 OEM 代码页?

我注意到,当从 MME 读取 MIDI 端口名称时,这些名称是使用 ANSI 代码页编码的多字节字符串,我的应用程序默认使用它。从 DirectMusic 驱动程序接收这些名称时,这些名称是使用 OEM 代码页编码的宽字符串。有关代码页的快速复习,请参阅Raymond Chen 的这篇文章。

在我的德语系统上,这意味着当使用当前代码页(原来是 ANSI 代码页)时,我从 MME 获得“Audiogerät”,从 DirectMusic 获得“Audioger ö t”,后者是错误的。当我将该姓氏视为 OEM 编码时,此问题将得到解决。

那么我怎么知道使用哪个代码页来解码这些名称呢?为什么来自 DirectMusic 的名称编码不同?它来自USB驱动程序吗?COM 框架?直接音乐?在读取我的 MIDI 端口名称时,如何确定使用哪个代码页?

有关信息:

  • 我使用MultiByteToWideChar()andWideCharToMultiByte()函数来执行转换,并使用CP_ACPandCP_OEMCP作为要使用的代码页的参数。
  • 我用来midiInGetDeviceCaps()从 MME 子系统获取 MIDI 端口信息...
  • ...并MIDIINCAPS.szPname使用CP_ACP(ANSI)代码页进行转换。
  • 我用来IID_IDirectMusic8::EnumPort()从 DirectMusic 获取端口信息...
  • ...并DMUS_PORTCAPS.wszDescription使用CP_OEMCP代码页进行转换。
0 投票
1 回答
4216 浏览

midi - Midi TEMPO 信息如何应用于其他曲目?

一个相当简单的问题,我有一个猜测,但我无法在任何地方找到明确的答案。

背景:我有一个多轨 MIDI 文件,第一条轨道中有 TEMPO 控件。我需要将其他轨道中的 ABSOLUTE_TICK 计数转换为“秒”(从 midi 文件开头偏移的小数秒)。

我有公式将 ABSOLUTE_TICK 与基于文件的 PulsePerQuarterNote (PPQN) 的秒数关联到速度(每四分音符的 MS)。

问题是:第一个音轨(音轨 0)中的 TEMPO 变化是否适用于所有其他音轨?

如果是这样,那么当我解析其他轨道时(例如轨道 4,它有我感兴趣的 NOTE_ON 和 NOTE_OFF 消息),我需要保持手指指向轨道 0 中并行的 TEMPO 变化。是对的吗?

谢谢,

标记