我有RSI问题,并尝试了30种不同的电脑键盘,这些都给我带来了痛苦.弹钢琴不会让我感到痛苦.我已经弹钢琴大约20年没有任何疼痛问题.我想知道是否有办法从MIDI键盘捕捉MIDI并输出键盘敲击.我对MIDI一无所知,但我想要一些关于如何将这个信号转换成击键的指导.
我来自使用MSC*MidiSequencer进行Delphi XE2项目的背景,并且本周末一直在玩DelphiASIOVST,因为MIDI可能足够稳定,可以用作我的核心MIDI引擎,同时也允许我支持VST插件插件.我将D16主干从SVN上拉下来,经过一些路径调整后毫不费力地编译.
我理解了很多我所看到的内容,但我想知道其他人是否在MiniHost示例应用程序中遇到MIDI文件播放问题.特别是在一个音轨旋律演奏的情况下,听起来音符会被跳过和/或稍后播放其他正在播放的音符.基本上,如果甚至根本没有播放音符,它就会被击中或错过.
我的机器上有很多专业音序器,MIDI文件很好.他们也支持VST几乎没有问题.我也知道MIDI最低级别的文件格式,并且知道文件结构是合理的.
TMidiFile可以直接播放到计算机中的标准MIDI合成器吗?我试图通过获得内置合成器的直接管道来排除VST问题.除此之外,任何人都可以使用组件集看到这些问题或者知道更多/更好的MIDI文件示例到VST?
我正在尝试将.MID文件读入Java程序,并希望将每个音符/和弦分开,以便在某种UI上显示它们.我在Java中使用Sequencer API并没有太多运气,并且尝试直接使用MidiFileReader对我来说也不起作用.我会附上我在这里使用的代码,如果有人想看到的话:
package miditest;
import java.io.File;
import java.io.IOException;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
public class Main {
public static void main(String[] args) throws InvalidMidiDataException, IOException, MidiUnavailableException{
Sequence sequence = MidiSystem.getSequence(new File("test.mid"));
// Create a sequencer for the sequence
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(sequence);
// Start playing
sequencer.start();
}
}
Run Code Online (Sandbox Code Playgroud) 我想建立一个创建MIDI声音的小应用程序.我从来没有处理过编程中的声音,所以我想从一些基本的东西开始,并且有很好的文档.我想坚持使用Python,因为我最熟悉它并且最初不想压倒自己.
我的时间在Windows和Ubuntu之间分成大约50/50,所以在两个平台上"正常工作"的东西真的很有帮助.
有什么建议?
我想编写从MIDI设备获取输入的C/C++程序.
MIDI设备使用USB连接器连接到我的PC.
我正在寻找一个(C/C++实现的)库,我可以用它通过USB端口从MIDI设备读取MIDI信号.
一旦我得到它,我很高兴操纵MIDI数据,我只是不想为它的捕获实现代码.
我打算在Windows XP上使用Bloodshed Dev-C++ IDE编写代码.
我有这些nanoKontrol的其中一个http://mustech.jpsystemsinc.netdna-cdn.com/wp-content/uploads/2008/12/kontrol.gif 并想用它上面的滑块来控制Excel,就像一个Excel表单控件滚动条.
我已经设法为VBA 修改了这段代码,但它非常不稳定.任何人都可以帮助我稳定它吗?我认为函数MidiIn_Event可能会崩溃,如果它没有足够快地返回,但我可能是错的.
提前致谢.
Public Const CALLBACK_FUNCTION = &H30000
Public Declare Function midiInOpen Lib "winmm.dll"
(lphMidiIn As Long,
ByVal uDeviceID As Long, ByVal dwCallback As Any,
ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Public Declare Function midiInClose Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare Function midiInStart Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare Function midiInStop Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare …Run Code Online (Sandbox Code Playgroud) 我想手动拥有一个根据用户需求创建MIDI文件的功能.
用户在120速度,速度100,乐器钢琴(01)和补丁49或其他任何内容上写入包含4个四分之四A4(音乐会A-440hz)和C4(每个作为分离频道)的8个小节.
根据上面的说法,MIDI文件应该如何.我的目标是学习如何创建一个生成MIDI数据的函数,然后将所有内容写入MIDI文件.
首先,我必须了解如何创建此函数或理解"MIDI文件语言",以便我可以编写它.
提前致谢.
我试图重建使用最开始写的旧节拍器应用MFC在C++来编写的.NET使用C#.我遇到的一个问题是播放用于表示节拍器"点击"的midi文件.
我在网上发现了一些关于MIDI在.NET中玩的文章,但是大多数文章似乎都依赖于有人拼凑在一起并提供的自定义库.我并不反对使用这些,但我宁愿自己理解这是如何完成的,因为它似乎应该是一个非常微不足道的练习.
那么,我错过了什么吗?或者在.NET应用程序中使用MIDI是否很困难?
这是一个发送MIDI数据的极其简单的CoreMIDI OS X应用程序.问题是它不起作用.编译好,并运行.它报告没有错误,并且不会崩溃.创建的源在MIDI监视器中可见.但是,没有MIDI数据出来.
有人能告诉我这里我做错了什么吗?
#include <CoreMIDI/CoreMIDI.h>
int main(int argc, char *args[])
{
MIDIClientRef theMidiClient;
MIDIEndpointRef midiOut;
MIDIPortRef outPort;
char pktBuffer[1024];
MIDIPacketList* pktList = (MIDIPacketList*) pktBuffer;
MIDIPacket *pkt;
Byte midiDataToSend[] = {0x91, 0x3c, 0x40};
int i;
MIDIClientCreate(CFSTR("Magical MIDI"), NULL, NULL,
&theMidiClient);
MIDISourceCreate(theMidiClient, CFSTR("Magical MIDI Source"),
&midiOut);
MIDIOutputPortCreate(theMidiClient, CFSTR("Magical MIDI Out Port"),
&outPort);
pkt = MIDIPacketListInit(pktList);
pkt = MIDIPacketListAdd(pktList, 1024, pkt, 0, 3, midiDataToSend);
for (i = 0; i < 100; i++) {
if (pkt == NULL || MIDISend(outPort, midiOut, …Run Code Online (Sandbox Code Playgroud) 我不久前制作了一个键盘应用程序,它将midi音库作为jar中的资源,并使用它来获取音库中包含的乐器名称.这似乎在使用带有suns java 6的Windows 7和使用suns java 6的linux中的机器上工作正常.但是,这似乎不适用于使用相同版本的java的windows xp的机器.似乎正在发生的getInstrumentName()是调用方法时尚未加载仪器阵列.仪器数组将填充在DefaultControl类的构造函数中(第二个代码示例).有人可以帮助我理解为什么会出现这种情况,为什么它似乎依赖于机器?
我得到这样的当前乐器名称:
data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());
Run Code Online (Sandbox Code Playgroud)
我得到并加载这样的音库:
this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
MidiSystem.getSoundbank(
getClass().getResourceAsStream("soundbank.gm")));
this.instrument=synth.getAvailableInstruments();
this.channels=synth.getChannels();
Run Code Online (Sandbox Code Playgroud)
这是调用加载名称的方法是这样的:
public String getInstrumentName(){
return instrument[selected_instrument].getName();
}
Run Code Online (Sandbox Code Playgroud)