OpenMIDIProject

Home | News | Forums | Documentations | FAQ | Links | Contributors | Author

Japanese | English | Chinese


FAQ (for users)

Is there a plan to support Audio feature ?

No, openmidiproject is specialized to MIDI. To add audio feature makes software or library too complex and heavy, so there is no plan of audio feature. For editing audio data, please use audio editor like audacity. For editing both audio and MIDI data at the same time, please use DAW like Cubase or Sonar.

Is there a plan to support VSTi feature ?

No, VSTi's specification is not released and the VSTi's I/O system is different from MIDI. And I like to play a hardware's synthesizer, therefore I don't use VSTi. If you want to use VSTi, please use MIDI loopback software such as MIDIYoke / LoopBe1 and VSTiHost with openmidiproject's software.

Is there a plan to product Linux (such as Ubuntu) version ?

No, musicians or artists using linux is very few.

Can I use these programs or libraries for commercial use ?

Yes, you can. But there is little support except forums. And WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. If you modify this program and redistribute, you must release it with the source code, under the terms of LGPL or GPL. If you distribute your program which is dynamic link to the library (*.dll), you don't need to release it under the terms of LGPL or GPL, but you must not prohibit to reverse engineering your program in your license.

Bad sound quality.

MIDI doesn't define any sound quality. MIDI gives only the operation information to the instrument. Perhaps your using instrument is bad sound quality, like Microsoft GS Wavetable Synth. If you want to get a high quality sound, you may purchase hardware's synthesizer. At 2013 year, there is a Roland Integra7 as a rack module, or KORG KROME as a synthesizer with a keyboard.

I have a MIDI data that sounds perfectly in WindowsXP, but doesn't sound partly in WindowsVista / Windows7 / Windows8.

If you are using Microsft GS Wavetable Synth shipped with windows, this probrem often occurs. The reason is that because wrong tone number (CC#0's value, CC#32's value, and Program Change's value) is specified in the MIDI data. So you need to modify these value to existing tone number in GS's specification, by using Sekaiju. In windows XP, even if a wrong tone number is specified, that sounds in the substitute tone, so this probrem has been ignored for a long time.

In the other hands, If the MIDI data is not for Microsoft GS Wavetable synth (e.g. that MIDI data is for Roland SC-88Pro), it is natural that part of MIDI data doesn't sound, because the using instrument is each different. To hear this MIDI data in Microsoft GS Wavetable synth, also you need to modify these value to existing tone number in GS's specification.

Microsoft GS Wavetable Synth is not found in the MIDI Out Device listbox.

In some computers, unless you connect a headphone or loudspeakers, Microsoft GS Wavetable synth doesn't appear. Please connect them and then start program.

If you don't find Microsoft GS Wavetable Synth when you bought the computer, maybe manufacture's registory setup is wrong. You may fix as following. Please be careful if you've installed the other MIDI devices, they may cause error. Plaease be careful that editing registory is very dangerous, and it is no warranty.

1. In case of 32bit OS, move to [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersin\Drivers32]. In case of 64bit OS, move to [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersin\Drivers32].

2. Fix as following.

I changed language and restarted the program, but language isn't changed.

It is blocked to save configuration file (*.ini file) in the c:\program files, c:\program files(x86), c:\windows folder by windows because of security (UAC). Please put the program in the other folder. Also it takes about 2 seconds to write configuration file (*.ini) since quit application. Please start application about 2 seconds later.

Setup configuration can't be saved.

It is blocked to save configuration file (*.ini file) in the c:\program files, c:\program files(x86), c:\windows folder by windows because of security (UAC). Please put the program in the other folder. Also it takes about 2 seconds to write configuration file (*.ini) since quit application. Please start application about 2 seconds later.

Sekaiju : How do I convert format 0 / 1 ?

Please select "File" - "Property..." from the menu, and then select the format in the property dialog, ant then click OK. As well, Sekaiju's default format is 1.

Sekaiju : How do I convert time base or resolution ?

Please select "File" - "Proeprty..." from the menu, and then select time base or resolution, and then click OK. As well, Sekaiju's default time base is TPQN base and the resolution is 120 ticks per quarter note. Sekaiju can select 1~960 ticks per quareter note as a TPQN base, or 1 ~ 255 subframes per frame as a SMPTE base.

Sekaiju : How do I insert or modify tempo, time signature, or key signature ?

Please open event list window, and then show only the first track, and then, insert or modify tempo or key signature, or time signature manually. Tempo can also insert or delete piano roll window's graph area, if you want to insert many tempo event. As well, Sekaiju's default tempo is 120, default time signature is 4/4, default key signature is 0# major (C major). Please be careful that time signature and key signature does not affect to any playing, they affect only to the view (time counter, measure or beat line, accidental, and so on).

At Sekaiju3.5 or later, a new feature to insert, modify or delete these event by using dialog box from track list window, piano roll window, or musical score window is implemented. Please right click at the area where tempo, time signature or key signature is displayed, and then select popup menu.

Sekaiju : How do I select tone other than piano?

In the left pain of the track list window, it has CC#0, CC#32, and program number column, you can select tone other than piano at there. If you are using Microsoft GS Wavetable Synth including Windows, by default, CC#0=0, CC#32=0, program number=0-piano1 is selected at except channel 10, and CC#0=0, CC#32=0, program number=0-standard1 is selected at channel 10(drum).

Sekaiju : How do I change the tone color in the middle of MIDI data ?

Please open event list window, and insert CC#0, CC#32 and program change where you want to change. In the track list window, you can only select the track's the first CC#0, CC#32 and program change for convenience, though it is not track's property. But it is not recommended to change the tone color in the middle of track except in the case of you have a special reason.

Sekaiju : I can't select non GS tone color.

Sekaiju's default instrument definition file is Microsoft GS Wavetable Synth. You need to obtain your using instrument's Cakewalk instrument definition file (*.ins) from the internet, and then put it in the instrument folder, and then select the suitable instruemnt from the "Setup" - "MIDI device and instrument..." menu. If you can't find your using instrument's Cakewalk instrument definition file (*.ins), please turn off "Search only avail tone when CC#0, CC#32, or Program Number is up or downed" from the "Setup" - "Options..." menu, and the value will be increased or decreased at 1 step. Or please input the number by the ten key directly.

Sekaiju : Sekaiju doesn't save track's color, output port, output on/off and so on.

Standard MIDI file (*.mid) can't keep track's property because of the specification. Please save as Sekaiju sequence file (*.skj) for working. By the way, if you use multiple output port, you may insert port prefix event in the each track, because some sequencers recognize the output port from standard MIDI file (*.mid). And please see also the user's manual to know which infromation is saved or not in the each format. Sekaiju sequence file can save all information.

Sekaiju : I opened a standard MIDI file, and then saved as a standard MIDI file immediately, but the binary is different.

Sekaiju doesn't modify the format or the timebase and doesn't insert, modify or remove the event without message box if you are not editing. Perhaps omitting or not omitting of the running status causes the difference of the binary. According to the standard MIDI file's specification, it is allowed to omit the first byte of each event if the event's kind is same to the previous event's kind.

SekaijuFHow do I write Unicode string in the text, marker or lyrics event ?

Please write "{@UTF-16LE}" at the start of string and then write following string. Once write, it is applied to the following same kind's events in the same track. Character code can be selected from {@latin} {@jp} {@UTF-16LE} {@UTF-16BE}. If you don't specify anything, the character code is treated as {@latin} by right, but in Sekaiju, it depends on the text encoding that you selected in the "Options" - "Language..." - "Text Encoding".

Sekaiju can treat unicode string, but please be careful that in a MIDI sequencer or player that doesn't support unicode, unicode string can't be shown correctly. This is MIDI's extended specification (RP-026) and it is available only in lyrics event.

Sekaiju : How do I insert accidental (sharp or flat) in the musical score window ?

While inserting or dragging note, please right click, and the note is sharpen or flatten. Which sharppen or flatenten is depend on the key signature at the time.

Sekaiju : How do I insert a rest in the musical score window ?

Sekaiju doesn't have a function to input a rest. This is a specification because MIDI data doesn't define any rest sign. An area without note will works as rest.

Sekaiju : How do I edit a design of a note in the musical score window ?

Sekaiju doesn't have any function to edit a design of a note. This is a specification because MIDI data doesn't define any graphical design. For editing musical notation, please use musical notation editor such as musescore.

Sekaiju : Sekaiju sometimes causes time delay while playing.

Perhaps the load of drawing is too high. Especially when changing the page of the view, many graphics or text is drawn, so it causes time delay at the time. If you need to play smooth for recording and so on, please minimize all the window in the sekaiju for not to draw anything. Even if you use high class graphic card, it may be high performance at the 3D or DirectX graphic, but it may be low performance at the 2D GDI grpahic like sekaiju.

Additionally, to put a lot of events at the same time often causes time delay, so please put each events separatelly as possible. Especially, in the first measure, many events for initialization such as control change are often put, so please be careful.

Sekaiju : VSQ file generating by Sekaiju can't be read.

Sekaiju doesn't have any ability to import or export vocaloid sequence file(*.vsq), though in the file open / save dialog, you can select vsq file. That is for research of vsq file, because the VSQ file's file structure is the same to the standard MIDI file(*.mid)'s one. But each event's meaning or format is definitely different from standard MIDI file's one. So you must make each event very carefully in accordance to the strict VSQ's specification.

MIDISelector : MIDI selector sometimes lose one device from the list.

Windows doesn't recognize the MIDI device. If the device is USB device, once remove and insert the usb cable, and try again. Or restart windows. Be careful that the installed device driver is suitable to your windows version. Sometimes wrong device driver works well accidentally though it does not support windows vista or windows 7. And please be careful 32bit / 64bit version is each different.

FAQ (for developers)

How do I open project work space (*.mdp) (*.sln) in Visual Studio ?

Some software and libraries older than 2013/09/01 are developed with Micrisoft VisualC++ 4.0 standard edition, so you can only open project work space (*.mdp) in VisualC++ 4.0 / 5.0 / 6.0 standard edition or higher. Other newer software and libraries are developed with Microsoft VisualC++ 2008 Standard Edition Service Pack1, so you can only open solution (*.sln) in VisualC++ 2008 Service Pack1 / 2010 / 2012 / 2013. As well, if you don't need to complie or build them, and you only need to use dll, you may use any version of VisualC++.

How do I use DLL in Visual Studio ?

Here is a usage of MIDIIOLibrary, MIDIDataLibrary, MIDIClockLibrary, MIDIStatusLibrary, and MIDIInstrumentLibrary's DLL in the C/C++ of Visual Studio.

1. How to make Project workspace

2. How to make link to dll (Explanation case MIDIDataLibrary)

How do I make simple MIDI player ?

Please see following simple console MIDI player's example. This program uses MIDIIOLibrary, MIDIDataLibrary, and MIDIClockLibrary.

/* Simple Console MIDI Player example */

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include "..\\MIDIIO\\MIDIIO.h"
#include "..\\MIDIData\\MIDIData.h"
#include "..\\MIDIClock\\MIDIClock.h"
/* Don't forget to add MIDIIO(d).lib to your project */
/* Don't forget to add MIDIData(d).lib to your project */
/* Don't forget to add MIDIClock(d).lib to your project */

int _tmain () {
  long lTimeMode = 0;
  long lTimeResolution = 0;
  long lTempo = 60000000 / 120; /* [microsec/quarter note] */
  long lEndTime = 0;
  long lOldTime = 0;
  long lCurTime = 0;
  MIDIOut* pMIDIOut = NULL;
  MIDIData* pMIDIData = NULL;
  MIDITrack* pMIDITrack = NULL;
  MIDIEvent* pMIDIEvent = NULL;
  MIDIClock* pMIDIClock = NULL;

  pMIDIOut = MIDIOut_Open (_T("Microsoft GS Wavetable Synth"));
  if (pMIDIOut == NULL) {
    _tprintf (_T("MIDIOut Open failed.\n"));
    return 0;
  }

  pMIDIData = MIDIData_LoadFromSMF (_T("test.mid"));
  if (pMIDIData == NULL) {
    _tprintf (_T("MIDIData Load failed.\n"));
    return 0;
  }

  lTimeMode = MIDIData_GetTimeMode (pMIDIData);
  lTimeResolution = MIDIData_GetTimeResolution (pMIDIData);
  lEndTime = MIDIData_GetEndTime (pMIDIData);

  pMIDIClock = MIDIClock_Create (lTimeMode, lTimeResolution, lTempo);
  if (pMIDIClock == NULL) {
    _tprintf (_T("MIDIClock_Create failed.\n"));
    return 0;
  }

  _tprintf (_T("Now playing...\n"));
  MIDIClock_Start (pMIDIClock);

  while (lCurTime <= lEndTime) {
    lCurTime = MIDIClock_GetTickCount (pMIDIClock);
    forEachTrack (pMIDIData, pMIDITrack) {
      forEachEvent (pMIDITrack, pMIDIEvent) {
        long lTime = MIDIEvent_GetTime (pMIDIEvent);
        if (lOldTime <= lTime && lTime < lCurTime) {
          if (MIDIEvent_IsTempo (pMIDIEvent)) {
            long lTempo = MIDIEvent_GetTempo (pMIDIEvent);
            MIDIClock_SetTempo (pMIDIClock, lTempo);
          }
          if (MIDIEvent_IsMIDIEvent (pMIDIEvent) ||
            MIDIEvent_IsSysExEvent (pMIDIEvent)) {
            unsigned char byMessage[256];
            long lLen = MIDIEvent_GetLen (pMIDIEvent);
            MIDIEvent_GetData (pMIDIEvent, byMessage, 256);
            MIDIOut_PutMIDIMessage (pMIDIOut, byMessage, lLen);
          }
        }
      }
    }
    lOldTime = lCurTime;
    Sleep (5);
  }
  MIDIClock_Stop (pMIDIClock);
  _tprintf (_T("Now end.\n"));

  MIDIClock_Delete (pMIDIClock);
  MIDIData_Delete (pMIDIData);
  MIDIOut_Close (pMIDIOut);
  return 1;}
How do I compile / build Sekaiju, MIDITester, or AutoDrum in myself ?

Sekaiju, MIDITester, and AutoDrum requires MIDIIOLibrary, MIDIDataLibrary, MIDIClockLibrary, MIDIStatusLibrary, and MIDIInstrumentLibrary, so you must download all these libraries, and then rename the folder name as below, and then place these folder as below, otherwize it will cause compile error or link error (Because my develop environment is following structure).


(C)2002-2017 kuzu / openmidiproject OSDN