OpenMIDIProject

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

Japanese | English | Chinese


FAQ (for users)

A message "This PC is protected by Windows." and I can't execute.

In recent Windows, by the SmartScreen feature, exe files downloaded from the Internet may not be able to be executed. If you get this message, you can execute it by clicking "Detail Information" and then clicking "Run". Please be careful that you may have downloaded a fake on a dummy site.

Also, please right-click zip file and select "Properties", and then check on "General" tab's "Security : This file came from another computer and might be blocked to help protect this computer" 's "Unblock", and then use it.

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 / loopMIDI and VSTiHost with openmidiproject's software.

Is there a plan to product Linux or Mac OS 10 version ?

No. But It is reported that by using WINE, Sekaiju works normally on the Linux or Mac OS 10.

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 (Sekaiju is MPL2.0). 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.

Sound quality is so bad.

MIDI sequencer or player doesn't output sound.MIDI sequencer or player gives only the operation information to the instrument. Perhaps the instrument that you are using, like Microsoft GS Wavetable Synth, is bad sound quality. If you want to get a high quality sound, you may purchase hardware's synthesizer. At 2013 year, there are synthesizers such as Roland JUNO, YAMAHA MOTIF or KORG KROME.

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 or delete tempo, time signature, or key signature ?

Here shows some way. Also, Sekaiju's default tempo is 120, default time signature is 4/4, default key signature is 0# major (C major). And 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).

a) In the track list window or piano roll window or musical score window, please right-click on the area shown "■120.00 4/4 0#", and then popup menu to insert, modify or delete tempo, time signature or key signature will appear.

b) In the piano roll window's graph area at below, in the first track, you can draw tempo's graph intermittently .

c) In the event list window, show only the first track, you can insert, modify or delete tempo or key signature or time signature event manually and singly. To specify sharp, input '#' or to specify flat, input lower case 'B'. To specify major, input "major" or to specify minor, input "minor".

Sekaiju : How do I select a voice 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). Also, in MIDI, Please be careful that the voice array is different in each module or synthesizer. If you select wrong number, the voice comes no sound. Also, to show exact voice name, you should select your MIDI module's instrument definition file (*.ins).

▼Track List Window

Track Output Output Port Output Channel View Mode CC#0 CC#32 Program Number
2 on 1-Microsoft GS Wavetable Synth 1 Normal 0 0 48-Strings1
11 on 1-Microsoft GS Wavetable Synth 10 Drum 0 0 48-Orchestra
Sekaiju : How do I change the voice in the middle of MIDI data ? / A voice changing doesn't work well.

Please open event list window, and insert CC#0, CC#32 and program change where you want to change. These three events must be put in this order sequencially. 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. Also, in MIDI, Please be careful that the tone array is different in each module or synthesizer. If you select wrong number, the voice comes no sound. Also, to show exact voice name, you should select your MIDI module's instrument definition file (*.ins).

▼Event List Window (Case of normal track)

Track Measure:Beat:Tick Event.Kind Channel Value1 Value2 Value3
2- 00001:02:000 Control Change 1 0-Bank Select MSB 0 -
2- 00001:02:010 Control Change 1 32-Bank Select LSB 0 -
2- 00001:02:020 Program Change 1 48-Strings - -

▼Event List Window (Case of drum track)

Track Measure:Beat:Tick Event.Kind Channel Value1 Value2 Value3
11- 00001:02:000 Control Change 10 0-Bank Select MSB 0 -
11- 00001:02:010 Control Change 10 32-Bank Select LSB 0 -
11- 00001:02:020 Program Change 10 48-Orchestra - -
Sekaiju : I can't select other than GS voice. / The voice name is wrong.

Sekaiju's default instrument definition file is Microsoft GS Wavetable Synth. You need to obtain your MIDI module's instrument definition file (*.ins) from the internet etc, 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 MIDI module's 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. Also, in MIDI, Please be careful that the tone array is different in each module or synthesizer. If you select wrong number, the voice comes no sound. Also, to show exact voice name, you should select your MIDI module's instrument definition file (*.ins).

Sekaiju : I want to use channel 11 as a drum track.

The way is diffrent by the module or synthesizer you are using. In some module or synthesizers, you had only to simply select drum's program number. In GM module, Drum is fixed to Channel 10, so changing is impossible. In GS module such as Microsoft GS Wavetable Synth or Roland SC-88, though Drum is fixed to Channel 10, by writting following system exclusive data, you can change channel 11 into drum track. The first line means GS Reset. For detail, please see your module's manual.

▼Event List Window

Track Measure:Beat:Tick Event.Kind Channel Value1 Value2 Value3
1- 00001:01:000 System Exclusive n/a F0 41 10 42 12 40 00 7F 00 41 F7
1- 00001:01:060 System Exclusive n/a F0 41 10 42 12 40 1A 15 02 0F F7
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:How 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.

▼Event List Window : How to force character code.

Track Measure:Beat:Tick Event.Kind Channel Value1 Value2 Value3
1- 00001:01:000 Text n/a {@latin}Just make a contract with me, and become a Magical Girl!
1- 00001:01:030 Text n/a {@jp}僕と契約して魔法少女になってよ!
1- 00001:01:060 Text n/a {@UTF-16LE}成为魔术少女我的契約!
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 ?

The software and libraries earlier than 2013/09/01 are developed with Micrisoft VisualC++ 4.0 standard edition, so you can open project work space (*.mdp) in VisualC++ 4.0 standard edition. The others earlier than 2020/12/31 are developed with Microsoft Visual Studio 2008 Standard Edition SP1, so you can open solution (*.sln) in Visual Studio 2008 SP1. The others later than 2021/01/01 are developed with Microsoft Visual Studio 2015 Community SP3, so you can open solution (*.sln) in Visual Studio 2015 Community SP3. 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)2000-2024 kuzu All rights reserved.