Information
-
Patent Grant
-
5394784
-
Patent Number
5,394,784
-
Date Filed
Thursday, July 2, 199232 years ago
-
Date Issued
Tuesday, March 7, 199529 years ago
-
Inventors
-
Original Assignees
-
Examiners
- Shoop, Jr.; William M.
- Donels; Jeffrey W.
Agents
-
CPC
-
US Classifications
Field of Search
US
- 084 464 R
- 084 464 A
- 084 645
- 084 477 R
- 084 478
-
International Classifications
-
Abstract
A display module which is independent from a keyboard and can be placed above the keys of any keyboard is provided. The display module includes indicating lights which are positioned to be above each key. A separate processor module receives MIDI signals on a MIDI input board. These signals can be sent along a MIDI cable connected to the processor module, and can originate from either a keyboard, a computer, or any other MIDI compatible device. The processor ignores all but certain of the MIDI signals, keeping the operation simple. In particular, the processor responds to note on and note off signals to turn on the indicating light for a corresponding key.
Description
Attached hereto as Appendix I is a source code listing in assembly language of the program stored in the processor memory of the present invention.
BACKGROUND OF THE INVENTION
The present invention relates to devices which aid in the teaching of playing a keyboard by turning on and off lights above each key to indicate keys to be played.
A number of designs have been developed using indicating lights, such as LEDs to indicate the keys on a keyboard to be played. French published Application No. 2,479,516 shows a pad containing light emitting diodes which is positioned above the piano keys with a diode positioned above each key. A red diode is provided for white keys and a green diode for black keys. The application generally describes a microprocessor being coupled to a cassette player to somehow interpret the sounds and illuminate the appropriate key. The details of how this is done do not appear to be disclosed. The volume is used to control the light intensity.
U.S. Pat. No. 4,703,681 shows a keyboard with indicator lights above each key. A special timing circuit is disclosed which lights up the LED corresponding to the key prior to the time it is to be played, thus giving the user advance notice of the transition.
U.S. Pat. No. 4,694,723 shows a keyboard with embedded LEDs above the keys. A ROM pack with stored music is used to provide signals to the LEDs to light them up in accordance with the music to be played. Keyboard depressions are then detected, and compared with the desired timing of the key. An indication is provided to the user of whether the keys are being played properly by comparing the signals sent to the LED and the key depression signals.
U.S. Pat. No. 4,651,612 shows a keyboard with indicating lights above the keys. An auto play data ROM is used to produce signals to the LEDs to light them up and also to generate accompanying musical sounds to go with the keyboard. The key depression signals are compared to the desired depressions as indicated by the LEDs. The accompanying music is either sped up or slowed down to match the speed at which the keyboard is actually being played.
Keyboard synthesizers in other instruments which produce music have been developed. In addition, devices which input digital representations of music to a computer have also been developed. A standard has been developed for the digital communication of such musical information, called the Musical Instrument Digital Interface (MIDI) a copy of which is available from the International MIDI Association, 5316 West 57th Street, Los Angeles, Calif. 90056. Basically, the MIDI standard provides that communication is done serially and asynchronously at a rate of 31.25 kilobaud. Information is transmitted by first transmitting a status byte, followed by two nibbles. The high nibble (first four bits) indicates the type of command. The low nibble indicates one of sixteen channels. A common use for the channels is to assign them to different instruments (piano, violin, drums) reproduced by a synthesizer. Data bytes follow the status byte and are interpreted differently depending upon a particular status byte. For instance, one status byte will indicate that a note should go on, and will be followed by a data byte indicating a digital value of the note and a second data byte indicating the velocity at which a key is depressed to produce that note.
It is desirable to have a simple teaching aid for a keyboard which is compatible with the MIDI standard and does not require additional complicated timing or other circuitry and is useful with different types of keyboard synthesizers and normal pianos.
SUMMARY OF THE INVENTION
The present invention provides a display module which is independent from a keyboard and can be placed above the keys of any keyboard. The display module includes indicating lights which are, positioned to be above each key. A separate processor module receives MIDI signals on a MIDI input board. These signals can be sent along a MIDI cable connected to the processor module, and can originate from either a keyboard, a computer, or any other MIDI compatible device. The processor ignores all but certain of the MIDI signals, keeping the operation streamlined. In particular, the processor responds to note on and note off signals to turn on the indicating light for a corresponding key.
In one embodiment, up to four modules can be interconnected, with the interconnection between modules maintaining the key spacing distance. Each module covers 24 notes, approximately 2 octaves. Each display module includes decode logic for determining which LED should be illuminated in response to a coded signal provided from the processor module. The processor interrogates its output lines to determine how many display modules are connected, and adjusts the position of middle C accordingly. For a single module, middle C is positioned at the left since the typical learner will use a single hand with middle C at the left. When multiple modules are used, middle C is placed at the middle of the display modules. The location of middle C is determined using an offset stored in RAM memory on the processor module. This offset is applied to the MIDI note value received, the result of which is used to produce the coded signal indicating the LED to be illuminated.
The processor module also includes a series of DIP switches. The first four of these DIP switches are used to select which one of the MIDI channels the processor module will respond to. Another set of the DIP switches can be used to shift the position of middle C up or down by adding another shift value to that stored in RAM memory to be applied to the note values as they are received on the MIDI input port.
The present invention thus provides a light indicating display which can be used with any keyboard since it is not integral with the keyboard. In addition, the display can be adapted to different keyboard sizes by attaching separate display modules together. Each display module is identical, thus simplifying the construction and assembly for a particular keyboard.
The present invention works with MIDI digital data intended for actually reproducing the music. This data is used to activate the indicator lights by intercepting only certain types of commands relevant to the turning off and on of notes. Other commands are not used in the present embodiment. This enables the present invention to plug into any standard MIDI port without requiring any modification at all and without the instrument or computer generating the MIDI data even knowing that it is attached.
For a fuller understanding of the nature and advantages of the invention, reference should be made to the ensuing detailed description taken in conjunction with the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a perspective view showing the invention mounted on a keyboard;
FIG. 2 is a circuit diagram of the processor module of FIG. 1;
FIG. 3 is a circuit diagram of one of the display modules of FIG. 1; and
FIG. 4 is a diagram of certain standard MIDI commands.
DESCRIPTION OF SPECIFIC EMBODIMENTS
FIG. 1 shows a standard keyboard synthesizer 10 and a personal computer 12. Alternately, an acoustic piano keyboard could be used. Three display modules according to the present invention are shown, display modules 14, 16 and 18. Display module 18 is shown to illustrate what a module looks like alone, before it is mounted above the keyboard. Modules 14 and 16 are connected together, and are also connected via a ribbon cable 20 to a processor module 22.
Processor module 22 includes a MIDI input port 24 connected by a MIDI cable 26 to computer 12. Another keyboard which generates MIDI signals could be used instead of the computer. Processor module 22 also includes a MIDI through port 28 which can be connected by another MIDI cable 30 to keyboard synthesizer 10.
Processor module 22 thus provides a path for a standard MIDI connection between computer 12 and synthesizer 10, which will operate in a standard manner without knowledge of the intervening processor module. The processor module will pick off appropriate signals to activate the LEDs on display modules 14 and 16 to indicate a particular key to be played.
Display module 14 includes a first row of LEDs 32 which correspond to the white keys of the keyboard. A second row of LEDs 34 correspond to the black keys. Display 14 includes an input port 36 for connection to ribbon cable 20, and an output port 38 for connecting to the next display module 16. Each display module is identical, and the connection between the modules maintains the spacing between the keys.
FIG. 2 is a schematic diagram of processor module 22 of FIG. 1. MIDI input port 24 is coupled through an optical isolator 40 to an input of a processor 42 and also to a MIDI through port 28. Processor 42 is preferably an Intel 8351/8751 microcomputer with the program set forth in Appendix I stored in it. Processor module 22 includes an output port 44 for coupling to ribbon cable 20. A number of DIP switches 46 are coupled to data inputs of the processor 42 to select one of 16 MIDI channels and provide an optional shift of the position of middle C as discussed below.
FIG. 3 is a schematic diagram of one of the display modules 14. Each display module has identical circuitry. The display module has an input port 36 and an output port 38. Three decoding logic circuits 54, 56 and 58 are coupled to the inputs. Outputs of these logic circuits are connected to individual LEDs 32, 34. As can be seen from the lettering below the EEDs, approximately two octaves of LEDs are provided, starting with C on the left and running through B on the right.
In operation, when power is first applied processor 42 will initialize the system. As part of the initialization, the processor will read the return lines RET0-RET3 coupled to its input from ribbon cable port 44 (FIG. 2). As can be seen in FIG. 3, the line RET0, pin 15, is grounded. The processor will read this and determine that a first display board is connected if a ground is detected. Otherwise, if no connection is detected, no display module is connected. The return lines are passed through to the output port 38 after being shifted as can be seen by the portion of lines in circle 62. Pin 15 at the output is connected to return line 1, pin 16 of the input port. Thus, if a second module is connected to output port 38, it will ground pin 15 as well, but this will be provided to pin 16 of the input connector 36 of the first module. In similar fashion, the third and fourth display modules can be connected and will provide their indicating signals on return lines RET2 and RET3, respectively.
A similar arrangement is used for the enable lines when the processor decides to send a signal to enable a particular display module. Enable lines EN1-EN4 are connected to pins 11-14 of input port 36. EN1 is connected to all three of decoder circuits 54, 56 and 58. EN2-EN4 are shifted and provided to the output port 38 on pins 11-13. Thus, EN2 will be provided to the EN1 line of the second board. Similarly, EN3 will be provided to the EN1 line of the third board, and EN4 to the EN1 line of the fourth board.
The particular decoder logic block to be selected on a particular display module board is determined by the clock signals, which are CLKLOW, CLKMID, and CLKHIGH, on pins 1, 3 and 5 respectively of port 50. CLKLOW is connected to the clock input of decoder circuit 54, CLKMID to decoder 56 and CLKHIGH to decoder 58.
Finally, the particular LED to be selected is determined by a three bit code SEL0-SEL2 which is provided from input port 36 to the decoder circuits 54, 56, 58. The three bit code is decoded by the decoder circuit to select one eight data outputs D0-D7 to turn on or off the LED connected to that data output.
FIG. 4 illustrates the MIDI protocol format along with some of the more common commands. The first two commands shown, the NOTE OFF and NOTE ON commands, are the main ones used by the present invention. Many manufacturers use the NOTE ON status byte and simply follow it with a string of data bytes, with the velocity value of zero indicating that the note should really be off if that is the case.
Controller messages are indicated by 1011, as shown in the table. The first data byte then contains the particular control or command. A subset of the controller messages are called Channel Mode messages. One used in initialization is controller 123, indicating all notes off. The processor of the present invention recognizes channel mode commands and ignores all other controller commands. The present invention also looks for certain system exclusive messages. These are non-standard messages a particular manufacturer may use. These start with a system-exclusive status byte (11110000), the manufacturer's ID code (0nnnnnnn) the data of the message, and end with an end of system-exclusive byte (11110111).
Appendix I attached hereto shows one embodiment of the source code for the processor of the present invention. On page 6, the data table "board-shift" stores a number of shift values which are subtracted from received note numbers to accomplish the middle C shift. For instance, for one board, the value of 60 is subtracted from the note number. For two boards, 36 is subtracted from the note number. On top of these shifts, an additional shift can be accomplished by the DIP switches described earlier.
The software for this embodiment of the invention is split into four modules/libraries. These modules are grouped in routines to keep similar routines tightly grouped together. DRIV8051.ASM is the main program and controls interface between all of the libraries. MIDI.LIB is the library of routines controlling the MIDI port. SERIAL.LIB is the library for the serial port, including the serial interrupt service routine. Finally, DISPLAY.LIB stores routines for the display interface including turning notes off and on. All of these routines work together to control the hardware from MIDI input to the final display output.
Several variables are used for control, storage, and buffers. The three buffers are internal stack, for the processor to store internal status and location information, a list of keys that are currently on, and a stream of characters form the serial (MIDI) port. Finally, a small group of independent variables are used to store information about serial string length, MIDI commands and channels, and size of the display.
When the MIDI-Lights instrument is first turned on, it executes a group of initialization instructions. It defines a starting register bank, initializes the serial port, checks for a display section to be connected, and enables the serial section of the processor.
Once all elements of the instrument are initialized, a command is sent to the display section to turn all LEDs off, since all notes are assumed to start off. Internal variables related to MIDI and errors are cleared. Next, the processor determines how many LEDs are available in the display, based on how many 24 notes indicator boards were found when the display section was initialized. The lowest and highest key to display is also computed.
The channel is initialized to zero, which corresponds to MIDI channel 1. The main loop is kept as small as possible to keep system response time to note on or off messages as fast as possible. The main loop begins by looking at the manual channel select switches. If a channel has been changed, the instrument selects the new channel and turns off all notes from the old channel. Next, the main loop looks for any character waiting in the serial buffer. If no character is found, the program jumps to the beginning of the loop and starts again. If a character is found in the buffer, the program enters the MIDI logic routines. When the program return from the MIDI routines, it jumps to the beginning of the loop and repeats the process again.
Each library has a specialized group of routines for its function. MIDI.LIB has a large group of routines to support the MIDI logic. LITSTRIP.LIB and SERIAL.LIB also have display and serial support routines, respectively.
MIDI.LIB--Despite the appearance of many routines in the MIDI library, they are all an integral part of a large singular routine. This routine is a "state-processor." As characters are received in strings, they are examined one at a time. When the program enters this "state-processor", the processor has a specific list of valid characters which are valid. If a character is invalid, the message is invalid, and is ignored. Some characters may interrupt the MIDI messages, such as timing or reset commands. These characters must be filtered out before they enter the state-processor, because they will cause the state-processor to incorrectly abort a message.
Once a character is determined to be a valid character for a specific state, the program moves to the next state, and returns to the main loop. However, some states, when they receive a valid character will turn notes off or on and then reset the state-processor to the beginning state to wait for a new message to begin.
LITSTRIP.LIB--The three routines in this library all support the display section of the instrument. Key Off is used to turn an LED off when a note off message has been received. The Key On routine similarly turns a note on. Finally, the Test Display routine is used to initialize the display section. The routine counts how many 24 notes indicator boards are connected to the display, and returns the number to the main program's initialization section.
SERIAL.LIB--This library is the smallest of the three, but it is the heart of the hardware interface to MIDI. The three routines are almost totally independent of each other, and are highly optimized for the instrument.
The Set Serial routine initializes the baud rate and buffers for the serial stream of characters from MIDI.
Getsch is a routine to get a serial character from the buffer. If the routine finds a character in the serial buffer, it collects it from the buffer, updating buffer control variables, and returns it to the program. If no character is found, a flag is set, and a null is returned to the program.
The Serial Interrupt Service routine is totally independent of the main program. It acts as a second program, that is started when a character is received from the MIDI port, executes and ends. When it begins, it saves all vital information and selects a new register bank. This is to keep from destroying information used by the main program and other libraries. It puts the character into the buffer, restores the stored information and ends.
As will be understood by the those familiar with the art, the present invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. For example, the number of LEDs per board or the way in which the signals are routed between the connectors could be varied. A board could be used for the strings of a guitar or some other musical instrument. Also, the particular software routine could be varied or implemented in hardware. Accordingly, the disclosure of the preferred embodiment of the invention is intended to be illustrative, but not limiting, of the scope of the invention which is set forth in the following claims. ##SPC1##
Claims
- 1. A device for use with a separate musical instrument, comprising:
- a processor module having a standard Musical Instrument Device Interface (MIDI) input port, a processor having input lines coupled to said MIDI input port, and an output port having a plurality of output lines coupled to output pins of said processor;
- at least a first display module having an input port with a plurality of input lines corresponding to said output lines of said processor module, a plurality of lights, each of said lights being spaced to cot:respond to the inputs of said musical instrument, decoding logic having inputs coupled to said input lines and output lines coupled to said lights for activating said lights in accordance with coded signals received from said processor module; and
- said processor being programmed to respond to certain MIDI signals received at said MIDI input port by generating output signals on said output lines including said coded signals indicating which of said lights is to be controlled and indicating whether said light is to be turned on or off.
- 2. The device of claim 1 wherein said musical instrument is a keyboard, and said inputs of said musical instrument are keys.
- 3. The device of claim 2 wherein said first display module includes an output port coupled to said input port and further comprising:
- a second display module, identical to said first display module, having an input port removably connected to said output port of said first module such that a spacing between a last light of said first module and a first light of said second module equals a spacing between two keys on said separate keyboard.
- 4. The device of claim 3 wherein each of said first and second display modules includes a plurality of select lines coupled between said input and said output ports, the position of said select lines being shifted between said input and output ports.
- 5. The device of claim 3 wherein each of said first and second display modules includes a plurality of return lines coupled between said input and output ports, one of said return lines being coupled to a voltage to indicate to said processor the presence of said board, the position of said return lines being shifted between said input and output ports.
- 6. The device of claim 3 wherein said processor is programmed to place middle C at the leftmost light when a single display module is connected, and otherwise to place middle C near the middle of the display modules.
- 7. The device of claim 6 wherein said placement of middle C is accomplished with a plurality of shift values stored in a memory on said processor module, said processor being programmed to select one of said shift values in accordance with the number of connected display modules, said shift value being applied to each note number received on said MIDI input port.
- 8. The device of claim 7 further comprising a plurality of switches on said processor module for providing an additional shift input for middle C to said processor.
- 9. The device of claim 2 further comprising means, coupled to saidprocessor, for indicating which one of sixteen MIDI channels said processor will respond to.
- 10. The device of claim 9 wherein said processor is programmed to provide, in response to a MIDI status word with binary 1001 followed by a four bit number corresponding to said one MIDI channel, a light on signal on one of said output lines and a coded signal to select one; of said lights corresponding to a note number data byte following said status word, shifted by a shift amount stored in said processor to place middle C at a desired one of said lights.
- 11. The device of claim 10 wherein said processor is programmed to provide, in response to a MIDI status word with binary 1000 followed by a four bit number corresponding to said one MIDI channel, a light off signal on one of said output lines and a coded signal to select one of said lights corresponding to a note number data byte following said status word, shifted by a shift amount stored in said processor to place middle C at a desired one of said lights.
- 12. The device of claim 11 wherein said processor is programmed to provide said coded signals in response to additional note number data bytes without additional status bytes, with an on signal being provided unless a velocity data byte following said note number data byte is zero, with an off signal being provided in response to such zero velocity data byte.
- 13. The device of claim 2 wherein said processor module further comprises a MIDI thru port for presenting all MIDI signals received at said MIDI input port.
- 14. A music teaching device for use with a separate keyboard, comprising:
- a processor module having a standard Musical Instrument Device Interface (MIDI) input port, a processor having input lines coupled to said MIDI input port, and an output port having a plurality of output lines coupled to output pins of said processor;
- at least a first display module having an input port with a plurality of input lines corresponding to said output lines of said processor module, a plurality of lights, each of said lights being spaced to correspond to the keys of a keyboard, decoding logic having inputs coupled to said input lines and output lines coupled to said lights for activating said lights in accordance with coded signals received from said processor module;
- said processor being programmed to ignore certain MIDI signals received at said input port and, in response to note on and note off signals received at said MIDI input port, generating output signals on said output lines including said coded signals indicating which of said lights is to be controlled and indicating whether said light is to be turned on or off;
- means, coupled to said processor, for indicating which one of sixteen MIDI channels said processor will respond to;
- said processor being programmed to provide, in response to a MIDI status word with 1001 followed by a four bit number corresponding to said one MIDI channel, a light on signal on one of said output lines and a coded signal to select one of said lights corresponding to a note number data byte following said status word, shifted by a shift amount stored in said processor to place middle C at a desired one of said lights;
- said processor being programmed to provide, in response to a MIDI status word with binary 1000 followed by a four bit number corresponding to said one MIDI channel, a light off signal on one of said output lines and a coded signal to select one of said lights corresponding to a note number data byte following said status word, shifted by a shift amount stored in said processor to place middle C at a desired one of said lights; and
- said processor being programmed to provide said coded signals in response to additional note number data bytes without additional status bytes, with an on signal being provided unless a velocity data byte following said note number data byte is zero, with an off signal being provided in response to such zero velocity data byte.
- 15. A music teaching device for use with a separate keyboard, comprising:
- a processor module having a standard Musical Instrument Device Interface (MIDI) input port, a processor having input lines coupled to said MIDI input port, and an output port having a plurality of output lines coupled to output pins of said processor;
- a first display module having an input port with a plurality of input lines corresponding to said output lines of said processor module, a plurality of lights, each of said lights being spaced to correspond to the keys of a keyboard, decoding logic having inputs coupled to said input lines and output lines coupled to said lights for activating said lights in accordance with coded signals received from said processor module, and an output port coupled to said input port;
- said processor being programmed to ignore certain MIDI signals received at said input port and, in response to note on and note off signals received at said MIDI input port, generating output signals on said output lines including said coded signals indicating which of said lights is to be controlled and indicating whether said light is to be turned on or off;
- at least a second display module, identical to said first display module, having an input port removably connected to said output port of said first module such that a spacing between a last light of said first module and a first light of said second module equals a spacing between two keys on said separate keyboard;
- each of said first and second display modules including a plurality of select lines coupled between said input and said output ports, the position of said select lines being shifted between said input and output ports;
- each of said first and second display modules including a plurality of return lines coupled between said input and output ports, one of said return lines being coupled to a voltage to indicate to said processor the presence of said board, the position of said return lines being shifted between said input and output ports;
- said processor being programmed to place middle C at the leftmost light when a single display module is connected, and otherwise to place middle C near the middle of the display modules.
- 16. The device of claim 15 wherein said placement of middle C is accomplished with a plurality of shift values stored in a memory on said processor module, said processor being programmed to select one of said shift values in accordance with the number of connected display modules, said shift value being applied to each note number received on said MIDI input port.
- 17. The device of claim 16 further comprising a plurality of switches on said processor module for providing an additional shift input for middle C to said processor.
US Referenced Citations (14)
Foreign Referenced Citations (1)
Number |
Date |
Country |
2479-516 |
Mar 1980 |
FRX |