Click here to Skip to main content
15,887,683 members
Articles / Artificial Intelligence

Developing MIDI applications with DirectMusic

Rate me:
Please Sign up or sign in to vote.
4.91/5 (45 votes)
11 Apr 2008LGPL325 min read 610.3K   9.5K   147  
A wrapper class library for the DirectMusic MIDI.
/*
 __  __  _  ____  _   _________ __  ______ _  ____  __  _
|  \/  || ||  _ \| | (  /_   _//  \/_   _/| |/    \|  \| | 
| |\/| || || |_| | |  \ \ | | | <> | | |  | || <> || |\  | 
|_|  |_||_||____/|_| /___)|_| |_||_| |_|  |_|\____/|_| \_| 

////////////////////////////////////////////////////////////////////////
  
  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
 
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
 
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
Copyright (c) 2002-2003 by Carlos Jim�nez de Parga  
All rights reserved.
For any suggestion or failure report, please contact me by e-mail: 
cjimenez@servitel.es
  
///////////////////////////////////////////////////////////////////////  
Version: 1.9.1
Module : Record.h
Purpose: Defines the header implementation for the CRecord class
Created: CJP / 4-10-2002
History: CJP / 3-24-2003 
	
	  // 11-10-2002 Update

	  1. Solved problems with Midi port selection
	  
	  2. Improved built-in keyboard
		
	  3. Supervised the multithread-safe application	

	  4. Improved the interactive interface 
	  
	  5. Application restructured to the new CDirectMidi wrapper
	  
	  6. Added the Microsoft Software Synthesizer

	  7. Added keyboard support 
	  
	  8. Fixed bugs in classes design 
	  
      9. Improved playback thread using Events
	  
	  10. Guide line on the list control

	  // 6 - 10 - 2003 Update
	   
	  11. Added exception handling
	  
	  12. Included the piano keyboard control

	  13. Enhanced implicit multitask synchronization system
	  
      14. Simplified the class hierarchy 

	  15. Program structure grouped into new classes
	  
      16. Fixed bugs in calls to DirectMidi library

	  17. Program released under GNU (General Public License) terms	
	
*/

#ifndef CRECORD_H
#define CRECORD_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

const DWORD TOTAL_MEMORY = 10000 ;	// Maximum memory size for recording (~80KB)


class CRecord
{
	typedef struct Msg					// Structure to store midi messages
	{	
		DWORD dwMsg;			// MIDI 1.0 message
		DWORD dwTime;			// Note duration in milliseconds
	};
	
	SYSTEMTIME Start;			// Record start time
	SYSTEMTIME Current;			// Record current time
	Msg NoteArray[TOTAL_MEMORY];	// Array of messages
	DWORD nIndex,nTotal,nMsgRecorded;	// Index of the message in the array
public:	
	CRecord();
	~CRecord();
	void GetStartTime();					// Reset the recording
	void StoreMidiMsg(DWORD dwMsg);		// Store a given midi message in current time
	DWORD GetIndex();				// Get the index in the array
	DWORD GetStoredMessage();		// Get stored Midi DWORD pointed by the index	
	DWORD GetTotalMsgMemory();		// Returns the total memory allocated for recording
	void ResetIndex();				// Set the index to 0 (Start)
	void StepIndex();				// Step the index one unit
	DWORD GetTotalRecorded();		// Returns number of messages recorded
	DWORD GetTime(DWORD dwIndex);	// Returns the time of a given index
};	

#endif

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Software Developer
Spain Spain
I obtained my PhD degree in Computer Graphics at the National Distance Education University (UNED) in October 2019. I also hold a Ms. degree in Software Engineering and Computer Systems and a Bs. degree in Computer Science from the National Distance Education University (UNED).
I have been employed as a C++ software developer in several companies since year 2000.
I currently work as a Tutor-Professor of Symbolic Logic, Discrete Math and Java Object-Oriented Programming at UNED-Cartagena (Spain) since 2015.

Comments and Discussions