EP1057170A4 - Verfahren und apparat zum generieren musikalischer effekte - Google Patents

Verfahren und apparat zum generieren musikalischer effekte

Info

Publication number
EP1057170A4
EP1057170A4 EP99903458A EP99903458A EP1057170A4 EP 1057170 A4 EP1057170 A4 EP 1057170A4 EP 99903458 A EP99903458 A EP 99903458A EP 99903458 A EP99903458 A EP 99903458A EP 1057170 A4 EP1057170 A4 EP 1057170A4
Authority
EP
European Patent Office
Prior art keywords
note
pattem
data
musical
pitch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
EP99903458A
Other languages
English (en)
French (fr)
Other versions
EP1057170A1 (de
Inventor
Stephen Kay
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Publication of EP1057170A1 publication Critical patent/EP1057170A1/de
Publication of EP1057170A4 publication Critical patent/EP1057170A4/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/0091Means for obtaining special acoustic effects
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/02Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/02Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos
    • G10H1/04Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos by additional modulation
    • G10H1/053Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos by additional modulation during execution only
    • G10H1/057Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos by additional modulation during execution only by envelope-forming circuits
    • G10H1/0575Means for controlling the tone frequencies, e.g. attack or decay; Means for producing special musical effects, e.g. vibratos or glissandos by additional modulation during execution only by envelope-forming circuits using a data store from which the envelope is synthesized
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/18Selecting circuits
    • G10H1/20Selecting circuits for transposition
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/18Selecting circuits
    • G10H1/26Selecting circuits for automatically producing a series of tones
    • G10H1/28Selecting circuits for automatically producing a series of tones to produce arpeggios
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/36Accompaniment arrangements
    • G10H1/40Rhythm
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/36Accompaniment arrangements
    • G10H1/40Rhythm
    • G10H1/42Rhythm comprising tone forming circuits
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/101Music Composition or musical creation; Tools or processes therefor
    • G10H2210/141Riff, i.e. improvisation, e.g. repeated motif or phrase, automatically added to a piece, e.g. in real time
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/155Musical effects
    • G10H2210/161Note sequence effects, i.e. sensing, altering, controlling, processing or synthesising a note trigger selection or sequence, e.g. by altering trigger timing, triggered note values, adding improvisation or ornaments, also rapid repetition of the same note onset, e.g. on a piano, guitar, e.g. rasgueado, drum roll
    • G10H2210/185Arpeggio, i.e. notes played or sung in rapid sequence, one after the other, rather than ringing out simultaneously, e.g. as a chord; Generators therefor, i.e. arpeggiators; Discrete glissando effects on instruments not permitting continuous glissando, e.g. xylophone or piano, with stepwise pitch variation and on which distinct onsets due to successive note triggerings can be heard
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/155Musical effects
    • G10H2210/195Modulation effects, i.e. smooth non-discontinuous variations over a time interval, e.g. within a note, melody or musical transition, of any sound parameter, e.g. amplitude, pitch, spectral response, playback speed
    • G10H2210/221Glissando, i.e. pitch smoothly sliding from one note to another, e.g. gliss, glide, slide, bend, smear, sweep
    • G10H2210/225Portamento, i.e. smooth continuously variable pitch-bend, without emphasis of each chromatic pitch during the pitch change, which only stops at the end of the pitch shift, as obtained, e.g. by a MIDI pitch wheel or trombone
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/155Musical effects
    • G10H2210/265Acoustic effect simulation, i.e. volume, spatial, resonance or reverberation effects added to a musical sound, usually by appropriate filtering or delays
    • G10H2210/295Spatial effects, musical uses of multiple audio channels, e.g. stereo
    • G10H2210/305Source positioning in a soundscape, e.g. instrument positioning on a virtual soundstage, stereo panning or related delay or reverberation changes; Changing the stereo width of a musical source
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/325Musical pitch modification
    • G10H2210/331Note pitch correction, i.e. modifying a note pitch or replacing it by the closest one in a given scale
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2210/00Aspects or methods of musical processing having intrinsic musical character, i.e. involving musical theory or musical parameters or relying on musical knowledge, as applied in electrophonic musical tools or instruments
    • G10H2210/341Rhythm pattern selection, synthesis or composition
    • G10H2210/366Random process affecting a selection among a set of pre-established patterns
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/045Special instrument [spint], i.e. mimicking the ergonomy, shape, sound or other characteristic of a specific acoustic musical instrument category
    • G10H2230/251Spint percussion, i.e. mimicking percussion instruments; Electrophonic musical instruments with percussion instrument features; Electrophonic aspects of acoustic percussion instruments, MIDI-like control therefor
    • G10H2230/275Spint drum
    • G10H2230/285Spint drum tomtom, i.e. mimicking side-mounted drums without snares, e.g. in a drumkit
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/045Special instrument [spint], i.e. mimicking the ergonomy, shape, sound or other characteristic of a specific acoustic musical instrument category
    • G10H2230/251Spint percussion, i.e. mimicking percussion instruments; Electrophonic musical instruments with percussion instrument features; Electrophonic aspects of acoustic percussion instruments, MIDI-like control therefor
    • G10H2230/275Spint drum
    • G10H2230/305Spint drum snare, i.e. mimicking using strands of snares made of curled metal wire, metal cable, plastic cable, or gut cords stretched across the drumhead, e.g. snare drum, side drum, military drum, field drum
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/045Special instrument [spint], i.e. mimicking the ergonomy, shape, sound or other characteristic of a specific acoustic musical instrument category
    • G10H2230/251Spint percussion, i.e. mimicking percussion instruments; Electrophonic musical instruments with percussion instrument features; Electrophonic aspects of acoustic percussion instruments, MIDI-like control therefor
    • G10H2230/321Spint cymbal, i.e. mimicking thin center-held gong-like instruments made of copper-based alloys, e.g. ride cymbal, china cymbal, sizzle cymbal, swish cymbal, zill, i.e. finger cymbals
    • G10H2230/325Spint cymbal crash, i.e. mimicking thin-edged cymbals designed to produce a loud, sharp "crash", either mounted on a stand and played with a drum stick, e.g. crash cymbal, or played in pairs by hand, e.g. clash cymbals
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/045Special instrument [spint], i.e. mimicking the ergonomy, shape, sound or other characteristic of a specific acoustic musical instrument category
    • G10H2230/251Spint percussion, i.e. mimicking percussion instruments; Electrophonic musical instruments with percussion instrument features; Electrophonic aspects of acoustic percussion instruments, MIDI-like control therefor
    • G10H2230/321Spint cymbal, i.e. mimicking thin center-held gong-like instruments made of copper-based alloys, e.g. ride cymbal, china cymbal, sizzle cymbal, swish cymbal, zill, i.e. finger cymbals
    • G10H2230/331Spint cymbal hihat, e.g. mimicking high-hat cymbal; Details of the pedal interface, of the pedal action emulation or of the generation of the different sounds resulting from this pedal action
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/045Special instrument [spint], i.e. mimicking the ergonomy, shape, sound or other characteristic of a specific acoustic musical instrument category
    • G10H2230/251Spint percussion, i.e. mimicking percussion instruments; Electrophonic musical instruments with percussion instrument features; Electrophonic aspects of acoustic percussion instruments, MIDI-like control therefor
    • G10H2230/351Spint bell, i.e. mimicking bells, e.g. cow-bells
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2240/00Data organisation or data communication aspects, specifically adapted for electrophonic musical tools or instruments
    • G10H2240/011Files or data streams containing coded musical information, e.g. for transmission
    • G10H2240/046File format, i.e. specific or non-standard musical file format used in or adapted for electrophonic musical instruments, e.g. in wavetables
    • G10H2240/056MIDI or other note-oriented file format
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H2250/00Aspects of algorithms or signal processing methods without intrinsic musical character, yet specifically adapted for or used in electrophonic musical processing
    • G10H2250/131Mathematical functions for musical analysis, processing, synthesis or composition
    • G10H2250/211Random number generators, pseudorandom generators, classes of functions therefor

Definitions

  • Electronic musical instruments that can perform automatic arpeggios are well known, in which data of depressed keys in a keyboard are stored in shift registers, and the tones of the depressed keys are selected one-by-one by scanning the shift registers.
  • the means of selecting the order of the tones are generally very simple and produce very repetitive, mechanical sounding musical phrases.
  • electronic musical instruments that provide more complicated methods of selecting data from the shift registers, such as basing the choice and of data and direction of movement on previously received data.
  • the resulting patterns while more complicated, still sound repetitive and mechanical and are of limited variety.
  • the musical pattern of notes must be constructed in non-real-time, or entered from a keyboard in a cumbersome step-entry fashion.
  • the rhythm, duration and accent pattern steps may contain a contiguous random range corresponding to values in a lookup table.
  • no means of mathematically weighting the random choice is provided other than assigning more than one location in the lookup table to the same value.
  • the values within the steps are not independently selectable, and there is no way to repeat a certain random sequence if desired.
  • the rhythmic and tonal patterns resulting from the use of the disclosed randomness are unpredictable and difficult to utilize in a convincing musical fashion.
  • Electronic musical devices are also well known, in both hardware and software form, that are capable of recording and playing back a performance from a keyboard or other controller as MIDI.
  • MIDI MIDI
  • many traditional musical effects such as guitar strumming .and harp glissandi are difficult to program in a convincing fashion from a keyboard-type controller.
  • the MIDI Standard provides for the pitch bend message, which is used to bend the pitch of a note or notes while they are being sustained.
  • Many popular keyboards provide a lever or wheel that is used to bend the pitch in this manner. This can be used to imitate various bending techniques utilized by stringed instrument players (e.g. guitarists) and ethnic instrument players (e.g. the bending of a shakuhachi), among others. Furthermore, it can be used to simulate gliding from one pitch to the next. Many of these techniques generally require bending to a previously played pitch, bending to a pitch to be played next by the user, or bending to a precise musical pitch. However, it is traditionally difficult for a musician to perform these bending effects convincingly due to the nature of the pitch bend wheel or other provided lever and the degree of coordination required.
  • the present invention of a general purpose computer-based system for generating information related to music includes a set of available data items, the data items representing a characteristic of the music, at least one step, the step including a subset of the set of available data items, a pool within each step representing a set of at least two selected data items, each data item being independently selectable to appear within the pool, and a random selector for selecting at least one of the data items from the pool for use in generating the musical information.
  • the method of the present invention of general purpose computer- implemented method of generating musical information related to music including a processor and an operatively coupled electronic memory, the memory storing at least one step, includes the steps of selecting a subset of data items from a set of available data items, the data items being representative of a characteristic of the music, associating the subset of data items with the step, selecting independently at least two data items from the step, the selected data items comprising a pool, selecting randomly at least one of the data items from the pool, and returning the selected data items to the processor for use in generating the musical information.
  • Another embodiment of the apparatus for a general purpose computer-based system for generating musical information related to music includes a random selector for controlling a process of generating a sequence of musical information wherein the random selector comprises a pseudo-random number generator, the pseudo-random number generator having a first seed, the seed being used to generate a first sequence of musical information and the first seed is reset so as to repetitively generate the first sequence of musical information.
  • the random selector comprises a pseudo-random number generator, the pseudo-random number generator having a first seed, the seed being used to generate a first sequence of musical information and the first seed is reset so as to repetitively generate the first sequence of musical information.
  • Another embodiment of the method of the invention of a general purpose computer-implemented method for generating musical information related to music includes the steps of selecting randomly from a first sequence of musical information at least one of a plurality of items representative of a characteristic of the music, the items being selected by a pseudo random number generator seeded with a first seed, generating a first sequence of musical information based on the plurality of items, resetting the pseudo-random number generator to the first seed at a particular point in the musical generation, selecting randomly the at least one of a plurality of items representative of a characteristic of the music, and regenerating the first sequence of musical information based on the plurality of items.
  • Another embodiment of the apparatus for a general purpose computer-based system for generating musical information related to music includes a pattern including of a plurality of sequential steps, each of the steps including at least a rhythm value indicating a time interval of the music and a tie flag, the pattern having a pattern index indicating a current step, a random selector for randomly determining a tie based upon the tie flag of at least one of a next sequential step or the current step, and wherein the current rhythm value is incremented by the rhythm value of the next sequential step and the pattern index is advanced to the next sequential step dependent upon the randomly determined tie and the pattern index is repeatedly advanced and the random determination is repeatedly performed so as to generate a sequence of rhythm values.
  • Another embodiment of the method of the invention of a general purpose computer-implemented method of generating rhythmic information related to music operating in a musical generation system comprising a pattern having at least two steps, the steps including data representing a rhythm and a tie flag, includes the steps of indicating a current step of a pattern with a pattern index, determining randomly a tie to a next step based upon the tie flag of at least one of the next step and the current step, accumulating the rhythm value of the next step to the rhythm value of the current step depending upon the randomly determined tie, and advancing the pattern index to the next step depending upon the randomly determined tie.
  • Another embodiment of the apparatus for a general purpose computer-based system for generating musical information related to music includes an input sequence of musical data stored in the electronic memory, the input sequence of music being divided into beats, the input sequence including data items representing a characteristic of the music, at least one extraction area indicative of a period of musical time spanning predetermined periods of the beats, a pool within the extraction area, the pool including at least one data item, a random selector for selecting at least one of the data items from the pool, and an output sequence of musical data including the selected data items and all other data items not included within the pool.
  • Another embodiment of the method of the invention of a general purpose computer-implemented method of generating musical information related to music operating in a musical generation system including a processor and an operatively coupled electronic memory, the memory storing at least one step, includes the steps of inputting a sequence of musical data into the electronic memory, the input sequence including data items representing a characteristic of the music, dividing the input sequence of music into beats, creating at least one extraction area indicative of a period of musical time spanning predetermined periods of the beats, selecting at least one of the data items within the extraction area, the selected data items comprising a pool, selecting randomly at least one of the data items from the pool, and outputting a sequence of musical data including the selected data items and all other data items not included within the pool.
  • Another embodiment of the apparatus for a general purpose computer-based system for generating musical information related to music includes an input sequence of musical data stored in the electronic memory in an electronic musical format comprising musical events, the input sequence of music being divided into a musical time reference, at least one extraction area indicative of a period of musical time spanning predetermined periods of the musical time reference, at least one event group including at least one musical event within the extraction area, the event group being determined by distance between events according to the musical time reference, and at least one pattern comprising at least one step within the pattern, the step including at least one data item representative of a musical characteristic of the input sequence of musical data, the data item being derived from the events, the patterns being stored in the electronic memory for use in generating other musical information.
  • Another embodiment of the method of the invention of a general purpose computer-implemented method of creating patterns characteristic of musical information includes the steps of inputting a sequence of musical data stored in the electronic memory in an electronic musical format comprising musical events, dividing the sequence of musical data into a musical time reference, creating at least one extraction area indicative of a period of musical time spanning predetermined periods of the musical time reference, grouping the events into event groups within the extraction area, the event group being determined by distance between events according to the musical time reference, deriving from the event groups at least one data item representative of a musical characteristic of the input sequence of musical data, and creating at least one pattern in the electronic memory, the pattern comprised of at least one step including the data items.
  • the apparatus of the present invention for a general purpose computer-based system for generating musical output data related to input notes to create musical effects, the system includes an input note source providing input notes represented in a predetermined electronic format, an initial note series derived from the input notes according to a predetermined collection operation, each note of the initial note series including pitch data derived from the input notes, an altered note series derived from the initial note series according to a predetermined musical operation, the altered note series having an altered note series index indicating a current altered note, a rhythm pattern comprised of at least one rhythm pattern step including a rhythm data item representing a predetermined period of time, an index pattern having at least one index pattern step including an index data item indicating a variable movement of the altered note index, the rhythm pattern advancing the altered note series index according to the index data item and advancing the index pattern to a next index pattern step, and an output note series selected from the altered note series according to the altered note series index.
  • the method of the present invention for general purpose computer-based method of generating musical output data related to input notes to create musical effects includes the steps of collecting notes from the input note source according to a predetermined collection operation, creating an initial note series from the collected notes, each note of the initial note series including pitch data derived from the input notes, creating an altered note series from the initial note series, the altered note series having an altered note series index indicating a current altered note, advancing the altered note series index to a next note in the altered note series according to a rhythm pattern representing a predetermined period of time, the rhythm pattern advancing the altered note series index according to a location value held by an index pattern, advancing the index pattern to a next location value, and outputting a series of notes from the altered note series indicated by the altered note series index.
  • Another embodiment of the apparatus of the present invention for a general purpose computer-based system for generating output data related to input notes to create musical effects includes an input note source providing input notes represented in a predetermined electronic format, an initial note series derived from the input notes according to a predetermined collection algorithm, each note of the initial note series including pitch data derived from the input notes, an altered note series derived from the initial note series according to a predetermined musical operation, the altered note series having an altered note series index indicating a current altered note, an user input value indicating a movement of the altered note series index, and an output note series comprised of the user selected notes.
  • Another embodiment of the method of the present invention for a general purpose computer-implemented method of generating musical output data related to input notes to create musical effects includes the steps of collecting notes from the input note source according to a predetermined collection operation, creating an initial note series from the collected notes, each note of the initial note series including pitch data derived from the input notes, creating an altered note series from the initial note series, the altered note series having an altered note series index indicating a current altered note, inputting a user selected location value, advancing the altered note series index to a next note in the altered note series according to the location value, and outputting a series of notes from the altered note series indicated by the altered note series index.
  • Another embodiment of the apparatus of the present invention for a general purpose computer-based system for generating musical output data to create musical effects includes a set of available drum data items, the drum data items representing drum sounds, at least one drum pattern comprising at least one drum pattern step, each drum pattern step including a subset of the set of available drum data items, a pool within each drum pattern step representing a set of at least two selected drum data items, each drum data item being independently selectable to appear within the pool, a random selector for selecting at least one of the drum data items from the pool, a drum pattern index indicating one of the drum pattern steps from which the random selector selects the drum data item, a rhythm pattern comprised of at least one rhythm pattern step, the rhythm pattern step including a rhythm data item indicating a predetermined period of time, an index pattern having at least one index pattern step including an index data item indicating a variable movement of the drum pattern index, the rhythm pattern advancing the drum pattern index according to the index data item and advancing the index pattern to a next index pattern step, and an output note series selected
  • Another embodiment of the method of the present invention for a general purpose computer-implemented method of generating musical output data to create musical effects includes the steps of creating a musical effects system, the creating step further including the steps of, creating a drum pattern comprised of at least one drum pattern step having a drum pattern index, selecting a subset from a set of available drum data items to appear within the drum pattern step, selecting independently at least two of the drum data items in the drum pattern step, the selected drum data items comprising a pool, creating a rhythm pattern comprised of at least one rhythm pattern step, the rhythm pattern step including a rhythm data item indicating a predetermined period of time, and creating an index pattern comprised of at least one index pattern step including an index data item indicating a variable movement of the drum pattern index; and operating a musical effects system, the step further including the steps of advancing the rhythm pattern to a next rhythm pattern step, advancing the index pattern to a next index pattern step according to the rhythm data item, advancing the drum pattern index according to the index pattern data item, selecting randomly at least one of the
  • the apparatus of the present invention for a general purpose computer-based system for generating musical output data related to input notes to create repeated musical effects includes an input note having a pitch value represented in a predetermined electronic format, a transposition pattern having a current transposition pattern step including a transposition data item indicating a variable transposition of the input note, a transposed note having the input pitch value modified according to the transposition data item, the current transposition pattern step being advanced to a next transposition step, a rhythm pattern comprised of a current rhythm pattern step including a rhythm data item representing a predetermined period of time, the current rhythm pattern step being advanced to a next rhythm pattern step, and a scheduler for scheduling the transposed note to be output according to the rhythm data item.
  • the method of the present invention for a general purpose computer- implemented method of generating musical output data for repeating musical effects on input notes includes the step of storing an input note having an input pitch and at least one repetition of the steps of outputting the stored note with the stored pitch, transposing the stored pitch to create a transposed note according to a transposition data item, the transposition data item associated with a current transposition pattern step in a transposition pattern, the transposition pattern having a transposition pattern index indicating the current transposition pattern step, advancing the current transposition pattern step to a next transposition pattern step, determining an output time according to a rhythm data item, the rhythm data item associated with a current rhythm pattern step in a rhythm pattern, the rhythm pattern having a rhythm pattern index indicating the current rhythm pattern step, advancing the current rhythm pattern step to a next rhythm pattern step, storing the transposed note as the stored note, and scheduling the stored note to be output at the output time.
  • the method for a general purpose computer-implemented method of generating musical output data for repeating musical effects on input notes includes the steps of inputting an input note having an input pitch, outputting the input note, transposing the input pitch to create a transposed note according to a transposition data item, the transposition data item associated with a current transposition pattern step in a transposition pattern, the transposition pattern having a transposition pattern index indicating the current transposition pattern step, advancing the current transposition pattern step to a next transposition pattern step, determining an output time according to a rhythm data item, the rhythm data item associated with a current rhythm pattern step in a rhythm pattern, the rhythm pattern having a rhythm pattern index indicating the current rhythm pattern step, advancing the current rhythm pattern step to a next rhythm pattern step, scheduling the transposed note to be output at the output time, and outputting the transposed note.
  • the present invention is general purpose computer-based system for generating musical output data related to input notes to create pitch bending effects, and comprises a source of input musical notes having pitches a previous note having a start pitch provided by the source a current note indicating a destination pitch provided by the source.
  • the present invention further includes a pitch bend amount defined by a difference between the destination pitch and the start pitch, a bend window representing a period of time, the bend window having a bend window start time and a bend window end time, at least one a pitch bend interval within the bend window, the pitch bend interval defined by a bend start time and a bend end time and having at least one pitch bend increment and a pitch bend generator for selecting a start note from the current note and the previous note.
  • the invention further includes at least one pitch bend offset defined by the pitch bend amount and the pitch bend increments, and a scheduler for outputting the start note with the start pitch at the bend window start time, the scheduler outputting the pitch bend offsets
  • the general purpose computer-implemented method for generating pitch bending effects in musical output data related to input notes of the current invention comprises the steps of inputting musical notes having pitches including a previous note having a start pitch and a cu ⁇ ent note indicating a destination pitch, defining a pitch bend amount as a difference between the destination pitch and the start pitch, and creating a bend window representing a period of time and having a bend window start time and a bend window end time.
  • the method further includes creating at least one pitch bend interval within the bend window defined by a bend start time and a bend end time, creating at least one pitch bend increment within the pitch bend interval, selecting a start note from the current note and the previous note, creating at least one pitch bend offset defined by the pitch bend amount and the pitch bend increments, scheduling for output the start note at the bend window start time, the pitch bend offsets at the pitch bend increments, and sustaining the destination pitch to the bend window end time.
  • the present invention for a general purpose computer-based system for generating musical output data related to input notes to create pitch bending effects comprises a source of input musical notes having pitches, a played note having a start pitch, a set of control notes within the source operatively associated with the played note, and a null note within the set of control notes indicating the start pitch.
  • the invention further includes a control note indicating a destination pitch, a pitch bend amount defined by a difference between the null note start pitch .and the control note destination pitch, at least one pitch bend interval representing a period of time, the pitch bend interval defined by a bend start time and a bend end time, the pitch bend interval divided into at least one pitch bend increment, a pitch bend generator for calculating at least one pitch bend offset defined by the pitch bend amount and the pitch bend increments, and a scheduler for outputting the played note, the scheduler outputting the pitch bend offsets at the pitch bend increments.
  • the present invention for a general purpose computer-implemented method for generating pitch bending effects in musical
  • 11 output data related to input notes comprises the steps of inputting musical notes having pitches including a played note having a start pitch, outputting the played note, creating a set of control notes associated with the played note, the set of control notes including a null note indicating the start pitch and the control note, inputting a control note indicating a destination pitch, defining a pitch bend amount as a difference between the destination pitch of the control note and the start pitch of the null note, creating a bend window representing a period of time and having a bend window start time and a bend window end time, creating at least one a pitch bend interval within the bend window defined by a bend start time and a bend end time, creating at least one pitch bend increment within the pitch bend interval, creating at least one pitch bend offset defined by the pitch bend amount and the pitch bend increments, and scheduling for output the pitch bend offsets at the pitch bend increments.
  • this method and apparatus concern the collection of musical data from a source, the extraction of patterns from the musical data, the creation of at least one addressable series, the reading out of data from the addressable series, the generation of a repeated effect, and the generation of automatic pitch-bending effects.
  • Collecting musical data may comprise the step of retrieving a predetermined set of pitches or a set of pitches corresponding to a predetermined chord type, or collecting musical data from a source of MIDI data or other musical data for a predetermined interval of time.
  • Collecting musical data may comprise the step of recording digital audio for a predetermined interval of time, into one or more locations in memory.
  • Collecting musical data may comprise the step of retrieving a predetermined section of MIDI data or other musical data.
  • patterns can be obtained by extracting a plurality of rhythm, pitch, duration, velocity, bend, and/or pan, program, and/or other MIDI controller values from the musical data. Selective derivation of rhythm, index, cluster, strum, drum, duration, velocity, bend, and/or spatial location, voice change, and/or other MIDI controller patterns from one or more of the pluralities of the extracted values may be performed; and/or predetermined or preexisting patterns, which may have been derived from musical data or created
  • the addressable series may be a note series derived from the musical data.
  • An initial note series consisting of pitch, pitch and velocity, or pitch and null values can be extracted or derived from the musical data.
  • the initial note series may also contain identifiers of the locations in memory of digital audio data.
  • the addressable series may be a drum pattern of one or more notes and one or more null values, or pools of one or more notes or one or more notes and null values.
  • This drum pattern can be derived from the musical data, or can be created independently of the musical data.
  • the addressable series may be a pointer series created by acquiring the addresses of the pitches, or the pitches and velocities, from a selected portion of MIDI data or other musical data, at selected points in the data.
  • the individual notes of the note series with or without digital audio data location identifiers, or the individual notes and null values or pools of notes or notes and null values of the drum pattern, or the acquired addresses of pitches or pitches and velocities in the pointer series, are then placed in a plurality of memory
  • the read out of the data may be performed using multiple groups of patterns and parameters.
  • a group of patterns and parameters may contain from one to all of the various patterns and parameters used during the read out of the data.
  • the process can switch between groups of patterns and parameters on demand or according to a phase pattern, at a predetermined time, or after reading or processing a quantity of data.
  • the process of reading the data in the memory may comprise at least one application of one or more of the following steps:
  • the process of reading out of data may be independently and selectively started, stopped, paused, resumed, and initialized to starting values on demand.
  • Envelope generators utilized during the process may also be independently and selectively started, stopped, paused, and resumed.
  • the reading out of data may be accompanied by the generation of automatic pitch bending effects.
  • a group of patterns and parameters may contain from one to all of the various patterns and parameters used during the repetition of the data.
  • the process can switch between groups of patterns and parameters on demand or according to a phase pattern, at a predetermined time, or after repeating or processing a quantity of data.
  • the process of generating a repeated effect may comprise at least one application of one or more of the following steps: 1. repeating the data at specific intervals according to a predetermined or extracted rhythm pattern, rhythm modifier and rhythm offset;
  • duration, velocity, and/or pan, program, and/or other MIDI controller values from respective predetermined or extracted duration, velocity, and/or spatial location, voice change, and/or other MIDI controller patterns, over a predetermined time interval or for a predetermined quantity of repetitions;
  • the process of generating a repeated effect may be independently and selectively started and stopped on demand. Envelope generators utilized during the process may also be independently and selectively started, stopped, paused, and resumed. The generation of the repeated effect may be accompanied by the generation of automatic pitch bending effects.
  • the resultant MIDI (or other format) data can be transmitted, stored, utilized as a guide for the playback of digital audio, or otherwise used. As desired, the foregoing process can be performed one or more times simultaneously and each performance can be done independently of the others.
  • music can be generated using a hardware rendition of this method.
  • Such an apparatus can be a general-purpose computer programmed to perform the method or dedicated hardware specifically configured to perform the process.
  • the method and hardware may be used in a stand-alone fashion or as part of a system.
  • FIG. 1 is a block diagram showing an overview of a method of generating music effects.
  • FIG. 2 is a block diagram of a system of generating musical effects.
  • FIG. 3 is a block diagram of one prefe ⁇ ed embodiment of a system utilizing random pool patterns.
  • FIG. 4 is a flowchart showing an initialization routine.
  • FIG. 5 is a flowchart showing the operation of a pseudo-random number
  • FIG. 6 is a flowchart showing the operation of a repeat random sequence routine.
  • FIG. 7 is a diagram showing 4 different weighting curve types, and curves of different weights for each.
  • FIG. 8 is a diagram showing the relationship of the weighting curve to the pool size.
  • FIG. 9 is a table showing the corresponding y-values for an x-value, using an exponential equation with a weight of 30.
  • FIG. 10 is a flowchart showing the operation of a recalculate weighting table routine.
  • FIG. 11 is a flowchart showing the operation of a pool value request routine.
  • FIG. 12 is a diagram showing examples of the pool value request routine in operation.
  • FIG. 13 is a flowchart showing the operation of a select bit request routine.
  • FIG. 14 is a diagram showing examples of the select bit request routine in operation.
  • FIG. 15 is a diagram showing one example of the form for a rhythm pattern with random ties.
  • FIG. 16 is a diagram showing an example random tie rhythm pattern.
  • FIG. 17 is a diagram showing the eight possible results for the first four steps of the example random tie rhythm pattern in FIG. 16.
  • FIG. 18 is a flowchart showing the operation of a calculate new rhythm target routine.
  • FIGS. 19 and 20 are diagrams showing two different forms for a step of a drum pattern.
  • FIG. 21 is a flowchart showing the operation of a select sound routine.
  • FIG. 22 is a diagram showing examples of drum patterns according to one embodiment.
  • FIG. 23 is a diagram showing examples of drum patterns according to another embodiment.
  • FIG. 24 is a diagram of extraction areas.
  • FIG. 25 is a diagram showing examples of MIDI note data and a method of duration control.
  • FIG. 26 is a diagram showing an example of MIDI note data divided into scanning regions.
  • FIG. 27 is a diagram showing an example of MIDI drum data divided into scanning regions.
  • FIG. 28 is a diagram showing an example of data from a Standard MIDI File.
  • FIG. 29 is a flowchart of the process of extracting patterns from musical data using a single extraction area.
  • FIGS. 30, 31, and 32 are examples of the extraction of patterns from a section of MIDI data.
  • FIG. 33 is a flowchart of the process of extracting patterns from musical data using multiple extraction areas.
  • FIG. 34 shows examples of specific value patterns extracted from musical data.
  • FIG. 35 shows examples of random pool patterns extracted from musical data.
  • FIG. 36 is a flowchart of the process of extracting an initial note series from musical data.
  • FIG. 37 is an example of the process shown in FIG. 36.
  • FIG. 38 is an example of the creation of an initial note series in real-time.
  • FIG. 39 is an example of the real-time collection of musical data from a song or melody.
  • FIG. 40 is an example of a digital audio note-series.
  • FIG. 41 is a flowchart of the process of creating an altered note series.
  • FIGS. 42 and 43 are examples of altered note series generated by the process shown in FIG. 41.
  • FIG. 44 is a diagram of parameter memory locations.
  • FIG. 45 is a diagram of a three segment envelope.
  • FIG. 46 is a flowchart of the process of controlling triggering means.
  • FIG. 47 is a flowchart showing a store input note routine.
  • FIG. 48 is a flowchart showing a note trigger routine.
  • FIG. 49 is a flowchart showing a time window trigger.
  • FIG. 50 is a flowchart showing a reset note-on window routine.
  • FIG. 51 is a flowchart showing a reset note-off window routine.
  • FIG. 52 is a flowchart showing a note count trigger routine.
  • FIG. 53 is a flowchart showing a threshold trigger routine.
  • FIG. 54 is a flowchart showing a process triggers routine.
  • FIG. 55 is a flowchart of the process of reading out data from a note series using clock events.
  • FIGS. 56 and 57 are examples of the process of FIG. 55.
  • FIGS. 58, 59, 60 and 61 are examples of the process of FIG. 55 applied to a drum pattern.
  • FIG. 62 is a flowchart of the process of scaling an envelope's time range to a portion of read out data.
  • FIG. 63 is a flowchart of the process of reading out data from a note series using direct indexing.
  • FIGS. 64, 65 and 66 are examples of the process of FIG. 63.
  • FIG. 67 is a diagram showing three different bend shapes.
  • FIG. 68 is a diagram showing the effect of three different width settings on a hammer/ramp bend shape.
  • FIG. 69 is a diagram showing the difference between using the note's duration or a fixed duration as a bend window.
  • FIG. 70 is a flowchart showing the process of generating an automatic pitch- bending effect.
  • FIG. 71 is a diagram of a bend data location.
  • FIG. 72 is a flowchart of a routine used in the process of generating an automatic pitch-bending effect.
  • FIG. 73 is a diagram of an automatic pitch-bending effect generated using MIDI data.
  • FIG. 74 is a flowchart showing the process of generating an automatic pitch- bending effect according to another embodiment.
  • FIG. 75 is a diagram showing the relationship of the sliding control areas to a played note.
  • FIG. 76 is a flowchart showing the process of generating an automatic pitch-
  • FIG. 77 is a diagram of an overview of the process of generating a repeated effect.
  • FIG. 78 is a diagram of parameter memory locations.
  • FIG. 79 is a diagram illustrating the effect of eight different duration effects.
  • FIG. 80 is a diagram of a note location.
  • FIG. 81 is a diagram of a note-on/note-off location.
  • FIG. 82 is a flowchart showing the process of generating a repeated effect according to a first embodiment.
  • FIG. 83 is a flowchart showing the operation of a terminate previous effect routine.
  • FIG. 84 is a flowchart showing the operation of an allocate note location routine.
  • FIG. 85 is a flowchart showing the operation of an initialize note location routine.
  • FIG. 86 is a flowchart showing the operation of a process note-on routine.
  • FIG. 87 is a flowchart showing the operation of a calculate repeat time routine.
  • FIG. 88 is a flowchart showing the operation of a schedule note-off routine.
  • FIG. 89 is a flowchart showing the operation of a calculate duration routine.
  • FIG. 90 is a flowchart showing the operation of an original note overlap routine.
  • FIG. 91 is a flowchart showing the operation of a repeat note overlap routine.
  • FIG. 92 is a flowchart showing the operation of a send out other data routine.
  • FIG. 93 is a flowchart showing the operation of a create note-on routine.
  • FIG. 94 is a flowchart showing the operation of a replicate note-on routine.
  • FIG. 95 is a flowchart showing the operation of a modify cluster pitch routine.
  • FIG. 96 is a flowchart showing the operation of a repeat note-on routine.
  • FIG. 97 is a flowchart showing the operation of a note-on repetitions routine.
  • FIG. 98 is a flowchart showing the operation of a modify velocity routine.
  • FIG. 99 is a flowchart showing the operation of a modify pitch routine.
  • FIG. 100 is a flowchart showing the operation of a phase change routine.
  • FIG. 101 is a flowchart showing the operation of a voice change routine.
  • FIG. 102 is a flowchart showing the operation of a modify spatial location and assignable routine.
  • FIG. 103 is a flowchart showing the operation of a process note-off routine.
  • FIG. 104 is a flowchart showing the operation of a create note-off routine.
  • FIG. 105 is a flowchart showing the operation of a replicate note-off routine.
  • FIG. 106 is a flowchart showing the operation of a repeat note-off routine.
  • FIG. 107 is a flowchart showing the operation of a note-off repetitions routine.
  • FIG. 108 is an example of the process of generating a repeated effect.
  • FIG. 109 is a flowchart showing the process of generating a repeated effect according to a second embodiment.
  • FIG. 110 is a flowchart showing the operation of a process triggers routine.
  • FIG. I l l is an example of generating a repeated effect according to a third embodiment.
  • FIGS. 112 and 113 are diagrams of user interfaces for two versions of an electronic musical instrument.
  • the MIDI standard (Musical Instrument Digital Interface) is utilized to define which note is to be played and the volume (velocity) at which that note is to be played. This allows for both note pitch and note velocity information to be received from keyboards or other controlling devices, and transmitted to devices incorporating tone generation means.
  • the MIDI standard also allows for other types of data to be transmitted to such devices, such as panning information that controls the stereo placement of a note in a left-to-right stereo field program information that changes which instrument is playing, pitch bend information that controls a bending in pitch of the sound, among others.
  • the MIDI standard also provides a way of storing MIDI data representing an entire song or melody, known as the Standard MIDI File, which provides for multiple streams of MIDI data with timing information for each event.
  • the MIDI standard is well known and the Complete MIDI Detailed
  • the method of generating musical effects can be broadly divided into five steps, as illustrated in FIG. 1 : the extraction and/or selection of patterns and/or addressable series, creating an addressable series, altering an initial note series, reading out data, and generating a repeated effect.
  • One or more patterns can be obtained by extracting a plurality of rhythm, pitch, duration, velocity, bend, and/or pan, program, and/or other MIDI controller values from a source of MIDI data or other musical data 101; and selectively deriving rhythm, index, cluster, strum, drum, duration, velocity, bend, and/or pan, program, and/or other MIDI controller patterns from one or more of the pluralities of the extracted values 114.
  • These patterns may be stored as predetermined patterns 116. Certain patterns may also be stored as predetermined addressable series 120. Predetermined patterns and addressable series may also be obtained which were not extracted, but created independently and stored in memory 122.
  • An initial note series consisting of pitch, pitch and null values, pools of pitch or pitch and null values, or pitch and digital audio location identifiers, with or without associated velocity information, is collected or extracted from a source of musical data such as incoming audio data or MIDI data or stored MIDI data 104.
  • the series may equivalently be retrieved from predetermined addressable series 120, retrieved from predetermined note sets 117, and stored in memory 122 or derived from a pointer series consisting of a series of links or pointers pointing to memory addresses of pitch or pitch and velocity information in a source of musical data in memory is created 106, and stored in memory 122.
  • the initial note series created in step one can be modified by one or more operations to produce an altered note series 110, either directly from the initial note series 104 and/or as directed by the user 118.
  • a musical effect is generated on user demand by reading out the data in the addressable series 124, along with other predetermined data, stored in memory 122.
  • the reading out step is performed according to user actions 118 and various parameters, triggering means 119, envelope generators 140, pseudo-random number generator and weighting means 142, and predetermined patterns 116 or patterns extracted from musical source data 114 that control the timing of the reading out, which locations of the data in memory are read out and in which order, the amount of data being read out, and various other attributes. Automatic pitch-bending effects may be applied to the data as it is read out 138.
  • the 101 may be repeated 134, along with other predetermined data stored in memory 122.
  • the repetitions are performed according to user actions 118 and various parameters, triggering means 119, envelope generators 140, pseudo-random number generator and weighting means 142, and predetermined patterns 116 or patterns extracted from musical source data 114 that control the timing of the repetitions, the pitches of the repetitions, the velocity of the repetitions, the number of repetitions, and various other attributes.
  • the resulting data may be sent out or stored as MIDI data, or utilized to control the playback of digital audio data.
  • Step 1 can be performed independently as desired, in order to supply or supplement the preexisting patterns and addressable series 116 and 120.
  • Steps 2 through 4 can be performed sequentially in real-time, or the results of a plurality of operations of steps 2 and 3 can be stored in multiple memory locations as predetermined addressable series 120, whereupon step 4 can be performed on the predetermined addressable series without performing steps 2 and 3.
  • step 4 can be performed on other types of data stored in memory in general without being restricted to operating on an addressable series.
  • Step 5 can be performed as an additional optional step after the performance of steps 2 through 4, or may be performed independently as desired.
  • FIG. 2 A system for the generation of musical effects according to a prefe ⁇ ed embodiment is shown in FIG. 2. Attached to a buss 205 are a suitable input device such as a keyboard or other controller 200 which provides input notes, input musical source data, control data and other user input utilized by the system.
  • a suitable input device such as a keyboard or other controller 200 which provides input notes, input musical source data, control data and other user input utilized by the system.
  • a CPU 210 of sufficient processing power handles processing.
  • Song data playback means 215 capable of playing and/or recording musical data such as a sequencer is also provided.
  • a memory 220 of sufficient size stores the various predetermined and/or extracted patterns, addressable series, note sets, and other parameters. Also stored in the memory 220 are a current collection of patterns and parameters chosen by the user to be utilized in the processing, song data for the song playback means 215, and the data from which data will be read out, such as an addressable series or note series.
  • An addressable series module 230 creates addressable series in the memory 220 from musical data received from the input device 200 or song data playback means 215.
  • a pseudo-random number generator 235 allows random pool patterns and their associated weighting methods and parameters in the memory 220 to be utilized.
  • a triggering means 240 allows various actions to control the starting, stopping, and other aspects of the processing.
  • a clock event generator 245 generates timed pulses utilized during the read out of the data, based on a current tempo and base time resolution, such as 24 clocks per quarter.
  • One or more envelope generators 250 may be utilized during the processing.
  • One of the envelope generators may be utilized to control the clock event generator 245, thereby producing clock events that have an irregular nature, such as increasing or decreasing the amount of time between the clock events over a period of time.
  • a read out data module 255 reads data out of the memory 220 according to patterns and other parameters in the memory 220, and events generated by the clock event generator 245, the input device 200, and/or the song data playback means 215.
  • a repeat generator 260 generates repeated effects from the data read out by the read out data module 255, or from input notes from the input device 200 or song data playback means 215.
  • An automatic pitch bend generator 265 generates pitch bend effects under the control of the read out data module 255 or repeat generator 260, or generates pitch bend effects independently using the notes from the input device 200 or the song data playback means 215.
  • the processing of the system produces output data 290. This may be sent to an external tone generator as MIDI data, for example, or sent to an internal tone generator to produce musical tones, or stored in memory 220 in some form for later
  • Patterns are used in the reading out of data, and certain patterns may be utilized as an addressable series, from which other patterns read out data. Therefore, the methods of the invention that pertain to patterns, the use of certain pattern types, and extraction of patterns from preexisting musical data shall be described first.
  • a pattern in general is a sequential list of any length consisting of one or more steps. Each pattern may be of any length with relation to any other pattern. Each step consists of a data item or data location. The meaning of the data item or contents of the location is different for each type of pattern. For example, some patterns may represent musical characteristics such as pitch, duration, rhythm, and so on. Other patterns may represent indexes or pointers to memory locations utilized during processing, or indicate other functions of processing or processing instructions, such as a number of times to perform a certain procedure, and so on.
  • Each pattern is accessed by a pattern index, indicating the next step of the pattern to be used during processing.
  • Each pattern index can be moved independently of any other pattern index. In this example, each time a pattern is accessed, the pattern index moves to the next sequential step in the pattern, whereupon reaching the end the index is moved back to the first step.
  • Other methods of movement such as backwards, forwards/r-»ackwards, random, or movement of the index according to an algorithm (e.g. every other or every third index, or forward by two, back by one and so on) may be employed.
  • the various patterns can be part of a predetermined collection of parameters loaded as a whole by the user, or each type of pattern can be individually selected from pluralities of patterns of the same type stored elsewhere in memory.
  • the data contained in each pattern step may be held in the predetermined pattern steps, or
  • 27 may be independently selected and/or entered and changed in real-time by a user.
  • Patterns in general may be broadly divided into two different categories: specific value patterns and random pool patterns.
  • a specific value pattern in general is a pattern consisting of one or more steps, with each step in the pattern consisting of one data item, or more than one data item to be used in conjunction with each other (set of data items). Because there is only one predetermined data item or set of data items, the specific values indicated by the data items are utilized as each step of the pattern is selected for use.
  • a random pool pattern in general is a pattern consisting of one or more steps, with each step in the pattern constituting a pool of one or more data items, from which one or more selections will be made at random.
  • Each step may contain a predetermined number of other locations into which data items may be stored, and a value indicating the number of total items currently stored in the location. Therefore, each step may be considered a pool containing a certain number of actual values indicated by the data items from which to make a random selection. This shall be referred to as the actual values pool method.
  • each step may contain a single value representing a pool of possible data items from which one will be chosen at random.
  • a single "n"-bit number can represent a pool of "n” different items, where the value of 1 for each bit represents the inclusion of the bit in a pool of choices (on-bits).
  • the step is selected for use, one of the on-bits can be selected at random, and mapped to a table of corresponding data items to use. This shall be referred to as the on-bits pool method.
  • the data items represented by the steps of the pattern may form a subset of a larger set of available data items.
  • a random pool pattern step may be capable of indicating up to sixteen data items, from a total available set of 128 different data items.
  • a pseudo-random number is generated within a certain range using a seed value as a starting point. From this starting point the calculation of a string of apparently random numbers is performed. The starting point may be reset at any time, so that the same string of random numbers may be repeatedly generated. The random number is then modified by one of several weighting
  • the weighting methods may be varied in real-time. Therefore, a predetermined pattern that is repeating can be caused to produce radically different results, such as moving gradually from the generation of selections from the larger values of the pool(s) to selections from the smaller values of the pools. For example, in the case of a rhythm, this could produce a rhythm pattern that can be changed from very simple and slow to something very fast and complex, even though the same pattern is being used.
  • the data items and number of data items that the pools refer to can be changed in real-time, and the weighting methods varied in real-time, giving great control over the way that random selections are generated.
  • derived value or "value derived from a step of a pattern” shall indicate either a data item or set of data items indicated by a step of a specific value pattern, or a value derived by further processing from a data item within a step of a random pool.
  • a rhythm pattern controls when and how often data will be read out, with each derived value indicating either an absolute time value or a number of clock events between instances of reading out data.
  • An example of derived values from an absolute rhythm pattern may take the form ⁇ 2000, 1000, 1000 ⁇ where the values are specified in milliseconds, although other time divisions could be used. This indicates that some data will be read out, then 2000 ms later more data will be read out, then 1000 ms later more data will be read out, and so on.
  • An example of derived values from a clock event rhythm pattern may take the form ⁇ 12, 6, 6 ⁇ , where the values indicate a certain musical time interval with relation to a current tempo and base time resolution, such as ticks per beat, or clocks per quarter note
  • cpq 29 (cpq).
  • the values are based on a value of 24 cpq.
  • Other values may be employed for the base time resolution.
  • a count of 24 represents a quarter note
  • 12 represents an eighth note
  • 6 represents a sixteenth note, and so on.
  • the clock event rhythm pattern shown in the example ⁇ 12, 6, 6 ⁇ indicates an eighth note followed by two sixteenth notes. This indicates that data will be read out, then an 8th note later more data will be read out, then a 16th note later more data will be read out, and so on.
  • the clock event rhythm pattern is employed in this example and throughout these explanations, the absolute rhythm pattern could also have been utilized.
  • An index pattern controls which memory locations data will be read out of in a buffer of sequential data locations numbered 1 to "n," with each derived value indicating either an absolute location, or a distance to travel either forwards or backwards from a starting location.
  • An example of derived values from an absolute index pattern may take the form ⁇ 1, 5, 3, 4 ⁇ . This pattern will access the 1st item, then the 5th item, then the 3rd item, then the 4th item before repeating.
  • An example of derived values from a traveling index pattern is ⁇ 1, 2, -1 ⁇ . This indicates that given the starting location of 1, after location 1 was accessed, then location 2 (1 + 1) would be accessed, then location 4 (2 + 2), then location 3 (4 - 1), then location 4 (3 + 1) and so on.
  • the traveling index pattern is employed in this example and throughout these explanations, the absolute index pattern could also have been utilized.
  • a cluster pattern controls how many items of data will be read out, with each derived value indicating a number of items of data to read out.
  • An example of derived values from a cluster pattern may take the form ⁇ 3, 1, 2 ⁇ . This indicates that the first instance of reading out data would retrieve three items, the next instance would retrieve one item, the next instance two items, then back to the beginning of the pattern and so on.
  • the cluster pattern can be used in place of the index pattern to move through the data in one of several ways. For example, after reading three sequential items of data, the index at which to next begin reading data is advanced by three items. After reading one item of data the index is advanced by a count of one. After reading two items of data the index is advanced by a count of two and so on. This shall be referred to as a cluster advance mode of "cluster.” Alternately, a cluster advance mode of "cluster." Alternately, a cluster advance mode of "cluster." Alternately, a cluster advance mode of "cluster." Alternately, a
  • a cluster advance mode of "single” indicates that regardless of where the index is after the end of a cluster due to application of the index pattern, it will be adjusted so that a net advance of only 1 or other such constant has occ red.
  • a cluster advance mode of "cluster” indicates that at the end of the cluster, the index will remain where it is after modification according to the index pattern.
  • a velocity pattern is used to either modify, replace or select a velocity for a note about to be generated, with each derived value indicating either an absolute velocity value or an amount by which to modify a retrieved or actual velocity value.
  • An example of derived values from an absolute velocity pattern may take the form ⁇ 127, 110, 100 ⁇ . This indicates that a first note would be generated with a velocity of 127, the second note with a velocity of 110, the third with a velocity of 100, then back to the beginning of the pattern for the next note.
  • An example of derived values from a modify velocity pattern may take the form ⁇ 0, -10, -20 ⁇ .
  • the second method preserves the actual velocities with which the notes were stored while allowing a pattern of accents to be applied to them.
  • modify velocity pattern is employed in this example and throughout these explanations, the absolute velocity pattern could also have been utilized.
  • a duration pattern controls the duration of the generated notes, with each derived value indicating one of the following: an absolute time value, an absolute value in clock events, a time or clock value amount representing an amount to overlap a previous note based on the cu ⁇ ent rhythm pattern's target value, or a value representing a percentage of the cu ⁇ ent rhythm pattern's target value.
  • An example of derived values from an absolute time duration pattern may take the form ⁇ 2000, 500, 1000 ⁇ , where the values are specified in milliseconds, although other time divisions could be used. This example means the first note would be generated with a duration of 2000 ms, the second note with a duration of 500 ms, the third note
  • An example of derived values from an absolute clock duration pattern may take the form ⁇ 12, 6, 6 ⁇ , where the values indicate the number of counts assigned to each note. In this example the values are based on a value of 24 cpq. Other values may be employed for the time base.
  • the first note would be generated with a duration equivalent to an eighth note at the cu ⁇ ent tempo, the second and third notes with sixteenth note durations, then the 4th note again with an eight note duration and so on.
  • An example of derived values from an overlap time duration pattern may take the form ⁇ 50, - 100 ⁇ , where the values are specified in milliseconds.
  • the values are added to a cu ⁇ ent rhythm target value (calculated from the cu ⁇ ent rhythm pattern as described later) to achieve a new value.
  • the duration of the first note is lengthened by 50 ms thereby overlapping the next note.
  • 100 ms is subtracted, leaving a slight space between the second note .and the following note, and so on.
  • An example of derived values from an overlap clock duration pattern may take the form ⁇ 3, -3 ⁇ , using clock counts in the same fashion as the overlap time duration pattern.
  • the example would indicate the addition of a 32nd note duration to a rhythm target value for a first note and subtraction of the same amount of time from a rhythm target value for a second note, and so on.
  • an example of derived values from a percentage duration pattern may take the form ⁇ 100, 75, 150 ⁇ , where the values indicate a percentage of the cu ⁇ ent rhythm target values to be applied (i.e. 100%, 75%, and 150% of the rhythm target value of sequential notes).
  • a spatial location pattern controls the spatial location of a generated note in a stereo field or other multi-dimensional field, with each step containing spatial location data.
  • MIDI pan values are derived from the spatial location data.
  • spatial location data can be comprised of one or more data items. These data items can represent other types of data including data required to move a sound in a multi-dimensional field, or data indicative of a position in a multi-speaker setup such as Dolby Su ⁇ ound Sound or other commercial movie production systems.
  • a voice change pattern controls the tonal characteristics of the instrument which will be used as the notes are generated, in this example being a pair of derived values representing a MIDI program number and a number of operations to be performed before changing to the next value.
  • the number of operations may be a number of clock events to count, a number of notes to generate, a number of repetitions to perform, or an absolute measure of time.
  • An example of derived values from a voice change pattern may take the form ⁇ 21 12, 25 6, 28 6 ⁇ . This indicates that program number 21 is used for 12 sequential notes, program number 25 is used for the next 6 notes, program number 28 is used for the next 6 notes, and so on.
  • the voice change data may be any other specific data related to changing the instrumental sound of a tone generation module, for example from a trumpet to a violin, or from a guitar to a different type of guitar, and not be restricted to the MIDI Program change message.
  • An assignable pattern controls any other parameter of a tone generation module.
  • MIDI controller 17 values are derived, which may be assigned to control a tone module's resonant filter frequency cutoff parameter, with each derived value indicating a position from low to high cutoff, with 0 being low and 127 being high. Duplicate values in succession may be filtered on output.
  • An example of derived values from an assignable pattern may take the form ⁇ 0, 32, 64, 96, 127 ⁇ , which would cause notes to change from low cutoff to high cutoff as they are generated.
  • assignable data can refer to any type of data that may be either sent to a tone module via MIDI or that may be used internally to control some aspect of a tone module's sound generation capabilities.
  • assignable pattern is employed in this example and throughout these explanations, multiple assignable patterns controlling different aspects of a tone module in realtime can also be utilized.
  • a strum pattern controls the order in which a plurality of notes generated simultaneously will be issued, separated by a predetermined time interval.
  • the notes may be read out during one instance of reading out data, or one repetition of a generated effect.
  • Each derived value indicates a direction.
  • 0 arbitrarily indicates “up” while 1 indicates “down.”
  • an example of derived values from a strum pattern may take the form ⁇ 1, 1, 0, 0 ⁇ . This indicates that the first two groups of notes will be issued in a downward direction, i.e., with the highest pitched note in the group first and the lowest pitched note in the group last, while the next 2 groups of notes will be issued in an upwards direction, with the lowest pitched note in the group first and the highest pitched note last, and so on.
  • the strum pattern may also include in each step data indicating time interval values paired with the data indicating strum order, so that a time interval value may be derived and used to issue the notes with an individually-set amount of time delay between them. While throughout this discussion a strum pattern consisting only up or down strokes is utilized, there could be other types of strokes included, such as a partial up stroke or partial down stroke, where only portions of the plurality of notes read out or repeated are actually issued. For example, if 6 notes were to be issued, a partial up stroke might only issue the first 3 notes and a partial down stroke might only issue the last 3 notes in a downward direction.
  • a bend pattern controls an automatic pitch-bending effect applied while notes are being generated, with each derived value indicating either an absolute bend value or an amount in semitones to bend.
  • An example of derived values from an absolute bend pattern may take the form ⁇ 127, 64, 0 ⁇ . This indicates a pitch bend from center (64) or the cu ⁇ ent value to 127, then a bend from center or the cu ⁇ ent value to 64, then a bend from center or the cu ⁇ ent value to 0, and so on.
  • 7-bit precision values are shown here in the range ⁇ 0 - 127 ⁇ , 14-bit double-precision values may also be employed, in the range ⁇ 0 - 16383 ⁇ .
  • An example of derived values from a semitone bend pattern may take the form ⁇ 6, -5, 12 ⁇ , indicating a bend of 6 semitones up, then 5 semitones down, then 12 semitones up, and so on.
  • 34 derived values may also indicate bending to a next or previously generated pitch, rather than a fixed amount.
  • a derived value may also indicate that no bend is to be performed at that step of the pattern, such as a bend of 0 semitones.
  • the semitone bend pattern is employed in this example and throughout these explanations, the absolute bend pattern could also have been utilized.
  • the bend pattern may also include in each step data indicating one or more bend shapes paired with the data indicating bend amount, so that a bend shape may be derived and utilized during the automatic pitch-bending procedure.
  • the bend pattern may also include in each step data indicating a number of operations to be performed before generating an automatic pitch-bending effect, such as a number of notes to generate, a number of clock events to have passed, and so on.
  • the bend pattern may also include in each step data indicating the overall length of the resulting bend in time.
  • a drum pattern is a special type of pattern that may be utilized as an addressable series during the reading out of data. It contains pitch or pitch and null values, with or without associated velocity information.
  • a null value is a certain value that has been chosen to represent the absence of a note. Here, the value 0 is used, but other values are possible.
  • An example of derived values from a drum pattern may take the form ⁇ 36, 0, 0, 0, 38, 0, 0, 38 ⁇ , where 36 indicates a kick drum sound, 38 indicates a snare drum sound, and 0 indicates a null value (absence of a sound).
  • This type of pattern or addressable series will be refe ⁇ ed to throughout this description as a drum pattern, since it is particularly effective for creation of drum effects when used with the reading out methods which will be described later. However, this is an arbitrary designation and this type of pattern can be used in the creation of musical effects for instrument sounds other than drums.
  • a phase pattern controls the order of switching between groups of patterns and other parameters.
  • a phase is a discrete, self-contained exercise of the method, including all of the parameters and patterns used in the reading out of data or generation of repeated notes.
  • One or more such phases may be utilized and each phase may be unique.
  • the second phase could have a different rhythm pattern and/or a different cluster pattern than the first phase, and so on.
  • An example of derived values from a phase pattern may take
  • phase pattern may contain additional data indicating one or more parameters to change and new values to change them to.
  • the indicated parameters can be changed to the new values, thereby controlling other portions of the process.
  • the additional data may also indicate that procedure calls are to be made to other portions of the process, or that random seeds are to be reset to stored, repeatable values.
  • each of the patterns described may have an associated pattern modifier parameter that is used to further modify the values retrieved from the associated pattern in real-time.
  • Another example is the velocity pattern, which may have an associated velocity modifier parameter, used to calculate a velocity modification value.
  • the values derived from the steps of the patterns can be compressed, expanded, or further altered.
  • the pattern modifiers in these examples use multiplication or percentage to modify the pattern values, division, addition or subtraction could also be used as alternate methods of modification.
  • patterns may represent musical characteristics and processing instructions.
  • Pattern types that may be considered to have data items representing a musical characteristic include rhythm, velocity, duration, spatial location, voice change, bend, assignable, and drum patterns.
  • Patterns that may be considered to have data items representing processing instructions include index, cluster, strum, and phase patterns. Since any of the pattern types can belong to either the specific value pattern category or the random pool value category, such designation may prefix the pattern names in the following descriptions, indicating patterns constructed according to
  • rhythm pattern when discussing a rhythm pattern, a specific value rhythm pattern has steps containing a single specified data item.
  • a random pool rhythm pattern has steps comprised of a pool of actual data items or an "n"-bit number representing a pool of possible data item choices. Any of the patterns could be modified to include an additional parameter for each step directing that a particular operation be performed a number of times before moving on to the next step.
  • FIG. 3 is a block diagram of one embodiment of a system utilizing random pool patterns. This may be an integrated part of the system shown in FIG. 2, or a separate system.
  • An input device 300 such as a keyboard or computer keyboard, allows user input to the system.
  • a CPU of sufficient processing power 302 handles processing, using sufficient memory 304.
  • the memory also stores various patterns according to the invention, and other values used during the processing.
  • Song data playback means 305 capable of playing musical data such as a sequencer is also connected to the CPU.
  • the processing of the system produces output data 306. This could be sent to an external tone generator as MIDI data, for example, or sent to an internal tone generator to produce musical tones, or stored in memory in some form for later use.
  • a random pool pattern is shown 312, being a collection of associated memory locations existing within the memory 304. It contains a number of 1 to "n" data locations 314, each of which shall be refe ⁇ ed to as a step. This number can be of any length with relation to any other pattern used during processing. Each step in the pattern constitutes a pool from which one or more selections will be made at random.
  • a pattern has an associated pattern index in memory 316, that indicates which step of the pattern is to be used next during processing. There can be a plurality of independent patterns in use at any given time, although for clarity only one is shown.
  • a pseudo-random number generator is used to generate a random number 308, using a seed value as a starting point.
  • 37 pattern may have associated with it a number of pre-selected starting seeds 318, a stored seed 320, and a cu ⁇ ent seed 322 which shall be explained in detail later.
  • a weighting method 310 associated with each pattern provides a means to modify the random number.
  • Each pattern may have a weighting curve lookup table 324, or the weighting method may calculate values in real-time according to other parameters associated with the pattern.
  • the weighted random number is then used to derive a value from the pool in the step of the pattern indicated by the pattern index 316.
  • the pattern index may then be moved to a new location, indicating a new pattern step to be used next during processing, or several random selections may be made from the cu ⁇ ent step before changing the pattern index.
  • each pattern may have an associated pool-bit mapping table 326. The value determined thereby is then passed back to the CPU for use in further processing.
  • FIG. 4 shows the operation of an [Initialize Seeds] routine 400, where a starting seed is selected by one of several methods 402.
  • One or more starting seeds of any value may be associated with each pattern as previously shown in or more starting seeds of any value may be associated with each pattern as previously shown in 318 FIG. 3.
  • a pattern will have a finite number of possible sequences of random numbers that can thereby be generated, since the provided starting seeds are fixed.
  • One of the starting values can be selected by a user, or may be predetermined as desired.
  • a starting seed may be chosen by getting a number that is theoretically different each time, such as the cu ⁇ ent date and time in milliseconds on a computer CPU that is
  • the user may enter any value within a predetermined range directly in memory through some editing means, where it can be retrieved as a starting seed. By experimentation, the user can thereby accumulate a working knowledge of values that cause prefe ⁇ ed results.
  • the starting seed is placed in a memory location associated with the pattern as the stored seed 404.
  • a copy of this value is then placed in another associated memory location as the cu ⁇ ent seed 406. This value will be modified each time a random number is requested.
  • the pattern index indicating the next step of the pattern to use during processing is set to a predetermined location 408, and the routine is finished 410.
  • FIG. 5 shows the operation of the [Generate Pseudo-Random Number] routine 500, which illustrates in general form the operation of the computer code in Appendix C.
  • the cu ⁇ ent seed is mathematically changed to a different value 502, and a temporary value is derived from it 504. The temporary value is then limited to the specified range 506, and the value is returned 508.
  • FIG. 6 shows the operation of the [Repeat Random Sequence] routine 600, which will cause the generation of the same sequence of pseudo-random values.
  • the pattern index indicating the next location to use during processing is reset to the same starting location it was initialized with 604, but this step may be omitted if desired, and the routine is finished 606.
  • the [Repeat Random Sequence] routine 600 can be called as a result of user actions, such as a user operated control, or a certain number of notes played on an external keyboard. It can also be called over periods of time, such as a number of measures of music having been played, or a number of times through the pattern having been completed, or a number of events from the pattern having been selected,
  • the [Initialize Seeds] routine 400 may also be called by the same actions, so as to allow a new starting seed to be chosen at any time.
  • the step 314 shown in FIG. 3 may be replaced by a single pool of user choices, with a starting seed, stored seed, and cu ⁇ ent seed, and remain within the scope of the invention. In this case, the steps in FIGS. 4 and 6 referring to the pattern index may be omitted.
  • Curves of this type shall be refe ⁇ ed to as a weighting curve.
  • the curves consist of (x, y) values from (0 - 127); this range is arbitrary and other ranges could be used.
  • Appendix A and B include the computer C Code used in the present example; other equations may also be used.
  • FIG. 7 shows four different types of weighting curves produced by the equations in this example, which consist of logarithmic (log), logarithmic s-curve (log_s), exponential (exp), and exponential s-curve (exp_s).
  • Each equation has a weight value, which changes the shape of the curve.
  • the weight may be a positive or negative number from ⁇ -99 to 99 ⁇ , controlling the shape of each curve.
  • Shown are examples of 7 different degrees of weighting for each of the 4 curve types as produced by the code in Appendix A and B; a weighting of 0 with any curve type yielding a linear curve (straight line, x y).
  • Other mathematical equations may be used to produce curves of a different shape than those shown.
  • the curve may be pre-calculated and stored in memory as a lookup table or array, where the x-value is located in the table and a co ⁇ esponding y-value is
  • a plurality of tables may be stored in ROM. Alternately, the table may reside in RAM, and can be recalculated in real-time if desired, as shall be described shortly.
  • the step of a random pool pattern may contain either actual values to be chosen from, or may be a single value with the on-bits indicating a number of selections to be chosen from.
  • the items in the pool may be stored in a sorted order, such as smallest to largest, or lowest to highest, depending on the intended use of the pattern; in the on-bits pool method, the bit locations may be mapped to values stored in a similar, sorted fashion.
  • the number of items in the pool, or the number of on-bits, shall be refe ⁇ ed to as the pool size.
  • FIG. 8 shows the relationship between the four different types of weighting curves in this example (each with a weight of 40), a table of 0 weight (linear), and the pool size (1 to "n" values).
  • a value is calculated from the mathematical equation or retrieved from a stored table, a pseudo-random input random number is generated in the range ⁇ 0 - 127 ⁇ , and used as the x- axis value.
  • the equation or the stored weighting curve produces a co ⁇ espondmg y-axis value, also in the range ⁇ 0 - 127 ⁇ , which will be influenced by the shape of the curve.
  • This resulting y-value is then scaled into a range co ⁇ esponding to the pool size, so that one of the items in the pool may be selected. For example, if the pool size was 5, the resulting y-value would be scaled into a relative number from ⁇ 1 - 5 ⁇ , indicating a location in the pool.
  • the (x, y) values are ⁇ 0 - 127 ⁇ , it can be seen that other ranges of values are possible, since the resulting y-value is always scaled to the cu ⁇ ent pool size. Furthermore, it is possible to use the pool size itself as the range.
  • Positive weighting values log select higher locations in the pool more often exp select lower locations in the pool more often log_s select locations in the middle of the pool more often exp_s select locations at either end of the pool more often
  • Negative weighting values log select lower locations in the pool more often exp select higher locations in the pool more often log_s select locations at either end of the pool more often exp_s select locations in the middle of the pool more often
  • FIG. 9 shows the resulting y-values for an x-value of ⁇ 0 - 127 ⁇ produced by an example exponential equation with a weight of 30. As described, this can be stored in memory as a lookup table, or the equation can be used in real-time to produce the same result.
  • a pseudo-random number is generated as previously described, but using the range of the pool size. For example, if the pool contains 5 items, then a random value is generated in the range ⁇ 1 to 5 ⁇ , representing the 5 possible selections. The resulting number is then scaled into a smaller section of the overall pool, for example the range ⁇ 2 to 4 ⁇ , or the range ⁇ 1 to 3 ⁇ . This limits the actual resulting selection to a certain area of the pool.
  • an offset of 1 may be added to the number (which would limit selections to the center 3 items of the pool), or an offset of 2 may be added to the number (which would limit selections to the top 3 items of the pool).
  • a co ⁇ esponding y-value may then be calculated or retrieved using the weighting curve; if the value is greater than (n / 2), it can be considered “1”; if less than or equal to (n / 2) it can be considered “0.”
  • the weight of the curve By changing the weight of the curve, "1" can be made to occur more often or less often than "0.”
  • the random x-value can be generated, and a threshold within the range moved, effectively creating a step weighting function. For example, if the range of pseudorandom numbers was ⁇ 1 - 10 ⁇ , a total of 10 possible outcomes exist.
  • the threshold is 3 (representing 30%)
  • a value between 1 and 3 would result in a choice of "0”
  • a value between 4 and 10 would result in a choice of "1.” Therefore, the outcome of a "1” would be 70% more likely than a "0.”
  • Other ranges and percentage amounts are also possible.
  • a pattern consists of one or more steps, with each step of the pattern being a pool containing a certain number of actual data items representing values from which to make one or more random selections. If no items are stored in the pool, a default value associated with the pattern may be used. Alternately, the pattern step may be ignored, or another pattern step selected and processed.
  • the pool can be of any predetermined size, with each pool containing as many memory locations as there are co ⁇ esponding selections.
  • the location of items in a pool starts at 1 and goes up to "n," being the number of items in the pool. This location shall be refe ⁇ ed to as the pool index, and the number of items in the pool as the pool size.
  • the pool contains at any given time a selection of one or more, or all of the possible selections.
  • a rhythm pool might be capable of holding up to 18 items co ⁇ esponding to different rhythmic values.
  • a rhythm pattern will have one or more steps with each step constituting a rhythm pool, with each pool containing anywhere from ⁇ 0 - 18 ⁇ values.
  • the weighting curve with the desired weight value has been pre-calculated and stored in a lookup table.
  • the weighting value is retrieved from it during processing.
  • the weighting curve lookup table is stored in RAM and can be changed in real-time so that the weighting table is re-calculated, with the table being immediately updated and used in the processing. This may be achieved by a user operated control or other operation causing a new mathematical curve equation or a new weight to be chosen, as shown in FIG. 10. If the weight or curve has been changed 1002, the y-values in the pattern's co ⁇ esponding weighting curve lookup table at the x-value locations of ⁇ 0 - 127 ⁇ are recalculated with the new equation or weight 1004.
  • FIG. 11 is a flowchart explaining the operation of a [Pool Value Request] routine.
  • this routine When this routine is called, it is passed the address in memory of a pool from the cu ⁇ ent step of a pattern, the pool size, and a weighting curve lookup table address 1100. Therefore, it can be used to get a value from any pool, regardless of what values are associated, the size of the pool, and so on.
  • the pool that is being operated on shall be refe ⁇ ed to as "the pool,” and the weighting curve lookup table that is being used as "the weighting table.”
  • pool size is greater than "0" 1102, it is then checked if the pool size is greater than "1" 1104. If not, (meaning there is only a single item in the pool at index 1), the value at the pool index 1 is returned 1114. If the pool size is greater than "1" 1104, a random selection is to be made from the pool. A pseudo-random number in the range ⁇ 0 - 127 ⁇ is generated 1106, using the previously described [Pseudo-Random Number Generator] routine and the pattern's cu ⁇ ent seed; this value becomes a temporary x-value to be looked up in the weighting table. The y-value of the weighting table co ⁇ esponding to the x-location is then retrieved 1108.
  • the y-value is then scaled from a number in the range ⁇ 0 - 127 ⁇ into a relative number in the range ⁇ 1 - pool size ⁇ 1110, so it can now be used as a pool index 1112, where the value of the pool at the indicated location is returned 1118.
  • FIG. 12 shows an example of the previously described method choosing values at random from a pool.
  • 18 different rhythmic values have been arbitrarily chosen from all available rhythm values to form the total possible number of selections in a rhythm pattern pool 1200. These values are shown co ⁇ esponding to a resolution of 24 cpq (clocks per quarter note) used in the present example; other resolutions are possible.
  • the numbers in bold type represent 5 data items that have been designated to comprise the pool for this example, either by selection by the user, or by the cu ⁇ ent step of a predetermined random pool pattern as previously described.
  • the actual values comprising the pool 1202 are shown in an ascending order from shortest to longest although other a ⁇ angements are possible.
  • the pool index (location) of each pool item is also shown, along with the pool size (number of items in the pool).
  • a pseudo-random number is generated in the range ⁇ 0 - 127 ⁇ , becoming an x-value of 65.
  • the y-value is then scaled into a pool index in the range 1 to pool size ⁇ l - 5 ⁇ , yielding a pool index of 3.
  • the rhythm pool value at pool index 3 is 12. Therefore an 8th note rhythm has been chosen.
  • the random x-value is 22, the y-value in the weighting
  • the value of the cu ⁇ ent seed associated with the pattern was stored in the stored seed directly before pool request 1, after pool request 10 it could be reset using the procedure of FIG. 6, and the exact same sequence of randomly weighted selections could be repeated. Alternately, the seed does not need to be reset and the random sequence can continue, with different values being generated.
  • a pattern consists of one or more steps, with each step containing a single value representing a pool of possible values from which one will be chosen at random.
  • a single "n"-bit number can represent a pool of "n” different items, where the value of 1 for each bit represents the inclusion of the bit in a pool of selections (on-bits).
  • the step is selected for use, one or more of the on-bits can be selected at random, and mapped to a table of co ⁇ esponding data items to use. If no bits are on, a default value associated with the pattern may be used, or the pattern location may be ignored.
  • the value can contain any number of bits that can be mapped to a co ⁇ esponding number of data items to use.
  • the location of bits in the value starts at 1 and goes up to "n," being the total number of bits to be used.
  • the pool therefore consists at any time of a number of bits that have been set to the on position, which can be none, or from one up to the total number of bits.
  • a rhythm on- bits pool might be an 18-bit number, with each bit co ⁇ esponding to a data item representing one of 18 different rhythmic values from within a possibly larger set of available rhythm data items.
  • a rhythm on-bits pattern will have one or more steps with each step constituting a rhythm on-bits pool, with each pool containing anywhere from ⁇ 0 - 18 ⁇ bits set in the on position.
  • An example rhythm on-bits pool may take the form ⁇ 000000000000100101 ⁇ , where the first, third and sixth bits are turned on (from right to left).
  • the total number of bits set to the on position shall be refe ⁇ ed to as the pool size, and the on-bit index shall refer to the locations of the individual on-bits within the on-bits pool. Therefore, in this example the pool size is 3.
  • the on-bit index of bit one is 1 (first on-bit)
  • the on-bit index of bit three is 2 (second on-bit)
  • the on-bit index of bit six is 3 (third on-bit).
  • weighting curve value shall be calculated in real-time from a mathematical equation, rather than retrieved from a lookup table.
  • FIG. 13 is a flowchart explaining the operation of a [Select Bit Request] routine.
  • this routine When this routine is called, it is passed the address in memory of a pool from the cu ⁇ ent step of a pattern, a weighting curve, a weight, and an associated pool-bit mapping table 1300. Therefore, it can be used to select a bit and return a data item or value associated with a data item from any pool, regardless of what values are associated, the size of the pool, and so on.
  • the pool that is being operated on shall be refe ⁇ ed to as "the pool.”
  • the curve value is an identifier indicating one of several possible mathematical equations to be used, and the weight value influences the shape of the curve as has been previously described.
  • the mapping table indicates what data items the bits refer to; for example, the different rhythmic values previously described.
  • pool size is not greater than "0" (meaning there are no on-bits) 1302, processing steps to 1316, where the default value for the pattern is returned 1318 and the routine is finished. If the pool size is greater than "0" 1302, it is then checked if the pool size is greater than "1" 1304. If not, (meaning there is only a single on-bit in the pool), the on-bit index of the single on-bit is used to return a co ⁇ esponding data item from the mapping table 1314. If the pool size is greater than "1" 1304, a random selection is to be made from the pool.
  • a pseudo-random number in the range ⁇ 0 - 127 ⁇ is generated 1306, using the previously described [Pseudo-Random Number Generator] routine and the pattern's cu ⁇ ent seed; this value becomes a temporary x-value, which is then use to calculate a y-value, using the specified curve and weight 1308.
  • the y-value is then scaled from a number in the range ⁇ 0 - 127 ⁇ into a relative number in the range ⁇ 1 - pool size ⁇ 1310, so it can now be used as an on-bit index 1312, and a corresponding data item from the mapping table is returned 1318.
  • FIG. 14 shows an example of the previously described method choosing data items at random from a pool.
  • the pool-bit mapping table is shown, where the rhythmic selections co ⁇ espond to a resolution of 24 cpq used in the present example; other resolutions are possible.
  • An example 18-bit value is shown, with one bit location for each of the 18 possible rhythmic selections. In this example, the bit locations are shown from left to right for clarity, although typically they proceed from right to left. Five of the bits are shown in the on position, along with their co ⁇ esponding on-bit index from 1 to 5; the pool size is therefore 5.
  • the co ⁇ esponding values of the mapping table data items for the five on-bits are shown in bold type.
  • a pseudo-random number is generated in the range ⁇ 0 - 127 ⁇ , becoming an x-value of 65. Since the equation is linear, the resulting y-value is also 65.
  • the y-value is then scaled into an on-bit index in the range 1 to pool size ⁇ 1 - 5 ⁇ , yielding an on-bit index of 3.
  • the mapping table value at on-bit index 3 is 12. Therefore an 8th note
  • FIG. 1404 shows the exact same sequence of random numbers, except now the exponential equation uses a weight of 30, as previously described in FIG. 9.
  • the random x-value 65 is generated.
  • the co ⁇ esponding y-value calculated is 6.
  • Scaling the y-value into a on-bit index yields 1.
  • the mapping value at index 1 of the pool is 3, and a 32nd note rhythm is chosen. Processing continues in a like fashion, with the resulting rhythmic selections shown in musical notation.
  • the actual values pool method and the on-bits pool method can produce identical results. While this discussion so far has employed the actual pool method and the on-bits pool method separately, it is possible to combine the two methods. In this case, the pool would always store the complete "n" actual data items, and a co ⁇ esponding bit or flag would indicate an item's inclusion into a pool of selections. In this case the pool size would be indicated by the number of bits or flags turned on. Random selections would then be made from the indicated items as previously described. For clarity, the previous examples show the use of only a single non-changing pool from which values are chosen at random, however, as previously described a random pool pattern may have a different pool of values at every step.
  • the pool itself may change as the next step of the pattern is utilized, before the random selections are made.
  • rhythmic values and data items any type of musical data can form a pool, such as a pool of velocity values, a pool of pan values, a pool of cluster values indicating a number of notes to be generated, a pool of digital audio data or digital audio data memory location addresses.
  • rhythmic values are chosen randomly, it is difficult to determine with any degree of certainty where a note will fall in any given area of a beat, measure, or other musical time designation.
  • a further embodiment shall now be described, providing the advantage of controlling random rhythms within certain predetermined areas of a musical time frame with a greater degree of control.
  • a tie is a musical term indicating that two or more rhythmic values are to be added together to become a single rhythmic event occupying the space of the sum total.
  • a random tie rhythm pattern has two or more steps, each step containing at least data indicating a rhythmic value, and a location that can be set to indicate a potential tie to a next or previous step.
  • the tie flag (when set) will indicate a potential tie to a previous step.
  • FIG. 15 shows an example of one basic form of the pattern, which has from 1 to "n" steps. It should be noted that the rhythm value indicated could also be a pool of rhythm values or an "n"-bit rhythm pool value as described in earlier examples.
  • a cu ⁇ ent index is associated with the pattern indicating the next step to be used in processing.
  • the cu ⁇ ent step of the rhythm pattern is accessed. If the next step of the rhythm pattern does not have a tie flag set to "yes,” then the value derived from the cu ⁇ ent step's rhythm value is used as is to determine the rhythmic duration of the event. However, if the next step of the pattern has a tie flag set to "yes,” then a random choice is made as to whether to tie or not. If a tie is chosen, the value derived from the next step's rhythm value is added to the cu ⁇ ent step, and the test is made again on the next step of the rhythm pattern.
  • FIG. 16 An example random tie rhythm pattern consisting of 20 steps is shown in FIG. 16. Steps in which the tie flag is set to "yes” are indicated with "X.” As each step of this pattern is used sequentially during processing, steps 1, 5, 9, and 13 will always cause a new rhythm value to be derived (since the tie flags in those steps are
  • the pattern indicates an absolute amount of rhythmic time that will be covered by an indefinite number of rhythmic events. In other words, the sum total of all rhythmic events generated from the pattern will equal the total time of all steps in the pattern.
  • the possible randomly derived rhythm values for the first four steps of this example pattern are shown in FIG. 17.
  • Each of the 8 examples shows a possible a ⁇ angement of those ties, and the equivalent rhythmic notation.
  • the [Calculate Rhythm Target] routine by which a rhythm value is calculated is shown in FIG. 18.
  • the pattern index indicating which step of the rhythm pattern to use next has been initialized to a starting location.
  • a memory location rhythm target receives the rhythm value derived from the cu ⁇ ent step 1802, and the pattern index advances to the next step 1804. If the next step's tie flag is "yes” 1806, a random number of either "0" or "1” is generated 1808. If the value is "1” 1810, the value derived from the step's rhythm value is added to the rhythm target 1812, and the pattern index again advances to the next step 1804. This process is repeated until a step's tie flag is "no" 1806, or a "0" is generated as the random number 1810, after which the routine finishes 1814.
  • the random number generation can be weighted to favor the selection of the "0" more often than the "1,” which results in less ties and a more complex rhythm, or the opposite, which results in more ties and a simpler rhythm. This can be achieved by any of the weighting methods previously described. If the random tie rhythm pattern has its associated cu ⁇ ent seed reset to the stored seed at predetermined intervals during processing, repeatable sequences of random choices can be achieved. Although this example shows each step with a potential tie to a previous step, the invention could also be configured in the opposite manner, where each step has a flag indicating a potential tie to the next step, or even where the potential exists for a
  • a pattern has one or more steps, where each step contains data representing a pool of two or more possible sounds, or one or more possible sounds and a null value representing the absence of a sound.
  • a drum pattern may also be used as an addressable series during the reading out of data as shall be described later. However, the of the word drum is an arbitrary designation and for convenience only in that other types of sounds may be utilized.
  • a cu ⁇ ent index is associated with the pattern indicating the next step to be used in processing.
  • drum pattern Each time a sound is to be generated, such as by the use of a rhythm pattern or other selection means, the next location of the drum pattern is selected and one or more items are selected from the pool at random. If the drum pattern has its associated cu ⁇ ent seed reset to the stored seed at predetermined intervals during processing, repeatable sequences of random choices can be achieved.
  • a single "n”-bit number can represent a pool of "n” different drum sounds, or "n” - 1 different drum sounds and a null value, where the value of 1 for each bit represents the presence of the sound or null value.
  • a null value so indicated shall also be refe ⁇ ed to herein as a null-bit.
  • the particular drum sounds co ⁇ esponding to each of the "n" bits can be predetermined, or selected by the user.
  • One example of a single step of such a pattern is shown in FIG. 19, using an 8-bit number to represent 7 different drum sounds and a null value.
  • the value shown of 22 decimal (0010110 binary) has the 2nd, 3rd and 5th bits on (from right to left). In this example they represents a pool of three drum sounds, being kick, snare and low torn.
  • the on-bit indexes and the pool size are also shown.
  • the drum pattern can operate in several different modes. If the mode is "poly," a step with more than one item in the pool and no null values will select all of the items in the pool. If a null value is present in the pool, it can indicate one of two methods of making a random selection for poly mode: (1) single choice - a
  • null value can indicate one of two methods of making a random selection for pool mode: (1) pool choice - a random choice is made between all of the pool items including the null value, so that the result is the selection of any one of the pool items, including the possibility of the null value, or (2) null choice - a random choice is first made as to whether to generate a null value; if not, a random choice is then made from the remaining items of the pool (excluding the null value), resulting in either the null value or any one of the pool items being selected.
  • the mode can either be a single value associated with the pattern that controls the operation of the whole pattern, or can be set individually for each step of the pattern.
  • certain pool items may be excluded from the random choices to be performed. For example, it can be indicated that if a certain item is present in a pool, it shall always be either selected or ignored, with the random choice(s) made between the remaining items of the pool. This can allow certain items to be always selected while random choices are made around them, or alternately to suppress the selection of certain items while random choices are made around them.
  • FIG. 20 shows an additional example of a single step of a drum pattern.
  • each step has an additional bit or value that indicates the mode for the step, rather than the entire pattern.
  • For each of the 8 bits there is a co ⁇ espondmg bit or flag indicating that it is to be always selected.
  • These additional values can be part of the step of the pattern, so that each step may be set differently as to which bits will always be selected, or can be a
  • FIG. 21 is a flowchart of a routine to select sounds from the steps of a drum pattern.
  • the example assumes a pool where one of the bits is a null-bit, such as shown in FIG. 19. Alternately, there could be no null values in the pool, with all bits referring to drum sounds, and the portions of the routine dealing with the null-bit eliminated.
  • pool size is greater than "1" 2102. If the pool size is "1" (meaning only a single bit is on), then that on-bit is selected 2104, and the routine is finished 2136. If the pool size is greater than "1" 2102, the mode is then checked 2106. If the mode is "poly,” then it is checked whether the pool contains a null-bit 2108. If the pool does not contain a null-bit, then all on-bits in the pool are selected 2110, and the routine finishes 2136.
  • a loop can be performed for each on-bit in the pool 2112, comprising the steps 2113 - 2120.
  • a flag is checked to see whether this on-bit should be played "always" 2113. If the on-bit is to be played "always,” it is then selected 2118, and the loop continues with the next on-bit 2113. If the on-bit is not flagged to be played "always," a random choice of either "0" or "1" is generated 2114. If the choice is "0" 2116, then the cu ⁇ ent on-bit is selected 2118 and the loop continues with the next on-bit.
  • the null-bit is selected 2120, and the loop continues with the next on-bit. Therefore, for each on-bit in the pool, a chance exists for that on-bit or the null-bit to be selected, and the routine finishes 2136. This operation co ⁇ esponds to the previously described multiple choice method. If the single choice method were to be used, at step 2112 all on-bits that are flagged "always” would be selected, and then a single random choice made between all of the remaining on-bits that are not flagged "always” (excluding the null-bit), after which the routine would be finished.
  • one or more bits have been selected. They are then mapped to co ⁇ esponding values to use with the pattern's associated pool bit mapping table, such as the drum sounds discussed earlier.
  • the selection of the null-bit indicates that no sound should be selected or produced.
  • the random selections can be weighted by any of the weighting methods previously discussed. For example, at step 2114 and 2126, the random choice between "0" and “1" may be weighted as previously described. In a similar fashion, the random choices from the pool items at step 2124 and step 2130 can also be weighted, as previously described. By varying the weighting, the selection of sounds can be shifted towards different areas of the pool, or can be shifted to increase or decrease the possibility of a null value being generated. While this example assumes the random choice between a null value and other non-null values 2114 and 2126 has a separate weighting method, and the random choice between non-null values of a pool 2124 and 2130 also has a separate weighting method, and the random choice between non-null values of a pool 2124 and 2130 also has a separate
  • a single weighting method could be used by both. Alternately, a separate weighting method could be used for each of the four steps.
  • the operations co ⁇ esponding to checking for on-bits that are flagged always, and selecting such on- bits can be skipped if such functionality is not desired or included in the pattern.
  • FIG. 22 Several examples of drum patterns utilizing the previously described methods are shown in FIG. 22, where X indicates a bit set to "1" (an on-bit), and a blank indicates a bit set to "0.” It is assumed during this example that the steps of the pattern will be selected sequentially by a rhythm pattern such as 16th notes at a cu ⁇ ent tempo. Other a ⁇ angements or rhythmic values are possible, such as the rhythm patterns described in the earlier embodiments, or manual selection by a user- operated control.
  • a 16 step pattern is shown 2200 using the previous example of an 8-bit value representing 7 different drum sounds and a null value.
  • the grid represents the settings for each of the 8 bits over the 16 steps of the pattern (columns 1 to 16).
  • the example is using pool mode for the entire pattern, and the null choice method, so a step in which more than 1 bit is set will result in a single choice between the on-bits if the null-bit is not present, or a single choice between the remaining on-bits if the null-bit is not first selected as previously described.
  • Step 1 indicates that the kick will be selected always, since there are no other on-bits in the pool.
  • Step 2 indicates a null value always (which will be perceived as a 16th note rest).
  • Steps 3 and 4 indicate a random choice between a kick and a null value, so that the possibility exists of either selecting the kick or not, and so on.
  • Step 8 indicates that first, a choice will be made as to whether to generate a null value. If set, nothing will be selected at that step. If not set, a random choice will be made between the snare and the low tom. In this way, there are one of three possible outcomes at this step. When the weighting method of the null value choice favors the null value, a simple pattern will result, since notes will be selected less often.
  • Steps 14, 15 and 16 indicate a random choice between the snare and several of the toms. For example, if the weighting on the drum sound choices (upper 7 bits) favors the higher bits, toms will be selected more often. If the weighting favors the lower bits, snares will be selected more
  • a 4 step pattern is shown 2202. This example uses the previously described method where each pattern step has an additional value indicating the mode of the step. X indicates poly mode, and blank indicates pool mode. This example uses the previously described multiple choice method for poly mode, and the pool choice method for pool mode.
  • Step 1 indicates that the kick and the crash will always be selected simultaneously, since the mode is poly, and there is no null value.
  • Steps 2, and 3 are also in poly mode, and therefore indicate that a random choice will be made between each of the 7 drum sounds and the null value; therefore there could be from 0 to 7 drum sounds selected simultaneously on those steps. If the weighting method on the null value choice favors the null value, fewer sounds will be selected. If the weighting favors the non-null values, more sounds will be selected simultaneously.
  • step 4 is in pool mode and using the pool choice method, so a single choice will be made between all 8 items including the null value, resulting in the selection of one of the drum sounds or the null value.
  • a 16 step pattern is shown 2204 in which the entire pattern is in poly mode.
  • the single choice method previously described shall be explained, where the presence of the null value indicates a single choice to be made from the non-null values.
  • Steps 1 to 13 do not contain any null values. Therefore all indicated pool items in those steps will be selected simultaneously as each step is accessed.
  • Steps 14, 15 and 16 contain a null value, so a single random choice will be made from the non-null values.
  • this example also shows the use of the "always" flag, which in this example refer to the operation of the entire pattern.
  • the hi-hat will always be selected, and a single random choice will be made between the remaining non-null values in the pool, resulting in either the snare or one of the three tom sounds shown.
  • the null-value could be included in the choice, so that there is also a possibility of selecting the null value. Weighting methods can be used to favor the selection of certain areas of the upper 7 bits, or the selection of the null-bit if it is included in the pool of choices, again influencing the types of sounds
  • FIG. 23 shows three example patterns that are being used simultaneously. In this example, each pattern uses only 4 bits. Pattern 1 represents drum sounds of a kick, snare, low tom and null value 2300. Pattern 2 represents cymbal sounds of a hi-hat, crash, splash, and null value 2302. Pattern 3 represents percussion sounds of a tambourine, cowbell, shaker, and block 2304. The patterns can be of different lengths and will loop concu ⁇ ently, so for example, the dotted outlines of Pattern 2 indicated that it will have played 4 times during one repetition of Pattern 1.
  • this example shows the three patterns having a length with a common multiple of 4, this is not necessary. Further they can be of any length. Furthermore, the steps in each pattern can be selected by the same rhythm pattern or selection means, so that they are synchronized, or by different rhythm patterns and selection means, so that they may be utilized at different speeds or rhythms.
  • drum sounds any sound could replace the drum sounds, or the drum sounds could be pitches of musical notes.
  • the drum sounds could also be replaced by the addresses in memory of digital audio data.
  • this example show a pattern step as always having at least one item in a pool, it could be configured that a pool of 0 items was considered a null value.
  • a pool could contain the actual drum sounds, or note numbers representing them, or digital audio data or the addresses in memory thereof, with or without the inclusion of null values, with the pool size being the number of items in the pool.
  • An actual value or item would be selected from the pool rather than the selection of an on-bit that is then mapped to a table of co ⁇ esponding drum sounds.
  • sequence data is presented as a time-stamped list of data, with an entry in the list being:
  • Delta time is based on the timing resolution of the sequence file, such as 24 ticks per quarter note, 96 ticks per quarter note, and so on. The delta time is the number of ticks from the previous event at which to generate the next event.
  • An event is a MIDI message, such as note-on, controller, program change. Data is the pitch and velocity of a note-on message, the controller number and value, and so on. Events generally include a channel, which indicates one of many MIDI channels for which the event is intended.
  • Various other proprietary and public domain methods of recording and storing MIDI data are well-known, often refe ⁇ ed to as sequencers or sequencing software.
  • sequencers that record and playback MIDI data have many different timing resolutions, such as 24 ticks per quarter note, 96 ticks per quarter note, 480 ticks per quarter note and so on.
  • a starting seed, cu ⁇ ent seed, and stored seed may be utilized in memory in the same fashion as described for a random pool pattern. If the value of the cu ⁇ ent seed is stored at the beginning of processing a section of data, the cu ⁇ ent seed can be reset to the stored seed at specific locations so as to generate repeatable sequences of random choices.
  • a predetermined extraction area size is selected, which may be changed in real-time during processing if desired.
  • the length of the extraction area may be expressed as a unit of musical time, such as a 16th note at the current resolution or a percentage thereof. Alternately, it may be expressed in absolute tick locations co ⁇ esponding to a cu ⁇ ent resolution. It may start and end at locations co ⁇ esponding to units of musical time, such as every beat, or may be offset with relation to those units, such as a certain number of ticks or time before or after the beat or other subdivision.
  • FIG. 24 is a diagram showing examples of several different extraction areas.
  • the 59 shows an extraction area that is equal to 100% of one beat, and that starts on each beat. As shown, multiple extraction areas can be contiguous, where the end of each area adjoins the beginning of the next area.
  • the second example 2402 shows an extraction area that is equal to 25% of one beat starting a 32nd note before the location of the beat. As shown, multiple extraction areas may be non-contiguous, resulting in space between the extraction areas.
  • the final example 2404 shows an extraction area equal to 150% of one beat, starting on the beat and extending halfway into the next beat. As shown, multiple extraction areas may overlap.
  • the data to be played back, or a portion thereof, is loaded into memory. As the data is played back, each extraction area is examined prior to actually being played to determine how many notes (note-ons) exist within the extraction area. If there are more than one, they will be deemed a pool of choices, and one or more of them can be selected at random to actually be played. Spaces between noncontiguous extraction areas can have all notes selected, or alternately may be ignored, so that none of the notes outside of the extraction areas are selected.
  • One or more of the following methods can be used to play the selected notes:
  • the selected notes can be "tagged” in memory with an indicator as to which are to be played;
  • the selected notes can be copied to a buffer from which playback is actually performed, so that the buffer only contains the notes to be played;
  • one or more data types within the file can be designated as random choice indicators. If a random choice indicator is located within an upcoming extraction area, it may perform the same or similar type of functions as the null value described in the previous embodiments, with respect to the methods of performing random selections.
  • the random choice indicator can indicate one or more of the following:
  • More than one random choice indicator can be used, so that any of the previously mentioned methods may be used selectively during different extraction areas. Extraction areas that do not contain a random choice indicator can be ignored for processing and played normally. If the random choice indicator is a note number, generation of notes with that value may be suppressed.
  • the random selections can be weighted to different areas of the pool by any of the methods previously described.
  • the weighting domain (y-axis) can either be considered to be the range of pitches in the extraction area, from low to high or high to low, or can be the distribution over time of the notes in the extraction area as shall be described.
  • a simple percentage value can be varied in realtime, indicating a percentage of the total number of pool items to select at random.
  • a means for identifying certain notes to be excluded from the pool of choices For example, it may be specified that a certain note number or sound is not to be included, such as the pitch indicating a hi-hat for drum data. In this case, the hi-hat notes are considered to be flagged "always" as previously described. Notes selected in this manner will always be played, regardless of the determination of pools in the extraction areas.
  • the note-offs can be dealt with in several ways.
  • the MIDI file is pre-processed by storing the data in a memory buffer, and processing the file so that rather than separate note-ons and note-offs existing, the note-ons and note-offs become a single note with a duration; alternately, the musical data may already be stored in such a format.
  • the note-on is sent out, and a note- off will be sent out a certain period of time later determined by the duration. In this manner, when a note within an extraction area is not selected to be played, there will
  • the MIDI file is not preprocessed, but a buffer stores all note-ons that have been put out that have not yet received note-offs.
  • a note-off is to be sent out, if the co ⁇ esponding note-on is in the buffer it is sent out and then that note-on is removed from the buffer. If the co ⁇ esponding note-on is not in the buffer, the note-off is ignored and not sent out.
  • the MIDI file is not preprocessed, and all note-offs are simply sent out as indicated in the file, whether or not the co ⁇ esponding note-ons were actually selected for output.
  • a note that is selected to be played may have its duration modified according to notes that are not selected for playback.
  • FIG. 25 shows a section of a MIDI file displayed in "piano-roll" format 2500.
  • the section of data is equal to 4 beats (one measure of 4/4 time), containing four quarter notes. Each quarter note's duration extends somewhat to the next quarter note. If the extraction area was as large as four beats, this entire example would form the pool of notes. If the first and fourth notes were randomly selected for playback, the second and third would be omitted, which would result in data being produced with the characteristics shown in 2502.
  • the first note's duration can be extended until what would have been the end of the third note by monitoring the skipped notes, and extending the last played note until the end of the duration of the last skipped note. This would result in data being produced with the characteristics shown in 2504 (with the skipped notes shown as outlines). Alternately, no monitoring of the skipped notes can be done, and the previous selected note's duration simply extended until the next selected note is played, which would result in data being produced with the characteristics shown in 2506. As the methods by which random choices can be made from a pool have been described in detail for earlier embodiments, the following examples explain in general the further operation of this embodiment on MIDI data.
  • FIG. 26 shows an example section of MIDI data co ⁇ esponding to one bar.
  • the extraction area has arbitrarily been determined to be a quarter note, so four extraction areas are shown. They have arbitrarily been chosen to start at each beat and extend until the next beat.
  • no random choice indicator has been included in the data, so each area is treated as a pool of values from which to
  • a percentage value that may be varied in real-time selects how many items from each pool will be selected. For example, extraction 4 contains 8 items, so if the percentage was 50%, 4 of them would be selected at random.
  • a weighting method is utilized with the weighting domain, or y-axis, being the distribution in time of notes over the extraction area.
  • the random selections may be weighted towards the notes earlier in the area, the notes later in the area, the notes in the middle of the area, and so on.
  • FIG. 27 shows an example section of MIDI data co ⁇ esponding to 2 bars (8 beats) of drum notes.
  • the extraction area has arbitrarily been determined to be a 16th note. Therefore 32 extraction areas are shown, each starting and ending slightly before the beginning of each 16th note subdivision.
  • MIDI note number 24 CO
  • MIDI note number 25 C#0
  • No data will be output from either of those two notes in this example.
  • Area 31 contains a poly mode random choice indicator. In this case, consecutive random choices will be made between each of the notes in the area and a null value (with the exception of the hi-hat), so that any number, from one to all of the notes, will be selected.
  • the process is not limited to being performed during real-time playback.
  • the processing of the extraction areas and the random selections made from them may be
  • 63 used to replace the stored musical data, or be stored elsewhere as a MIDI data file, without actually being played back. This allows the data to be processed and played back at a later time.
  • Patterns and/or note series can be extracted from preexisting musical data.
  • Such musical data can be a file stored in memory, representing an entire song, melody, or portion thereof, and may consist of a list of time-stamped events.
  • the file may be a predetermined file, or one which the user has recorded into memory. Since the location in memory of various types of data in memory can be determined, specific regions of data can be extracted from the musical data and converted into patterns (e.g., velocity, pan, duration). Also, specific regions of note data can be extracted from the musical data and transfe ⁇ ed to another location, thereby creating an initial note series, as described later. The resulting patterns and/or note series may then be utilized immediately, or can be stored in memory as one or more of a plurality of patterns and/or note series for use in later processing.
  • the extraction of the patterns and/or note series can be performed in real-time, e.g., at the tempo of the playback of the musical data, with or without output of the actual musical data, or can be performed in memory without output of musical data as fast as processing speed allows, with the results stored in other memory locations.
  • Specific locations such as the beginning of each beat or the beginning of a measure can be used to initiate the extraction of patterns from a new location of the memory, such as the beat or measure of data that is about to begin playback.
  • a predetermined extraction area size is selected, as previously described.
  • a single extraction area may be used, within which groups of events are utilized to extract the steps of the patterns. Alternately, multiple extraction areas may be used, with each extraction area co ⁇ esponding to the step of a pattern.
  • a single extraction area has been arbitrarily decided to be 186 ticks in length, starting at the beginning of the example data and ending 186 ticks later.
  • Event groups are shown su ⁇ ounded by dotted lines, and indicate events that are within a predetermined distance from each other.
  • the arbitrary value has been decided to be 8 ticks. Therefore, any events that are within 8 ticks of each other are considered to be part of the same event group, resulting in 10 event groups as shown.
  • the process of extraction of patterns is shown in the flowchart of FIG. 29. Initially, the musical data of interest is acquired and placed in memory 2902, and the delta times between notes are accumulated 2906, by performing a running total of each event's delta time with the previous event's delta time. Then, one or more of the following steps may be performed.
  • a duration pattern can be extracted 2908 by calculating the amount of
  • the values may be quantized, such as moving each value to the nearest tick evenly divisible by a certain value.
  • the values may also be divided as necessary to place them within the timing resolution employed (e.g. 24 cpq). Duplicate values within each event group before or after quantization or division may be ignored.
  • a velocity pattern can be extracted 2910 by assembling the velocities of the note-on events (velocities greater than 0) in the extraction area into a list in the order of the note-ons. If constructing a specific value velocity pattern, only one velocity from each event group containing note-ons may be added to the list if desired, such as the largest, smallest, or an average of all velocities within the event group.
  • all of the velocities within each event group can constitute a pool of choices, or be mapped to the bits of an n- bit number, with each event group co ⁇ esponding to a pattern step. If the actual velocity values are being represented, this comprises an absolute velocity pattern. Utilizing the conventions employed herein, the constant -127 can be added to each of values to create a modify velocity pattern. Duplicate values within each event group may be ignored.
  • a specific value rhythm pattern can be extracted 2912 by calculating the respective times between each note-on event. This is done by subtracting each note- on's accumulated delta time from the first note-on in the next applicable event group's accumulated delta time, and assembling the resulting values into a list in the order of the note-ons, with only one value from each event group being added to the list, such as the longest, shortest, or an average of all rhythms within the event
  • the last note-on's rhythm may be calculated by using the end of the data or extraction area instead of a subsequent note-on.
  • the values may be quantized or placed in a different timing resolution as previously described.
  • a cluster pattern can be extracted 2914 by determining the number of note-on events present in each event group containing note-ons. If constructing a specific value cluster pattern, this may be done by assembling them into a list in the order of the event groups. If constructing a random pool cluster pattern, the number of note-ons within each event group can constitute a maximum value, where a pool of choices is constructed from 1 to the maximum, or mapped to the bits of an n-bit number, with each event group co ⁇ esponding to a pattern step.
  • a specific value strum pattern can be extracted 2916 by assembling lists of the note-ons occurring within each event group. If there is more than one note-on in such areas or segments, the pitches are analyzed to decide whether the order is generally ascending or descending, such as by comparing the pitch of the first note- on in the event group to the pitch of the last. Values representing the direction of the notes (up and/or down strokes) are assembled into a list to constitute a strum pattern. Additionally, the amount of time between the notes in each stroke may be extracted, averaged, and paired with the strum values as an associated strum time for each stroke in the pattern. Sixth, an index pattern can be extracted 2918 by analyzing the movement between each note-on and a subsequent note-on.
  • the values may be optionally modified, such as by scaling them into a smaller range of numbers, or limiting them to minimum/maximum values.
  • the last note-on in the extraction area can use the first note-on in the extraction area if desired or can be ignored.
  • a specific value spatial location pattern can be extracted 2920 by directly collecting the spatial location data and assembling it into a sequential list. In a MIDI environment, this information is found in the MIDI controller 10 (pan) messages, and results in a specific value pan pattern.
  • assignable patterns as previously discussed may be extracted in the same fashion as the spatial location or pan pattern, by choosing the desired type of controller events and assembling them into a list, resulting in specific value assignable patterns.
  • Specific value bend patterns may also be extracted in the same fashion by assembling pitch bend information into a list.
  • a drum pattern can be extracted 2922 by directly collecting the pitches of the note-ons and assembling them into a list. If constructing a specific value drum pattern, only one note-on from each event group containing note-ons may be utilized if desired, such as the first, last, highest, lowest and so on. If constructing a random pool drum pattern, all of the values within each event group can constitute a pool of choices, or be mapped to the bits of an n-bit number, with each event group co ⁇ esponding to a pattern step.
  • a specific value voice change pattern can be extracted 2924.
  • One method of accomplishing this is to collect program changes with co ⁇ esponding time references, such as a resolution to the time base of the system.
  • the program changes may be paired with the amount of ticks between each of the program change delta times divided as necessary to place them in the resolution of the time base.
  • note-ons between program changes can be counted and paired with the values.
  • Examples of extracted duration, velocity, rhythm, cluster, strum, index, pan, voice change and drum patterns using a single extraction area are shown in FIG. 30, FIG. 31, and FIG. 32. All examples use the example data from FIG. 28. For clarity, only certain event groups are shown, although events from other event groups may have been used in processing. Referring to FIG. 30, an extracted specific value duration pattern is shown along with accompanying calculations, where the longest duration from each event group (in bold type) has been assembled into a list 3000. The list has been quantized
  • Extraction of a rhythm pattern is shown 3004.
  • the largest value in each event group (in bold type) has been assembled into a list, resulting in a specific value rhythm pattern.
  • the list has been quantized by moving each value to the nearest tick evenly divisible by a certain value, as shown.
  • the values have been divided to place them within the timing resolution employed.
  • the resulting rhythm pattern is also shown in musical notation.
  • extraction of a cluster pattern is shown 3100.
  • the number of note-ons within event groups containing note-ons has been assembled into a list, resulting in a specific value cluster pattern.
  • An extracted specific value strum pattern is shown, where only event groups containing more than one note-on have been used 3102.
  • One method of choosing a strum direction is shown, where the pitch of the first note in each event group is compared with the last pitch (shown in bold type). If the last pitch is greater than first pitch, the direction is "up”; if not, the direction is "down.” If they were equal, an arbitrary choice of either may be made.
  • Extraction of an index pattern is shown 3104.
  • the first note-on in each event group containing note-ons is utilized to extract a specific value index pattern.
  • Each of these note-ons (shown in bold type) is subtracted from the next such note-on, resulting in the value shown as distance to next.
  • the last note-on is wrapping around to the first note-on to result in the value -7.
  • These values are shown assembled into a list, and also after the steps of scaling them into a smaller range and limiting the minimum and maximum to -4 and 4 respectively.
  • a random pool index pattern constructed according to the actual values pool method is also shown below, where duplicate values within each event group have been ignored, and no limiting or scaling has taken place.
  • an extracted specific value pan pattern is shown, where all controller 10 events have been assembled into a list 3200.
  • An extracted specific value voice change pattern is shown, where program changes have been assembled into a list along with the number of note-on events between each of them 3202.
  • extraction of a drum pattern is shown 3204. The lowest pitched note- on in each event group (shown in bold type) is used to extract a specific value drum pattern.
  • a random pool drum pattern is shown below, constructed according to the actual values pool method, where all of the pitches within each event group from a pool of values in a co ⁇ esponding pattern step.
  • Patterns may also be extracted using multiple extraction areas, where each extraction area co ⁇ esponds to a step in a pattern. For example, a section of data may be divided into 16 extraction areas, and a 16 step pattern extracted from it. If an extraction area contains no relevant data to the type of pattern being extracted, (e.g. note-ons for a velocity pattern), it may be considered an empty extraction area. This can be an area that contains no data whatsoever, or no data that has been selected to be utilized. Empty extraction areas may be used to indicated default settings of a co ⁇ esponding pattern step. Alternately, only extraction areas containing relevant data may be used to extract the pattern. Therefore, there will not necessarily be a one-to-one co ⁇ espondence between the number of extraction areas and the number of pattern steps. For example, if a section of data contained 16 extraction areas and
  • the flowchart of FIG. 29 can serve as a general guide for the process as previously described, with the main difference being that multiple extraction areas are used with each extraction area co ⁇ esponding to a step of a resulting pattern, rather than event groups within a single extraction area being used to extract the pattern steps.
  • FIG. 33 is a flowchart showing the operation of a routine for extracting a pattern using multiple extraction areas, which could be utilized at each of the steps of FIG. 29 where pattern extraction occurs.
  • a cu ⁇ ent pattern step index indicates the cu ⁇ ent step of the pattern being extracted, and a cu ⁇ ent extraction area index indicates the cu ⁇ ent extraction area of a section of data being processed. Both are stored in memory and initialized to the first locations 3302.
  • a loop consisting of the steps 3304 through 3316 is then commenced. If the extraction area indicated by cu ⁇ ent extraction area index contains data relevant to the type of pattern being extracted 3304, the step of the pattern being extracted indicated by cu ⁇ ent pattern step index is set to whatever values are determined from the data contained in the extraction area, according to the pattern type.
  • the cu ⁇ ent pattern step index is then incremented 3308, and the cu ⁇ ent extraction area index is incremented 3314. It is then checked whether processing is completed 3316. The answer may be "yes” if the end of the section of data to be processed has been reached, or a predetermined number of extraction areas have been processed, or some other operation has interrupted processing, in which case the routine is finished 3320. If not completed, processing loops back to 3304. If the extraction area does not contain relevant data, a processing option is checked 3310. If extraction areas that do not contain relevant data are to indicate a pattern step with a default setting, the cu ⁇ ent step of the pattern is set to the default setting according to pattern type 3312.
  • FIG. 34 shows several examples of specific value patterns being extracted from a section of musical data, using multiple extraction areas.
  • a graphical piano- roll representation of one measure (4 beats) of MIDI drum data is shown 3400, including the drum sound names and MIDI note numbers.
  • drum pattern which can also be utilized as a note series during the reading out of data
  • arbitrary decisions have been made ahead of time. Although all notes within each extraction area could be utilized, it may be decided that only certain notes or ranges of notes should be utilized. Therefore, other sounds within extraction areas can be ignored.
  • some method of extracting only one of them may be utilized, such as the lowest in pitch, the highest in pitch, the designation of one sound to have priority over others, a random choice, the location in the extraction area, and so on.
  • the resulting specific value drum pattern thereby extracted is shown 3402. Null values are shown as "-,” with a co ⁇ esponding value of 0. Since in this example the hi-hat and crash sounds have not been selected to be extracted, the only relevant data in extraction area 1 is the kick, which is indicated in step 1 of the resulting pattern. Extraction area 2 contains no relevant data whatsoever. This is used to set
  • Extraction area 13 contains two relevant drum sounds, the snare and tom 1. Since this example chooses the higher pitched of the two, pattern step 13 is set to tom 1, and so on. More than one drum pattern can be extracted from the same section of data, as illustrated in 3404. In this example, it has been arbitrarily decided that only notes co ⁇ esponding to the hi-hat shall be extracted, which results in the specific value drum pattern shown.
  • the extraction of a specific value cluster pattern is shown 3406.
  • the number of notes in each extraction area shall indicate a cluster size in a co ⁇ esponding pattern step. All notes have been used, although a subset of certain notes or ranges of notes could be utilized.
  • a 16 step cluster pattern has been extracted by allowing empty extraction areas such as areas 2 and 6 to set the co ⁇ esponding pattern step to a default value of 1.
  • a 13 step pattern is show, which resulted from not utilizing any empty extraction areas. For example, when extraction area 2 is processed, no values are set in the pattern and the cu ⁇ ent pattern step index does not advance. Therefore, when extraction area 3 is processed, the resulting value of 2 is set in pattern step 2.
  • Specific value patterns other than drum or cluster patterns can be extracted from musical data using multiple extraction areas in a similar fashion.
  • the velocities of notes within each extraction area can be used to extract a velocity pattern, and so on.
  • Random pool patterns as previously described can also be extracted from preexisting musical data, using multiple extraction areas.
  • arbitrary decisions have been made prior to processing as to how many bits will be used to represent the pools in the extracted patterns, and the values or operational variables will be represented by each bit. Data present in the musical data not assigned to a bit may be selectively ignored in the final result.
  • the pattern is extracted by processing each extraction area of the musical data, locating data assigned to be represented by bits (or calculating values from the data in the area that are assigned to be represented by bits), and setting the resulting bits in the step of the pattern that co ⁇ esponds to the extraction area.
  • 73 resulting number of on-bits in the pattern step becomes the pool size for each step.
  • the pattern is extracted by processing each extraction area in the musical data, locating data in the area that has been selected to be utilized (or calculating values from the data in the area which have been selected to be utilized), and transferring the resulting data to the step of the pattern that co ⁇ esponds to the extraction area.
  • the number of items thereby stored in each step becomes the pool size for each step.
  • the items in each step (constituting a pool) are typically maintained in some sort of ascending or descending order within the pool, such as by pitch or velocity.
  • null value indicators one or more data types within the file, such as a particular note-on number, or a particular MIDI Controller value can be designated as null value indicators. If a null value indicator is located within an upcoming extraction area, it may be utilized to set a null value or null-bit in the resulting pattern. More than one null-value indicator can be used, so that any of the previously mentioned modes of operation can be selectively indicated.
  • FIG. 35 An example of the extraction of random pool drum patterns is shown in FIG. 35.
  • a graphical piano-roll representation of one measure (4 beats) of MIDI drum data is shown 3500. It has arbitrarily been decided to use an extraction area of a 16th note. As such, so 16 extraction areas are shown 3500, each starting and ending slightly before the beginning of each 16th note subdivision. This will result in a 16 step drum pattern.
  • These examples shall use an empty extraction area containing no relevant data to set the co ⁇ esponding pattern step to the null value.
  • the notes represented by CO (24) and C#0 (25) have been decided to be null value indicators. Using two different notes allows pool mode or poly mode to be selectively set in each step.
  • bit 1 will be a null-bit representing a null value
  • bits 2 through 7 will represent the drum sounds shown
  • bit 8 will be used to indicate poly mode processing.
  • Bit 4 chosen to represent the hi-hat, has been given the
  • null bits 74 designation "always,” so that it will always be played in the resulting pattern, as previously described.
  • the two different null bits have the following function: a note of CO (24) shall set the null-bit and a note of C#0 (25) shall set the null-bit as well as set the poly mode bit. Notes present in the MIDI data that have not been assigned to a bit will be ignored in the final result, and are shown as white outlines. In this example an empty extraction area shall represent a pool mode null-bit; other variations are possible.
  • the pattern is extracted by processing each extraction area of the musical data, locating notes in the area that have been assigned to be represented by bits, and setting the resulting bits in the step of a drum pattern that co ⁇ esponds to the extraction area.
  • the extracted drum pattern is show in 3502, where X indicates a bit set to 1 (an on-bit), and a blank indicates a bit set to 0.
  • extraction area 1 is processed 3500.
  • the crash sound has not been assigned to a bit, so it is ignored.
  • the presence of the kick and hi-hat in the extraction area results in the setting of bits 2 and 4 respectively to the on position 3502.
  • Extraction area 2 is empty. Therefore pattern step 2 has the null-bit set to the on position.
  • Extraction area 3 contains a hi- hat, kick, and null value.
  • pattern step 16 has the 5 co ⁇ esponding drum sound bits, the null-bit, and the poly mode bit all set to the on position. While this example uses a single bit or value to represent pool or poly mode, a larger value or additional bits can be used to indicate more than 2 modes of operation, such as inclusion of the previously described single mode. As shown, bit 4 has been flagged "always" and will result in bit 4 always being played when the pattern is used.
  • the previously described actual values pool method may alternately be used when extracting a random pool drum pattern from the data shown in 3500.
  • the pattern is extracted by processing each extraction area in the musical data, locating notes in the area that have been selected to be utilized, and transferring the items to the step of a drum pattern that co ⁇ esponds to the extraction area.
  • the resulting drum pattern using this method is shown in 3504. Each pattern step therefore
  • example 75 contains the actual items in the extraction area that have been selected to be utilized, and a pool size that indicates the number of items stored in the step.
  • the items have been stored in each step in ascending order of pitch; other a ⁇ angements are possible.
  • the values could be MIDI note numbers, digital audio data, or any other type of data; for clarity abbreviations are used to designate the various drum sounds in 3500; the null value is represented by "-.”
  • the hi-hat has been flagged as "always,” and in this example, all null values indicate pool mode processing.
  • multiple patterns can be extracted from the same section of MIDI data.
  • the crash and hi-hat can be extracted along with the null values into a separate on-bit drum pattern or actual values drum pattern, the kick, snare, and toms extracted along with the null values into a different, separate on-bit drum pattern or actual values drum pattern, and so on
  • the patterns can then be used together, or interchangeably with other patterns extracted from other sections of data, in the manner shown in FIG. 23.
  • any type of note data can be utilized, for creating patterns for sounds other than drums.
  • the example musical data here includes note numbers representing null values, there could also be no null values, and no null-bit in the resulting drum pattern, as previously explained.
  • Random pool patterns of any type may be extracted in this manner.
  • a random pool cluster pattern may be extracted, where the number of notes in each extraction area may be used to set the values for each pattern step.
  • the total number of notes can be used to indicate the largest size, with all smaller sizes included in the pool. For example, if 5 notes were counted in an extraction area, that step of the pattern would have a pool consisting of the values 1 through 5 indicated. This may be done either by storing the values 1 through 5 as a pool, or by setting bits 1 through 5 of an n-bit number to the on position.
  • a random pool velocity pattern may be extracted, where the velocities of the notes within each extraction area may be used to set the values for each pattern step. The actual velocity values can be stored in the step as a pool of values, or certain ranges of velocity can be
  • the range of velocities from ⁇ 0 - 127 ⁇ can be divided into 16 ranges of 8 values (e.g. ⁇ 0 - 7 ⁇ , ⁇ 8 - 15 ⁇ , ⁇ 16 - 23 ⁇ , and so on). Velocities falling within those ranges can be mapped to the 16 bits of a 16-bit number. Duplicate values or bits within each extraction area may be optionally suppressed from inclusion in the co ⁇ esponding pattern step. The resulting pattern can then be used as an absolute velocity pattern or a modify velocity pattern, as previously described. It will be apparent to those skilled in the art that other pattern types discussed herein may be extracted in a similar fashion.
  • a hybrid pattern could be constructed combining the two methods.
  • a pattern could have one or more steps co ⁇ esponding to random pool pattern steps, and one or more steps co ⁇ esponding to specific value pattern steps, a ⁇ anged in any order desired.
  • a specific value pattern may have one or more steps "flagged" to indicate a random choice is to be made from a pool of values located elsewhere, and still remain within the scope of the invention
  • One or more of the previously described patterns may be combined.
  • a rhythm pattern and a cluster pattern may be combined, so that each step of the pattern not only indicates a rhythmic value or pool of values, but also so that each step of the pattern indicates a cluster value or pool of cluster values.
  • Conversion tables are well known in electronic musical instruments, consisting of lookup tables storing a plurality of values that require substitution, and values to substitute in their place.
  • the tables can cover all 128 notes of the available
  • the root is indicated by the pitch class 0. Notes in a key other than C may be transposed to that key by subtracting the root pitch class from every note. For example, if the root is known to be F (5), then subtracting 5 from every pitch will place them in the key of C.
  • a conversion table for these pitch classes may contain 12 locations, each location co ⁇ esponding respectively to the pitch classes ⁇ 0 - 11 ⁇ . Each location stores a value for substitution, which may or may not be the same as the pitch class.
  • a conversion table co ⁇ esponding to a CMaj7 chord or scale may take the form ⁇ 0, 0, 2, 4, 4, 7, 7, 7, 9, 11, 11 ⁇ , indicating that a C# (in the location co ⁇ esponding to pitch class 1) will be substituted with a C (0).
  • the pitch is transposed to the key of C, and reduced to its octave and pitch class.
  • the pitch class is replaced with the value in the location of the table co ⁇ esponding to the pitch class and placed back in the co ⁇ ect octave and key.
  • the conversion table can be part of a predetermined collection of parameters loaded as a whole by the user, or can be individually selected from a plurality of conversion tables stored elsewhere in memory, where the selection means could be one or more of the following: the operation of a chord analysis routine on input notes, or on a certain range of input notes; the operation of a chord analysis routine on an area of a musical controller such as a keyboard or guitar; the operation of a
  • chord analysis routine performed on sections of a background track of music; markers or data types at various locations in a background track of music; or user operations.
  • a drum note series (also refe ⁇ ed to as a dram pattern) consisting of pitch and null values, or pools of pitch or pitch and null values, with or without associated velocity information;
  • a pointer series consisting of a series of links or pointers to address locations in memory containing pitch or pitch and velocity information.
  • a note series consisting of pitch or pitch and velocity data may be extracted from preexisting musical data, in the same fashion as previously described for the extraction of patterns.
  • Such musical data can be a file stored in memory, representing an entire song, melody, or portion thereof, and may consist of a list of time-stamped events.
  • the file may be a predetermined file, or one which the user has recorded into memory. Since the location in memory of various types of data in memory can be determined, specific regions of note data can be extracted from the musical data and transfe ⁇ ed to another memory location such as a temporary buffer, thereby creating an initial note series.
  • the note series may then be utilized immediately, or can be stored in memory as one or more of a plurality of predetermined note series for use in later processing.
  • the extraction of the note series can be in real-time related to tempo, with or without output of the actual sequence data, can be performed in memory without output as fast as processing speed allows, or can be a combination of the two.
  • the next extraction area can be processed independently without playing it, and the note series thereby extracted, before the continuation of the actual playback of the sequence data.
  • Extraction areas have been explained previously; in this example, the extraction area has been arbitrarily decided to be 90 ticks in length, and to start at the beginning of each beat and therefore end 90 ticks later (6 ticks before the beginning of the next beat), with other a ⁇ angements being possible.
  • FIG. 36 is a flowchart showing the extraction of note data from a musical source file in memory. First, an accumulated delta time is calculated for each event, by performing a running total of each event's delta time with the previous event's delta time 3602.
  • a running delta time "delta run” is initialized to zero in memory 3604. Then, playback or processing of the MIDI sequence is started. A loop consisting of the steps 3608 through 3614 is performed for every tick of processing according to the cu ⁇ ent timing resolution. Modulo division is then used to determine the beginning of a beat, where 96 is chosen to be the unit of ticks per quarter value in this example 3608. If the running delta time is not an even number of the modulated ticks per quarter, 96, then it is not the beginning of a beat, delta run is incremented 3614, and the loop continues 3608.
  • delta ran moduloed by the ticks per quarter 96 is 0, then it is assumed to be the beginning of a beat, and pitches and velocities of note-ons with accumulated delta times between delta run and (delta run + the extraction area length (90)) are extracted, in the order they are encountered in the musical data 3610. This is then transfe ⁇ ed to a temporary buffer as an initial note series. After the initial note series has been created, the creation of an altered note series (described later) can be immediately performed 3612, or can be bypassed and performed independently at other times. The routine ends when the playback or processing of data is finished, or according to user actions 3620.
  • FIG. 37 illustrates an example of the previously described process, in which a note series is repeatedly extracted, once per beat.
  • a note series is repeatedly extracted, once per beat.
  • an example Standard Midi File fragment 2 beats long is shown 3700, assuming a resolution of 96 ticks per quarter note. It may be noted that this is the
  • the two extraction areas are shown 3704, utilizing the beginning of the beat plus the extraction area size. Finally, the resulting two initial note series that are extracted from the extraction areas are shown 3706, with the notes in the order they are met in the Standard Midi File.
  • the first note series is extracted at beat 1 when delta run (0 % 96) is equal to 0.
  • the second note series is extracted at beat 2, when delta ran (96 % 96) is equal to 0. If this example contained more data, another note series would be extracted at beat 3, when delta ran (192 % 96) is equal to 0.
  • the notes in a certain upcoming section of the musical data can be extracted and designated the initial note series.
  • the buffers may be cleared first so that new notes replace old notes. Alternately, the new notes could be added to the buffers without first clearing the old notes.
  • an altered note series can be created immediately or created independently, as described later.
  • An initial note series or dram pattern can be retrieved from a plurality of initial note series or dram patterns in memory. They may have been extracted from a source of musical data and stored in memory, as just explained, or
  • a predetermined note set can be retrieved from memory and transfe ⁇ ed to another memory location, creating the initial note series.
  • the note set can be arbitrary or co ⁇ espond to a specific chord or scale type.
  • a chord designated CMin7 in the 5th octave can be stored as a note set consisting of the pitches specified absolutely as ⁇ 60, 63, 67, 70 ⁇ .
  • the pitches can be stored according to the pitch class of each note, where C through B co ⁇ espond to 0 through 11 respectively. Values greater than 11 can be used to indicated the same 12 pitch classes in a higher octave.
  • a chord designated as Maj7_9 might be stored as ⁇ 0, 4, 7, 11, 14 ⁇ .
  • the retrieved set of notes can then have a certain multiple of 12 added to all of them to place them in a particular octave, and the pitch class co ⁇ esponding to a key added to them to put them in a specific key.
  • each retrieved pitch in the note set of Maj7_9 would have 60 (5th octave relative to 0) and 2 (pitch class of D) added to it, resulting in ⁇ 62, 66, 69, 73, 76 ⁇ in the initial note series.
  • the note sets may also contain velocity information associated with each pitch.
  • the note sets can also be dram patterns containing a null value as previously described.
  • the null values can remain unaltered when performing the previously described mathematical operations on the pitches in the note set. For example, if a note set specified by pitch class was ⁇ 0, 4, 7, 11, (null value), 14 ⁇ , then placing the note set in the 5th octave by adding 60 would result in the note data: ⁇ 60, 64, 67, 71, (null value), 74 ⁇ .
  • the note sets can be retrieved on user demand, or at repeated specific intervals of time, such as every 2000 ms.
  • the specific interval of time can be once per beat, or once per measure, or other musical timing related to the tempo and beat of the song.
  • the choice of which note set to retrieve can be arbitrary or based on chord analysis of the source material.
  • the temporary buffer contains all notes cu ⁇ ently being sustained at a particular moment.
  • the order that the received notes are kept in inside the buffer are not important, but may be maintained in any matter that is convenient.
  • the arrival of a first note-on or other predetermined event starts a time window, whereby after a certain number of milliseconds the cu ⁇ ent collection of notes in the buffer is transfe ⁇ ed to another memory location, creating the initial note series. In this manner, collection has occu ⁇ ed for a certain time interval, and the series will be created from all notes cu ⁇ ently sustaining at the end of the time window. After the completion of the time window, the next subsequent note-on or predetermined event would be considered the first note-on and again start the time window and subsequently end the collection of notes after the desired interval.
  • An example is shown in FIG. 38, where the arrival of four notes over time are shown in musical notation 3800, with pitches displayed in bold type and their associated velocities.
  • the arrival of the first note starts a time window (in this example, an arbitrary value of 30 milliseconds with others being possible); the second, third and fourth notes are shown arriving respectively at 5, 15 and 25 ms after the first note. After 30 ms have passed from the receipt of the first note, the notes are transfe ⁇ ed and become the initial note series of four pitches and velocities shown in 3802. The notes may be transfe ⁇ ed in any order that is convenient.
  • the note data can be transfe ⁇ ed to another memory location and become the initial note series on user demand or at repeated specific intervals of time, such as every 2000 ms.
  • the specific interval of time can be once per beat, or once per measure, or other musical timing related to the tempo and beat of the song.
  • the transfer of the data can be selectively suppressed if desired.
  • a method of determining the beat is utilized, such as counting the number of clock ticks that have passed since the beginning of the song and performing modulo division based on the time resolution
  • the note data can be transfe ⁇ ed to another memory location and become the initial note series upon the receipt of a predetermined number of events, such as the receipt of a predetermined number of notes, or a predetermined number of sustaining notes being contained in the temporary buffer.
  • FIG. 39 An example of the real-time collection of musical data from a song or melody is shown in FIG. 39.
  • a graphical example of a 4 beat section of musical data is shown in piano-roll format. The beats are labeled ⁇ 1.1, 1.2, 1.3, and 1.4. ⁇
  • a location at which to repeatedly transfer the sustaining note data and create the initial note series has been arbitrarily decided to be a certain number of ticks or milliseconds after the occu ⁇ ence of each beat, shown as "transfer attempt.” It has been arbitrarily decided that no transfer will take place if the temporary buffer does not contain at least 3 notes when the transfer attempt is made. Furthermore, it has also been arbitrarily decided that if such a transfer does not take place, the arrival of the required number of sustaining notes before the next transfer attempt will immediately create the initial note series.
  • a transfer attempt is successfully made, creating an initial note series of three notes.
  • the notes are no longer sustaining approximately halfway through the beat. If three more notes arrived somewhere before the end of the beat, they could be allowed to create a new initial note series if desired.
  • the release of the sustaining notes can not be required, but another criteria may be used to cause a new transfer, such as the number of sustaining notes increasing or decreasing beyond the number that were present when the transfer attempt was made.
  • the temporary buffer is not emptied after the initial note series has been created, so that new note-on messages may continue to add notes to the cu ⁇ ent collection in the buffer, and note-off messages may continue to remove notes from the cu ⁇ ent collection.
  • the buffer can be emptied after the initial note series has been created, and co ⁇ esponding note-offs for the sustaining notes ignored.
  • an altered note series can be created immediately or created independently, as described later.
  • strings are received as audio data, and are each analyzed to determine the pitch and relative amplitude (co ⁇ esponding to velocity).
  • a digital audio note series consists of pitch, or pitch and velocity information, along with identifiers of co ⁇ esponding digital audio locations. It may be created in real-time from incoming audio data by recording digital audio data into buffers. The audio is then analyzed with a pitch detection algorithm to provide the pitch, and an amplitude detection algorithm to provide the velocity if desired. The pitch (or pitch and velocity) are then stored along with the identifier of the buffer that contains the digital audio data in a temporary buffer.
  • the pitches or pitches and velocities stored in the temporary buffer are transfe ⁇ ed to another memory location, along with the co ⁇ esponding identifiers of the digital audio buffers with which they are associated, thereby becoming the initial digital audio note series.
  • the destination buffer may be cleared of old information and replaced with the new information, or may be added to the old information.
  • An example shall use the previously mentioned guitar with a hex pickup, so that the guitar is capable of transmitting each string separately on one of six audio channels.
  • a predetermined number of digital audio locations (DALs) exist in memory, each containing a pointer to a buffer into which digital audio data is to be recorded, and locations to store an analyzed pitch and velocity.
  • DALs digital audio locations
  • the DALs are assumed to have identifiers of ⁇ 1 to 6 ⁇ by which they can be located in memory during processing (dal id).
  • the 6 DALs can have a fixed co ⁇ espondence to the 6 strings of the guitar, i.e.
  • string 1 records into the buffer indicated by DAL 1
  • string 3 records into the buffer indicated by DAL 3, and so on.
  • the DALs can be allocated in the order in which audio input is received, i.e. the first string to play is recorded in to the buffer indicated by DAL 1, the second in DAL 2, and so on. While the present example uses the fixed co ⁇ espondence method, the other could have been used.
  • the 86 are received, converted via ADCs and recorded into the buffers associated with the DALs.
  • the individual channels are analyzed to provide the pitch and the velocity, which is then stored in the DAL.
  • An in use flag is set to "yes" for each DAL for which pitch and velocity analysis is successful. If unsuccessful or the DAL is empty (e.g. the co ⁇ esponding string was not played), the flag is set to "no".
  • the in use flag may be set to "no.” DALs with the in use flag set to "no" can be ignored later on during processing.
  • the pitches or pitches and velocities stored in any DALs that are in use are transfe ⁇ ed to another memory location, along with the co ⁇ esponding dal id with which they are associated.
  • FIG. 40 shows the initial digital audio note series thereby created from the example above, and its co ⁇ esponding musical notation.
  • the additional location original pitch is a copy of the pitch, and shall be described during the creation of an altered note series. Should the additional step of creating an altered note series not be used, these locations could be omitted.
  • this example utilizes a 6 channel system along with a hex pickup, it could be configured that a single audio input such as a microphone or other device could be manually or dynamically switched between several discrete audio channels.
  • the fourth type of addressable series is created by utilizing
  • the source of musical data can be a file stored in memory representing an entire song, melody, or portion thereof, consisting of a list of time-stamped events.
  • the file can be a predetermined file or one that the user has recorded into memory. Since the address in memory of each note in the musical data in memory can be determined, specific regions of note data can be processed whereby the addresses of the note-ons can be repeatedly acquired and stored in an a ⁇ ay of sequential memory locations, or a linked list of memory locations, thereby creating a pointer series.
  • the creation of the pointer series can be performed in real-time related to tempo during playback of the musical data, with or without output of the actual musical data, or can be performed in memory without output as fast as processing speed allows, with the results stored in other memory locations.
  • Specific locations such as the beginning of each beat or the beginning of a measure can be used to initiate processing of a specific section or sections of the memory and the creation of the pointer series, such as the beat or measure of data that is about to begin playback.
  • FIG. 41 is a flowchart of the process for creating an altered note series.
  • Each of the following steps can be used as desired on part of or all of the note series in any desired combination. Therefore, the flowchart illustrates each step as returning to the starting point 4100, from where another step can be selected and performed, or completing the operation 4120. Furthermore, each step may, in the course of operation, be skipped or performed more than once at different locations in the sequence of steps, before the altered note series is completed 4120. Since each step
  • note series in the following descriptions refer to the cu ⁇ ent state of the data in memory which may have already been modified by another step, not necessarily the original starting note series.
  • the pitches in the note series may span a great number of octaves.
  • One or more pitches may be constrained to a predetermined range, such as a particular octave or any other user-defined range 4102. This can be done by testing each note in the note series, and if it is not within a specified range, transposing its pitch by an interval until it is within the required range.
  • Duplicate pitch values in the note series may be selectively removed as desired 04. This can be done by comparing the pitch of each note in the note series with adjacent or non- adjacent pitches, and removing them if they are the same. The comparing and removal can be performed so that no notes with the same pitch remain, no adjacent notes having the same pitch remain, no notes with the same pitch remain in a predetermined area of the note series, or any combination thereof.
  • the notes in the note series will be in a particular order, which may be reordered by sorting all or selected portions of the notes according to pitch or velocity 4106. If desired, the pitch or velocity component of the note may remain with the other component when sorting by the other component. In the case of a digital audio note series, the digital audio location ID (dal id) component remains associated with the pitch component, as does the original pitch component. Furthermore, the order imposed may be ascending, descending, random, or some other selected method of re-ordering the notes.
  • the pitches in the note series may be shifted by an interval such as an octave, a fifth, etc. Some or all of the pitch values may be shifted, or every other, every third, or other method of selection of pitches as desired 4108.
  • the note series may be extended by replicating selected portions of it, and adding it to the end of the note series or inserting it in the note series 4110. Furthermore, the pitches in all or portions of the replicated data may be shifted by an interval such as an octave, a fifth, or other interval as desired.
  • Portions of the note series may be selectively replaced with other data. Pitches in the note series may be shifted to co ⁇ espond to a certain key or scale, or other
  • Atonal pitches may be shifted to tonal pitches by analyzing the original note series and selecting a conversion table co ⁇ esponding to chord type, where the conversion table stores a plurality of values that require substitution, and values to substitute in their place.
  • Initial or cu ⁇ ent state of the note series may be stored as an intermediate note series in a series of sequential memory locations from 1 to "n," from which a new note series may be constructed by retrieving selected portions of the intermediate note series 4114. This may further be accomplished by retrieving notes according to an index pattern of absolute memory location addresses, such as ⁇ 1, 3, 2, 4 ⁇ , wherein the first note would be retrieved, then the 3rd note, then the 2nd note and so on.
  • this may further be accomplished by choosing a starting location in the intermediate note series such as the first note, and moving through the intermediate note series and retrieving the notes at various locations by using an index pattern specifying movement from cu ⁇ ent location, such as ⁇ 1, 3, -1, 2 ⁇ , where the starting note would be retrieved (for example, the note at index 1), then the next note forward from the starting note 2 (1 + 1), then the note 3 steps forward 5 (2 + 3), then the note 1 step backwards 4 (5 - 1) and so on.
  • Choice of the pattern value to use next is done by starting at the first pattern step and using each subsequent step until reaching the end of the pattern and returning to the first step; other methods are possible.
  • One or more notes can be removed from the note series based on predetermined criteria 4116.
  • the criteria may include removing notes of a certain pitch class with regards to a cu ⁇ ent chord and key, or notes with predetermined pitches or velocities. If the initial note series is a dram pattern containing null values as previously described, the above steps can be performed in a like fashion with the exception that when the pitches are shifted, altered, or transposed the null values remain null values, and are not changed to new values. If the initial note series is a digital audio note series, when the pitches are shifted, altered, or transposed, the original pitch component is not altered. Therefore, each step of the resulting note series may have a transposed pitch component that is different than the original pitch component. These differences are used later on in the reading out of the data.
  • FIG. 42 and FIG. 43 illustrate examples of altered note series created with the process of FIG. 41.
  • the various steps will be shown operating on the data one after the other and continually modifying the note series. As described previously, steps may be omitted or performed more than once, in other orders than the one illustrated here.
  • An 8 step initial note series comprised of a series of pitches and velocities stored in consecutive memory locations is shown first 4200.
  • the note series after the step of constraining the data to a particular range is shown next 4202. In this case, the range is the same octave as the first note.
  • the last 4 notes are now duplicate pitches of the first four notes and are shown in bold type.
  • the 4 step note series with duplicate pitches and their co ⁇ esponding velocities removed is illustrated next 4204. In this case, all the duplicates are removed, but one or more of them could have been left in the note series.
  • the next section shows the note series after the further step of sorting according to pitch where the velocities have remained paired with the original pitch 4206.
  • the ordering of the pitches is in an upwards direction; other orders are possible.
  • the note series after the further step of shifting selected pitches by an interval 4208. In this case, every other pitch has been shifted upwards by the interval of an octave; other orders and intervals are possible.
  • the note series after the further step of an additional sorting according to pitch where the velocities have remained paired with the original pitch 4210. In this case the ordering of the pitches is in an downwards direction; other orders are possible.
  • the note series after the further step of replicating the data two additional times, and shifting the pitches in each replication by an interval is illustrated next 4212.
  • the interval for the first replication is 2
  • the interval for the second replication is 4, although, other intervals are possible including the use of a pattern of values where each successive value indicates an amount by which to shift the next replication.
  • all of the data was replicated twice, resulting in a 12 step note series, other values are possible including replication of only a portion of the notes in the series.
  • the note series is shown after the further step of shifting pitches according to a conversion table storing a pitch class of 0 to 11 co ⁇ esponding to the 12 notes of an octave, and the same or different pitch
  • Each pitch is first reduced to its pitch class by modulo 12 division, and used as an index into the conversion table, where either the same or different pitch class is stored, from which the pitch class is retrieved and placed back in the same octave as the original pitch. Altered pitches are shown in bold type. While the use of a 12 step conversion table is shown here with modulo 12 division, the conversion table could alternately be 128 by 128 values, one for each MIDI note number, or any portion thereof, utilizing different values for division or no division as desired.
  • FIG. 43 an example of an 18 step altered note series created from an initial digital audio note series is shown, after the further step of replicating the data and shifting the pitches in each replication by an interval 4300.
  • the initial note series was the 6 step digital audio note series shown in FIG. 40. In this example it has been replicated two additional times, with the first replication shifted by an interval of 2, and the second replication shifted by an interval of 4.
  • the dal ids identifiers of the associated digital audio buffer
  • the original pitches are not shifted or transposed, as shown.
  • the step of storing an intermediate note series and creating a new notes series by retrieving portions of it with an index pattern is shown next.
  • An example 8 step digital audio note series that has been created by several of the steps previously described is shown 4302. This is stored in memory as the intermediate note series.
  • the resulting 22 step note series 4304 is created by starting at the beginning of the intermediate note series, and retrieving notes at subsequent locations by moving through the intermediate note series with an index pattern.
  • the actual length of the index pattern is 8 items and is shown in bold type.
  • the first value is used, then the next value and so on until the end of the pattern, after which the index pattern is applied by starting at beginning again. Other methods of movement such as backwards, using the next value + 1, etc. are possible.
  • the dal id remains associated with the note as it is retrieved, as do the original pitch.
  • the index pattern indicates the number of memory locations to move forwards or backwards from the cu ⁇ ent location in the intermediate note series and from which to retrieve the next note.
  • the retrieved index shows the locations of the intermediate note series that are retrieved for each step of the resulting note series.
  • step 1 starts with index 1 of the intermediate note series.
  • step 2 the first value of the index pattern 1 is added to the last retrieved index 1 to yield index 2 (1 + 1).
  • step 5 the next value of the index pattern -2 is added to the last retrieved index 4 to yield index 2 (4 + -2).
  • the range of the intermediate note series is used as the determining factor in when to stop retrieving data, in that if the index moves beyond the first note or last note the step would be completed.
  • Other means such as an absolute number of notes may also be applied.
  • more than one note could be retrieved from the present location and other adjacent or non-adjacent locations. While this example utilizes a note series that was already altered by several previous steps, an initial note series can also be altered in this manner without performing any of the other steps.
  • step of removing notes based on criteria could also be applied to the preceding examples. For example, it could be specified that every note with a pitch class of 4 (E) is to be removed. Using the example in 4304, the notes at steps 2, 5, 12, 16, and 18 would be removed, leaving a 17 step note series.
  • the note series can be created using pitch values alone.
  • different and diverse musical phrases in memory can be created from pitches and velocities, or pitch values alone; furthermore, by varying the index pattern and other applicable parameters, different musical phrases can be created from the same input notes.
  • the note series in these examples consists simply of note numbers and velocities, with or without dal ids - there is no rhythmic information associated with it.
  • the resulting altered note series can be placed in memory for the reading out of data as described next, or stored as a predetermined note series in one of a plurality of memory locations for later use in the reading out of data.
  • READING OUT DATA A musical effect is generated by reading out data stored in memory, using various independent patterns that control when and how often the data is read out, which locations the data is read out from, how much data is read out each time, and
  • the data stored in memory can be a note series or other types of predetermined data stored in memory, in which case the values stored in the memory locations are read out.
  • the data in memory can be a pointer series, in which case the values at the memory addresses pointed to by the pointer series are read out. In the case of a digital audio note series, the values read out are used to modify and playback the digital audio data stored in other memory locations.
  • the data is not restricted to the examples given here but could encompass other types of data in memory, such as individual samples of digital audio data.
  • a system clock is used for reference, such as a value in memory that starts at 0 when the process is begun, and increments repeatedly every 1 millisecond. Alternately, it could be a number of clocks or ticks counted at a base resolution related to tempo, such as 96 clocks per quarter note. The cu ⁇ ent value of this clock shall be refe ⁇ ed to as now time. While throughout this discussion the 1 millisecond clock method is utilized, the other method could alternately have been employed.
  • Data is produced at scheduled times by placing events in a task list in memory (list of tasks to perform) along with an absolute time at which to perform each task, maintained in the order of the soonest to the farthest away in time.
  • Each time the system clock increments the list is checked to see if the first event's time is now equal to (or less than) the system clock, and if so, all events with the same time or less than the system clock are issued and removed from the list.
  • the process of reading out data can be performed using one of two different modes: (a) clock event advance mode, and (b) direct indexing mode. Before describing these two modes in detail, some other aspects of the process shall be described.
  • a phase is a discrete, self-contained exercise of the method, including all of the parameters and patterns used in the reading out of data.
  • One or more such phases may be utilized and each phase may be unique.
  • the second phase could have a different rhythm pattern and/or a different cluster pattern than the first phase, and so on.
  • one of the phases is the cu ⁇ ent phase, meaning that its parameters control the cu ⁇ ent performance in reading out data.
  • FIG. 44 within an overall parameter memory 4400 are shown two phase parameter memory locations 4402 and 4404. Each of them contain the same memory locations co ⁇ esponding to a number of patterns and other parameters. Although this example uses two phases, there could be only one, or more than two.
  • phase pattern indicates the order in which to read from stored memory (ROM, RAM or other storage medium) the appropriate patterns and other parameters from a plurality of such patterns and parameters and load them into a single phase location in memory in real-time, or even to simply indicate a series of stored memory locations to point to.
  • the exact location of the phases and whether they are in RAM or other storage is not important.
  • a group of patterns 4406, and associated pattern modifiers 4408. These patterns may be specific value patterns or random pool patterns as previously described. One or more patterns may come from either category.
  • the various pattern types and pattern modifiers have been previously described in detail, and shall be further explained as necessary at the appropriate points in the following description.
  • a phase direction indicates a general direction of movement in each phase, by influencing the way the index pattern is used, described later.
  • each phase may have a
  • phase parameter memory locations within the parameter memory are several locations outside of the phase parameter memory locations that relate to the use of phases.
  • a phase pattern may be used to control which phase's memory locations are cu ⁇ ently being used during processing.
  • An example of derived values from a phase pattern may take the form ⁇ 1, 1, 2 ⁇ indicating that phase 1 will be run twice in succession, then phase 2's memory locations will be used once, then phase 1 again twice, .and so on.
  • Each step of the phase pattern may contain additional data indicating one or more parameters to change and new values to change them to. When the phase is changed, the indicated parameters can be changed to the new values, thereby controlling other portions of the process.
  • the additional data may also indicate that procedure calls are to be made to other portions of the process, or that random seeds are to be reset to stored, repeatable values.
  • a number of phases to complete can be specified (total phases), whereby generation of the effect can be terminated after completing the required number of phases.
  • the cu ⁇ ent phase can be set by the user and/or is determined by the phase pattern.
  • stored in other memory locations are indexes into the phase pattern, and pointers to the memory locations of the 2 phases that are switched during processing.
  • a phase change is deemed to occur by one or more of several methods, such as whether a note series index is within a certain range, or a certain number of notes have been generated, or a certain number of clock events has occu ⁇ ed, or a certain period of time has passed, or upon user demand.
  • the various pattern indexes stored in other memory locations may be optionally and individually reset to starting values, so that each phase's patterns may seem to start at a certain repeatable point.
  • the reset may be omitted so that the patterns continue from the present step although the pattern may have changed. Furthermore, any parameters specified by the phase pattern step may then be changed, any random seeds specified by the pattern step may be reset, and any procedure calls indicated by the pattern step may be made, thereby controlling other
  • a tempo parameter also exists which is a value in beats per minute (bpm) specifying the overall tempo rate of the effect.
  • bpm beats per minute
  • All of the various parameters can be part of a predetermined collection of parameters loaded as a whole by the user from a plurality of predetermined collections of parameters, or each parameter may be individually set and/or modified by the user.
  • an envelope is an independent process that indicates a shape of a function or calculation over time. It has a number of segments, each segment has a level value and a time value. The level specifies a new value to move to, and the time specifies how long it will take to get there from the previous level. In other words, once started, an envelope will continuously calculate a value representing its present position on a pathway defined by the levels and times.
  • the level is a value within an arbitrary range that may relate directly to a specific parameter to be changed, or may be a general range that is scaled into other desired ranges.
  • the range for a level value is ⁇ 0 - 100 ⁇ , with other ranges being possible.
  • the time is a value within an arbitrary range representing an amount of time between one level .and another.
  • the range may be in absolute values such as ⁇ 1 - 2000 milliseconds ⁇ , or may be an abstract range that is scaled into units of time.
  • the range for a time value is also ⁇ 0 - 100 ⁇ , which is then scaled into a range of absolute millisecond values.
  • FIG. 97 A three segment envelope utilized in the present embodiment is shown in FIG.
  • the x-axis is an overall time range for the entire envelope. In this example it is
  • the y-axis is an envelope value that is calculated by the movement from one level to another level. As shown, there is a start level and for each of the three segments, a time and level are shown.
  • segment 3 has been designated as a sustain level segment. This means that the envelope will stop upon reaching level 2, and not continue to level 3 until a predetermined action has indicated it should do so, such as the release of keyboard keys or buttons by a user, or other such action. Segment 3 is there refe ⁇ ed to as a release segment. While 3 segment envelopes are presently utilized, the envelopes could contain any number of segments such as 4, 7 or 11 segments, thereby providing greater control, and still remain within the scope of the invention.
  • a velocity envelope may be utilized during calculation of the velocity in the reading out of data.
  • this is done by scaling the envelope value of ⁇ 0 - 100 ⁇ into an offset of ⁇ -127 - 0 ⁇ , with other ranges possible.
  • This offset may be utilized to impart an overall increase or decrease in velocity levels during note generation, thereby providing the musical effect of a crescendo and/or decrescendo (or combinations of the two), whereby a gradual raising and lowering of the volume of a musical phrase over time may occur.
  • a tempo envelope may be utilized, which modifies the tempo of the clock event generator, thereby producing clock events that may have an increasing or decreasing amount of time between them.
  • this is done by scaling the envelope value of ⁇ 0 - 100 ⁇ into a tempo of ⁇ 40 - 300 bpm ⁇ , with other ranges possible.
  • This produces the musical effect of a ritard and/or accelerando (or combinations of the two), whereby the tempo of a musical phrase speeds up or slows down over time.
  • a bend envelope may be utilized, which continuously sends out MIDI pitch
  • 98 bend data In this example, this is done by scaling the envelope value of ⁇ 0 - 100 ⁇ into a double precision MIDI pitch bend value of ⁇ 0 - 16383 ⁇ , with other ranges possible. This produces the musical effect of a gradual increase or decrease in pitch over time.
  • Other envelopes are possible that send any type of MIDI data continuously in a similar fashion, with different ranges of values.
  • a spatial location envelope could send MIDI pan (controller 10) values, by scaling the envelope value ⁇ 0 - 100 ⁇ into a pan value from ⁇ 0 - 127 ⁇ , and so on.
  • a step rate and step size are calculated by determining the number of steps within a segment.
  • the number of steps is determined by subtracting the previous level from the cu ⁇ ent segment's level. For segment 1, a separate start level has been provided since there is no previous segment.
  • the step rate determines how often the envelope value will be calculated and updated to a new value. It has arbitrarily been decided that a minimum step rate will be 20 ms in this example, so that calculations will not be performed more often than that.
  • the step size determines the amount by which the envelope value will be incremented or decremented at each calculation. It has arbitrarily been decided that a minimum step size is 1. Therefore, when the step size and step rate are calculated, if the step rate is greater than the minimum rate, the step size will be 1.
  • step rate is less than the minimum rate, it will be limited to the minimum rate, and the step size will therefore be greater than 1.
  • the number of steps between level a and level b is 70.
  • An envelope is started by one or more of the triggering means to be explained shortly. This sets the envelope value to the start value, and then schedules a call to a recursive procedure at a time in the future equal to (now time + segment 1 step rate). When the system time reaches the specified time, the envelope value is modified by the segment 1 step size, and another procedure call is again scheduled at a time in the future equal to (now time + segment 1 step rate). In this manner, the function repeatedly schedules itself to be called, and at each repetition recalculates the envelope value.
  • the next call is scheduled in the future at (now time + segment 2 step rate), after which the envelope value will be modified by the segment 2 step size, and so on, until the end of the envelope is reached, at which point no further procedure calls are scheduled in the future and the processing of the envelope stops. If a certain segment has been
  • the envelope value may be stored in memory and referenced by other operations, scaled into other ranges and used to vary parameters in real time, and/or scaled into other ranges and sent out as various types of MIDI data.
  • the step rate and step size for each segment may be precalculated according to the settings of the time and level for each segment and stored in memory, or calculated in real-time.
  • the various levels and times may be changed in real-time and a recalculation of the step rate and step size performed without stopping the envelope.
  • clock events are counted to determine when to read out some data, based on a rhythm target value calculated from the cu ⁇ ent phase's rhythm pattern.
  • Automatic advance clock events are provided by an internal or external clock that produces clock events automatically at intervals. The intervals may be regular intervals based on the current tempo (e.g., utilizing a MIDI clock co ⁇ esponding to 24 pulses per quarter note), or may be produced by utilizing a function generator such as an envelope generator to produce clock events that have an i ⁇ egular nature, such as increasing or decreasing the amount of time between the clock events over a period of time.
  • manual advance clock events may be utilized, where a user action such as pressing a key or button has been predetermined to generate one or more clock events, which are then counted in the same fashion.
  • An initialization sequence that independently sets starting values for various indexes and other variables may be performed at any time independently of starting or stopping the effect.
  • the initialization sequence can be performed by user actions such as each new key depression on a keyboard or button depression on an interface, or analyzing the number of keys or buttons cu ⁇ ently being held down by the user,
  • the counting of the clock events can be suspended or the generation of the clock events suppressed, stopping the effect and freezing it at its present position. Furthermore, the counting or generation of clock events may be resumed at any time either with or without initializing again if desired.
  • TRIGGERING MEANS Several different types of trigger actions may be utilized to control the process of the reading out of data. These trigger actions are used to determine a co ⁇ esponding trigger event type: key down trigger: input note-ons or key/button presses from a keyboard or other musical instrument are used to determine key down trigger events, key up trigger: input note-offs or key/Tjutton releases from a keyboard or other musical instrument are used to determine key up trigger events, external trigger: a user controlled device such as a foot switch, front panel button, sensor mechanism etc.
  • location trigger specific locations in a pre-recorded background piece of music are used to determine location trigger events, which can either be embedded in the music as a specific type of predetermined data which is recognized as such, or by calculating a location on the fly, such as a predetermined number of clock ticks, beats or measures.
  • phase trigger a phase change as previously described may send a phase trigger event.
  • time window When the trigger action is key up trigger or key down trigger, three different trigger methods are provided:
  • time windows are used to determine the trigger events.
  • note count the arrival of a certain number of note-ons and/or note-offs, or key button presses and/or releases are used to determine the trigger events.
  • threshold the velocity with which the notes are received (or level of other MIDI data) are used to determine the trigger events.
  • trigger action is key down trigger
  • three different key down conditions are provided: any: all key down trigger events will be utilized.
  • a key down trigger event will only be utilized if there is only one note sustaining (meaning that subsequent key down trigger events caused by adding or removing additional sustaining notes will be ignored).
  • a key down trigger event will only be utilized if it is the first one since the effect was started (meaning that all subsequent key down trigger events will be ignored until the effect is stopped and started again).
  • the present embodiment provides for several separate trigger modes, indicating ways in which the processing of the reading out of data can be controlled by the preceding actions.
  • Each of the trigger modes can be set to utilize one or more of the preceding trigger event types, and one or more of the key down conditions
  • envelope trigger mode an envelope function may be started by a trigger event
  • release trigger mode an envelope function may be allowed to continue from the sustain level into the release segment, or forced into the release segment, by a trigger event
  • initialize trigger mode indexes and other variables may be initialized to predetermined starting values by a trigger event.
  • clock on trigger mode the counting of clock events may be allowed to begin by a trigger event, starting or resuming the effect.
  • the counting of clock events may be suppressed by a trigger event, stopping or pausing the effect.
  • note-ons buffer a predetermined number of storage locations in memory containing data space for a pitch, velocity, and time stamp
  • note-offs buffer a predetermined number of storage locations in memory containing data space for a pitch and time stamp
  • stored note-ons the number of note-ons currently stored in the note-on buffer
  • stored note-offs the number of note-offs cu ⁇ ently stored in the note-off buffer.
  • sustaining notes the number of notes which are cu ⁇ ently sustaining.
  • FIG. 46 is a flowchart showing the [Receive Input Note] routine where one means of controlling the various trigger modes is demonstrated, along with means for generating manual advance clock events.
  • a parameter memory setting is checked to see whether notes are being used for manual advance 4602. If so, one or more manual advance clock events may be generated 4604, which may eventually be utilized by the [Read Out Data] routine 4632 and 4634, as shall be described later.
  • the notes to be utilized for manual advance may be a subset of all available input notes, such as a certain range of input notes (e.g. one octave, two octaves, or contiguous or non-contiguous portions thereof). For example, it might be specified that all input notes with pitches between 60 .and 71 are to be used for manual advance. Furthermore, within the desired notes to be utilized, it may be specified that only note-ons, only note-offs, or both note-ons and note-offs may indicate clock events. For each such note-on and/or note-off, one or more manual advance clock events may be generated simultaneously as desired.
  • the number of clock events generated for each note-on and/or note-off may be derived from the cu ⁇ ent step of a rhythm pattern, so that each such note-on and/or note-off will advance the reading out of data by one step of the rhythm pattern, as shall be described shortly. If notes are not being used for manual advance 4602 or continuing from step 4604, the [Store Input Note] routine is entered 4606.
  • the [Store Input Note] routine shown in FIG. 47 stores note-ons and note-offs in two separate buffers, maintains the count of items in the buffers, and maintains the count of sustaining notes. If the input note is a note-on 4702, the pitch, velocity, and a time stamp indicating when the note-on was received (now time) is stored in the note-ons buffer 4704. Stored note-ons is incremented by one 4706, sustaining notes is incremented by one 4708, and the routine returns 4720. If the input note is a note-off 4702, the pitch and a time stamp indicating when the note-off was received (now time) is stored in the note-offs buffer 4710.
  • the [Note Trigger] routine shown in FIG. 48 allows incoming input notes to potentially trigger any of the trigger modes previously described, using several different triggering methods. If the trigger method is "time window" 4804, the [Time Window Trigger] routine is entered 4806.
  • the [Time Window Trigger] routine shown in FIG. 49 uses two separate time windows for note-ons and note-offs. If the routine has been called by a note-on
  • the on window running flag is checked 4904. If the flag is "yes,” indicating that the window is already running, the routine returns 4924. If the flag is "no,” then the flag is set to "yes” to indicate the window is now running 4906. A procedure call to the [Reset Note-On Window] routine is then scheduled for a predetermined "n" milliseconds (e.g. 30 ms) in the future 4908 .and 4910, and the routine is finished 4924.
  • n milliseconds
  • the [Reset Note-On Window] routine shown in FIG. 50 resets the flag allowing the note-on window to be ran again, and then sends a key down trigger if a certain number of note-ons have been stored at that time.
  • the on window running flag is first reset to "no" 5002, allowing the window to again be ran. If the cu ⁇ ent number of stored note-ons is greater than or equal to a predetermined target value 5004, a call is made to the [Process Triggers] routine (not yet described) with a key down trigger event 5006. If stored note-ons is not greater than or equal to the target value, no trigger is sent, and the routine is finished 5010. Returning to the [Time Window Trigger] routine of FIG.
  • the [Reset Note-Off Window] routine shown in FIG. 51 resets the flag allowing the note-off window to be ran again, and then sends a key up trigger if a certain number of note-offs have been stored by this time, allowing the further refinement of not setting the trigger flag if any notes are cu ⁇ ently sustaining.
  • the off window running flag is reset to "no" 5102, allowing the window to again be ran. If the cu ⁇ ent number of stored note-offs is greater than or equal to a predetermined target value 5104, the sustaining notes value is checked 5106. If it is "0", then no notes are being held down, and a call is made to the [Process Triggers] routine with a key up trigger event 5108.
  • note-ons If stored note-ons is not greater than or equal to the target value 5104, or sustaining notes does not equal "0" 5106, no trigger is sent and the routine is finished 5110. In this manner, the arrival of notes can be grouped together and used to determine trigger events, either for key down activity (note-ons) or key up activity (note-offs). Note that the target value for the number of note-ons or note-offs can be
  • the trigger method is not "time window” 4804, it is checked whether the trigger method is "note count” 4808. If so, the [Note Count Trigger] routine is entered 4810.
  • the [Note Count Trigger] routine shown in FIG. 52 checks whether a certain number of note-ons or note-offs has been received, and allows the trigger modes to potentially be triggered if so. If the input note is a note-on 5202, it is checked whether the stored note-ons is greater than or equal to a predetermined target value 5204. If so, a call is made to the [Process Triggers] routine with a key down trigger event 5206 and the routine returns 5214.
  • the routine returns with no trigger being sent. If the input note is a note-off 5202, it is checked whether the stored note-offs is greater than or equal to a predetermined target value 5208. If so, a call is made to the [Process Triggers] routine with a key up trigger event 5210 and the routine returns 5214. Otherwise, the routine returns with no trigger being sent. In this manner, the count of notes can be used to determine trigger events, either for key down activity (note-ons) or key up activity (note-offs). Note that the target value for the number of note-ons or note-offs can be any value from 1 up.
  • the [Threshold Trigger] routine shown in FIG. 53 checks whether the velocity of note-ons received so far exceeds a predetermined threshold, and allows the trigger modes to potentially be triggered if so. It is first checked if any of the note-ons cu ⁇ ently stored in the note-ons buffer has a velocity greater than or equal to a predetermined threshold 5302. If so, it is then checked whether a note-on called the routine 5304. If so, a call is made to the [Process Triggers] routine with a key down trigger event 5306, and the routine returns 5314. If a note-off called the routine 5304, a call is made to the [Process Triggers] routine with a key up trigger event 5308 and the routine returns 5314.
  • the routine returns without any triggers being sent 5314.
  • the velocity of notes can be used to determine trigger events, either for key down activity (note-ons) or key up activity (note-offs).
  • the step of testing the velocities of the note-ons in the note-ons buffer can comprise finding a velocity greater than or equal to a threshold, or less than or equal to a threshold, or performing an average on all the velocities stored and using the average value for the test.
  • the threshold can be a range of minimum/maximum velocity levels that the test velocity must be within or outside of.
  • other types of MIDI data could be tested against thresholds in a similar fashion, such as aftertouch data, or controllers such as mod wheels and ribbons. In this case, the MIDI value itself would simply be tested against the threshold at step 5302 rather than utilizing notes in a buffer, the test at step 5304 would be skipped, and an external trigger event type would be sent to the [Process Triggers] routine.
  • the [Process Triggers] routine may have been called 4618 by one or more of the previously described trigger events. This routine can also be called eventually as the result of the arrival of an external or location trigger 4610.
  • external triggers received from buttons, pedals, or other user operated controls
  • such triggers can be initiated by either the up or down position of a 2-stage control, the high or low value of a continuous controller, any position arbitrarily designated in between, or any combination of all of these.
  • a location trigger any predetermined data value inserted at various positions in the pre-recorded backing track can be used to initiate a call to this routine.
  • positions such as the start of each measure can be determined in real-time without the addition of predetermined data, and can also be used to call this routine.
  • an external or location trigger is determined 4610, a parameter memory setting is checked to see whether these triggers are being used for manual advance 4612. If so, one or more manual advance clock events may be generated 4614, which may eventually be utilized by the [Read Out Data] routine 4632 and 4634. For each external or location trigger to be utilized, one or more manual advance clock events may be generated simultaneously as desired. Furthermore, the number of clock events generated for each external or location trigger may be derived from the cu ⁇ ent step of a rhythm pattern, so that each such trigger will advance the
  • the [Process Triggers] routine may potentially be called by any of the methods previously described, with one of the trigger event types 5400.
  • a loop is performed for each envelope utilized (three in the present example) consisting of the steps 5402 through 5410. It is first checked if the envelope has been set to utilize the trigger event type 5404. If not, execution loops back to 5402. If so, it is checked whether the trigger event type is a key down trigger 5406. If so, it is tested whether conditions are cu ⁇ ently met to allow the key down trigger event to be utilized 5408. As previously described, there are three different key down conditions that can be selected for use. If the key down condition is "any", then all key down trigger events are used and the envelope is started 5410.
  • the key down condition is "first note”
  • the cu ⁇ ent value of sustaining notes is checked to see how many notes are sustaining. If only one note is sustaining, the envelope is started 5410. Otherwise, the condition is not met and execution loops back to 5402.
  • the key down condition is "after stop”, then a flag in memory that is set each time the effect is stopped is checked. If this is the first key down trigger event since the flag was set, the envelope is started 5410 and the flag in memory set to indicate that no more key down events are to be used until it is reset by the effect being stopped. Otherwise, the condition is not met and execution loops back to 5402. If the trigger event type is not a key down trigger event 5406, the envelope is also started 5410 before execution loops back to 5402. In this manner, various actions can individually and selectively start one or more of the envelopes being utilized.
  • the release trigger mode for each envelope may also be controlled by the addition of another set of tests similar in form to steps 5402 - 5410, with the result that the envelope enters the release segment of operation as previously described.
  • the initialize trigger mode has been set to utilize the trigger event type 5412. If so, it is checked whether the trigger event type is a key down trigger 5414. If so, it is tested whether conditions are cu ⁇ ently met to allow the key down trigger event to be utilized 5416. As previously described for the envelopes, the same three key down conditions are evaluated, and if the conditions are met, the various indexes and desired values are selectively initialized and reset to starting values 5418. If the event trigger type is not a key down trigger event 5414, the indexes and values are also initialized and reset 5418. In this manner, various actions can selectively reset indexes and other values to predetermined starting values, achieving the effect of restarting the reading out of data from the beginning, or other repeatable location.
  • the initialize trigger mode does not utilize the trigger event type 5412, or the conditions are not met 5416, or continuing from step 5418, it is then checked whether the clock on trigger mode has been set to utilize the trigger event type 5420. In a similar fashion as previously described, if the event type is a key down trigger 5422 and conditions are met 5424 or the event type is not a key down trigger, a flag in memory is set indicating that clock events are to be allowed to be counted 5426. In this manner, various actions can selectively start or resume the read out of data.
  • the clock on trigger mode does not utilize the trigger event type 5420, or the conditions are not met 5424, or continuing from step 5426, it is then checked whether the clock off trigger mode has been set to utilize the trigger event type 5428. In a similar fashion as previously described, if the event type is a key down trigger 5430 and conditions are met 5432 or the event type is not a key down trigger, a flag in memory is set indicating that clock events are no longer allowed to be counted 5434. In this manner, various actions can selectively stop or pause the read out of data.
  • the note-ons buffer and note-offs buffer may be optionally emptied, and stored note-ons and stored note-offs reset to "0" 5436, after which the routine returns 5440. It could also be a ⁇ anged that the reset of the buffers was selectively accomplished by other means, so that more note-ons and note-offs could be added to those already stored, and this routine called again.
  • a series of steps such as 5420 through 5426 may be utilized to choose a new starting seed and/or reset the starting seed to a stored seed, and remain within the scope of the invention.
  • one or more additional trigger modes would exist for the choosing and/or resetting of the seeds, which may be set to utilize any of the various trigger event types to call the [Initialize Seeds] routine of FIG. 4 and/or the [Repeat Random Sequence] routine of FIG. 6.
  • the steps of storing the note-ons 4704 and storing the note-offs 4710 could be skipped, but rather just a count of stored note-ons and note-offs incremented 4706 and 4712.
  • a single buffer could be maintained, with by adding an incoming note to a buffer when a note-on message is received, and removing the note when receiving a co ⁇ esponding note-off message. In this manner, the buffer contains all notes cu ⁇ ently being sustained at a particular moment, and the sustaining notes count is not needed.
  • the [Time Window Trigger] and [Note Count Trigger] routines may then be used to determine key down trigger events by checking the number of sustaining notes.
  • the [Threshold Trigger] routine could simply analyze the last received velocity, and not check the velocities of notes in a buffer.
  • the time stamp stored in steps 4704 and 4710 was not utilized in the present embodiment, but will be utilized in a later embodiment.
  • Automatic advance clock events 4630 are provided by an internal or external clock that produces clock events automatically at intervals; the previously described tempo envelope may be used to modify the tempo of an internal clock event generator, thereby increasing and/or decreasing the amount of time between the clock events over a period of time.
  • FIG. 55 is a flowchart of the [Read Out Data] routine, which shows the process of reading data out with clock event advance.
  • all patterns and other referenced parameters are considered to be those designated as the cu ⁇ ent phase. Since specific value patterns and/or random pool patterns may be utilized, the terms "cu ⁇ ent value" or "cu ⁇ ent pair of
  • 111 values refers to the value(s) derived from the location indicated by the pattern's associated pattern index, not necessarily the actual values in the pattern.
  • an initialization sequence has set the note series index (which is a pointer into an addressable series indicating the next value to use) and all pattern indexes to predetermined starting values.
  • An initial rhythm target value has been calculated by using the cu ⁇ ent value of the rhythm pattern. In this example, that value is a number of clock events at a base resolution of 24 cpq. Those of skill in the art will recognize that. Other a ⁇ angements are possible.
  • the rhythm pattern's associated rhythm modifier may be used to modify the cu ⁇ ent value derived from the pattern step; in this case it is used as a multiplier.
  • a memory location clock event counter (that is used to count clock events as they occur) has been set to the rhythm target value (so that the first clock event will generate a note as shall be seen).
  • a user action has been performed (such as the previously described triggering means) that indicates that clock events are now to be counted, by setting a flag in memory indicating that counting is to begin or resume.
  • the [Read Out Data] routine is then called for every clock event received 5500. If the clock event count is not yet equal to the target value 5504, the clock event count is incremented 5554 and the routine is finished 5556. If the clock event count is equal to the rhythm target value, then the clock event count is reset to "1" 5508, the rhythm pattern index is advanced to a new location, and a new rhythm target value is calculated as described above for the next time the routine is called.
  • a decision is then made as to whether it is time for a phase change 5512. This can be caused by one or more of the following methods:
  • phase changes can be flagged to occur at specific locations, such as the beginning of each beat or the beginning of a measure.
  • user actions may specify directly a certain phase to change to, thereby setting a flag indicating a phase change, or set the flag directly, so that the next value of a phase pattern will be used.
  • the cu ⁇ ent value derived from the cu ⁇ ent step of the cluster pattern is used to set the number of times to perform a loop 5516.
  • the value may be optionally modified by the cluster pattern's associated cluster modifier, such as compressing or expanding the value.
  • the loop consists of the steps 5517 through 5548, with each repetition generating one or more notes and other MIDI data. If a cluster pattern is not being used, this step 5516 can be skipped and the loop would execute one time.
  • a note is retrieved from a note series in memory at the location specified by the note series index 5517.
  • the pitch of the note can optionally be altered in one or more of the following ways, which have been previously described in more detail during the creation of the note series. These operations may be performed here selectively as an alternative or in addition to those operations:
  • the note series index may be advanced to a different
  • the pitch of the note can be optionally scaled into a certain range and sent out as pitch bend data 5518.
  • the resulting bend value is sent out as a MIDI pitch bend message, transforming the pitches of the notes into full-range pitch bend messages. This is typically done once per cluster but may also be done for each repetition of the loop. If processing was being performed more than one time simultaneously, the reading out operation could end here with only pitch bend data being sent out, while another simultaneously running reading out operation could be reading notes out of a different note series in memory. The combined effect would be one of note generation from one note series and pitch bend generation from a different note series being achieved simultaneously. Other ranges and values can be used, and the generated data could be sent out as other types of MIDI messages other than pitch bend.
  • the velocity of the note can be modified by the current value of the velocity pattern 5520.
  • Such modification can be an addition or subtraction of an amount, or a direct replacement of the value, after which the velocity pattern index is moved to another location.
  • the retrieval of the value and movement of the index is typically done once per cluster but may also be done for each repetition of the loop.
  • the velocity may be further optionally modified or replaced by the cu ⁇ ent envelope value of a velocity envelope, such envelope having been triggered by the triggering means as previously described.
  • this is done by scaling the envelope value of ⁇ 0 - 100 ⁇ into an offset of ⁇ -127 - 0 ⁇ and adding it to the velocity already calculated, with other ranges possible.
  • the cu ⁇ ent value of the spatial location pattern can be retrieved and sent out
  • MIDI pan message after which the spatial location pattern index is moved to another location 5524.
  • the value may be optionally modified by the spatial location pattern's associated spatial location modifier, such as compressing or expanding the values.
  • the retrieval of the value and movement of the index is typically done once per cluster but may also be done for each repetition of the loop. While this example shows MIDI pan data being used, other types of data can be used, including data required to move a sound in a multi-dimensional field.
  • any data being defined by an assignable pattern as previously described may be sent out in a similar fashion as the spatial location pattern, and the assignable pattern index moved to a new location.
  • the strum pattern index is then moved to another location; the retrieval of the values and movement of the index is done once per cluster at the beginning.
  • strum time ((cluster size size - 1) - i) * strum ms
  • the result of this process is that when the strum pattern direction is up, the cluster of notes will eventually be issued in the order they exist in the note series with the first note being generated immediately and the others having 10 ms between them as will be described shortly; when the strum direction is down, the notes will be put out in the reverse order they exist in the note series, the last note being generated immediately and 10 ms between the others in reverse order.
  • the predetermined time between notes could also be a part of the pattern, so that each stroke of the pattern can have a different amount of time delay between the notes as they are issued.
  • a toggle in memory that flip-flops between 0 and 1 each time it is accessed may be utilized, indicating an alternation of up and down strums.
  • Additional notes can be retrieved from the note series using various replication algorithms, such as doubling or inversion 5536.
  • Inversion takes the cu ⁇ ent value of the note series index and creates an additional index which is inverted with respect to the size of the note series or a portion thereof.
  • additional inverted index size of note series or portion - note series index.
  • Doubling adds one or more offset amounts to the note series index to calculate additional indexes from which to retrieve notes, taking into account the size of the note series and discarding or wrapping around indexes that are out of range.
  • a duration time may then be calculated from the cu ⁇ ent value of the duration pattern, after which the duration pattern index is moved to another location 5540.
  • the retrieval of the value and movement of the index is typically done once per cluster but may also be done for each repetition of the loop.
  • This duration time is an amount of time in milliseconds in the future (from the present time) at which to issue a note-off for a co ⁇ esponding note-on, thereby controlling the length of the note.
  • the duration pattern value is a number of clocks related to 24 cpq (with other divisions being possible).
  • the duration pattern's associated duration modifier may then be used to modify the value in the same fashion as explained for the rhythm pattern.
  • the resulting duration time may be calculated according to the following
  • duration time (duration pattern value * (60000 / tempo)) / cpq
  • duration pattern value * (60000 / tempo) For example, at a tempo of 120 bpm with a duration pattern value of 12 (8th note), the formula yields a duration time of 250 ms.
  • absolute millisecond values are utilized for the duration pattern, the values may be used directly. If a duration pattern is not desired to be used, a fixed duration value may be substituted instead, such as the length of time co ⁇ esponding to an 8th note at the cu ⁇ ent tempo, or a predetermined value such as 50 ms.
  • the cu ⁇ ently retrieved notes are scheduled to be issued in time-sequential order by placing pointers to the MIDI note-on and note-off events (and procedures that issue them) inside a task list as previously described 5544.
  • the note-on events are scheduled by placing them in the list at (now time + strum time). Therefore, according to the previous example, the first note-on will be generated immediately, the second one 10 ms later, and so on. If no strumming is being used, all note-ons are scheduled at now time, which causes them to be sent out immediately.
  • a co ⁇ esponding note-off event for each note-on event is scheduled by placing it in the list at (now time + strum time + duration time). Therefore, according to the previous example where a duration time of 250 ms was calculated, the note-off co ⁇ esponding to the first note-on will be issued 250 ms after the first note-on, the note-off co ⁇ esponding to the second note-off 260 ms later, and so on.
  • the note series index is moved to a new location based on the cu ⁇ ent value of the index pattern, after which the index pattern index is moved to a new location 5548.
  • the movement of the indexes is typically done for each repetition of the loop, but may also be done once per cluster.
  • the movement of the note series index is accomplished by a mathematical procedure specified by the index pattern value, and the phase direction. If the cu ⁇ ent phase direction is up, addition is performed with the value of the index pattern; if the cu ⁇ ent phase direction is down, subtraction is performed.
  • the loop 5517 - 5548 may then repeat
  • this step 5548 can be replaced by the addition of a constant value such as 1 when the phase direction is up, and the subtraction of a constant value such as 1 when the phase direction is down.
  • the note series index can be further adjusted by the cluster pattern size 5552 depending on the cluster advance mode as has been previously described, after which the cluster pattern index is moved to a new location. If a cluster pattern is not being used, this step can be skipped. This completes the clock event advance read out of data 5556 until the next time the count of clock events equals the current rhythm target value 5504.
  • a counter originally set at "0" during an initialization routine is incremented for each phase change 5560. If the count reaches the total specified number of phases 5564, the counting of clock events is stopped 5580 by setting a flag in memory indicating suspension of counting. This routine will then no longer be called, thus terminating the effect. However, if the count of phases is less than the total specified number, the phase is changed 5568.
  • One way of accomplishing this is to provide a master pointer that points to the address in memory of different phase parameters stored as stractures.
  • the master pointer was initialized to point to the address in memory of a phase location based on a predetermined starting value, which may have been based on a value derived from the first step of the phase pattern.
  • the master pointer is changed to point to a potentially different phase's memory location based on a value derived from the next step of the phase pattern, after which the phase pattern index is moved to a new location. For example, if the pointer is cu ⁇ ently pointing at phase 1, and the next derived value of the phase pattern is 2, then after the operation the pointer would be pointing at phase 2, indicating the use of phase 2 patterns and parameters in subsequent processing. While this example shows the use of a phase pattern, a user may directly specify a new phase to change to, in which case step 5512 will occur, and at step 5568 the phase pattern can be ignored, and the user specified value employed.
  • phase pattern may be omitted if desired, with all phase changes occurring due to user actions.
  • the note series index is then optionally reset to a predetermined starting value for the cu ⁇ ent phase 5572.
  • various cu ⁇ ent pattern indexes may be selectively and independently reset to starting values 5576, so that certain patterns may start from a repeatable location.
  • various random seeds may be selectively and independently reset to their stored values 5577, so that repeatable random number sequences are generated.
  • the phase pattern contains data indicating various parameters should be changed, the indicated parameters may then be changed to new values 5578.
  • a phase trigger event may be optionally sent to the [Process Triggers] routine 5579, thereby controlling such functions as the starting of envelope functions.
  • the process now proceeds to step 5516 and the subsequent loop using the parameters of a potentially different phase. If only one phase is being used, or the same phase is being used repeatedly, no actual movement of the pointer takes place, but the phase change may be used to reset the various indexes and change parameters as shown.
  • the cluster pattern value derived at step 5516 may be used to perform a loop reading out other types of data, such as individual samples of digital audio data, with the index pattern and note series index indicating the next location of the data to read out. For example, 1 second of digital audio data recorded at the CD standard rate of 44.1k contains 44,100 individual samples of data. Each of those individual samples could be addressed as independent memory locations according to the reading out of data methods described herein, and the data read out and reissued as digital audio.
  • rhythm pattern being utilized is a random tie rhythm pattern. As the randomly chosen ties cause the
  • rhythm pattern to skip indexes as previously described, other patterns using the rhythm pattern index instead of their own index will track the position of the rhythm pattern and therefore maintain a logical co ⁇ espondence.
  • the retrieval of the note from the note series at step 5517 may be replaced by a random choice, utilizing a pseudo random number generator.
  • the number of steps in the note series is considered the pool size according to the conventions employed herein, and a weighting method may be utilized to favor areas of the pool over other areas. For example, a weighting curve may be utilized whereby the beginning, end, or other portion of the note series has indexes selected more often.
  • FIG. 56 shows an example of reading out of data according to the previously described process.
  • the example begins with the contents of a note series in memory 5600 (8 notes consisting of pitch and velocity at sequential index locations (steps) ⁇ 1 - 8 ⁇ ).
  • Two phases consisting of a variety of patterns 5602 are shown below the note series. These are not necessarily representations of the exact patterns, since specific value patterns or random pool patterns could be utilized. Instead, these are the values that will be derived from the patterns during processing.
  • the values derived from the cluster patterns in this example are ⁇ 1 ⁇ in both phases so that only one note at a time is generated. Also, duration patterns, strum patterns, and program patterns are not included in this example although they could have been utilized.
  • a phase pattern of ⁇ 1, 2 ⁇ is being used, and that the phase direction of phase 1 is "up,” and the phase direction of phase 2 is "down.”
  • a sequence of 21 rhythm events (when the count of clock events meets the cu ⁇ ent rhythm target value) are shown below 5604, along with the values of the various indexes in memory for each rhythm event.
  • rhythm events in phase 1 will be generated as straight
  • the pitch and velocity in the note series at note series index 1 is retrieved (60, 115) , the velocity 115 has the first phase 1 velocity pattern value 0 added to it, and the first spatial location pattern value 0 is sent out as pan data.
  • the pitch 60 (C4) is generated, with a velocity of 115, after which all pattern indexes have advanced by 1 (or loop back to the beginning if such advancement puts them out of range of the pattern they are indexing).
  • the cu ⁇ ent index pattern value 1 is added to the note series index, and the pitch and velocity at note series index 2 of the note series is retrieved (64, 127), the velocity 127 has the second velocity pattern value -20 added to it, the second spatial location pattern value 32 is sent out, and the note 64 (E4) is generated with a velocity of 107.
  • the processing continues in like fashion, with the note series index being modified by the index pattern, indicating the index of the note series to retrieve, until rhythm event 13 has finished execution.
  • the note series index 7 will now have the next index pattern value 2 added to it, and it becomes 9.
  • this is used to determine a phase change, since the note series index is now greater than note series items (8).
  • the note series index is reset to 8, the cu ⁇ ent phase pointer is set to point to the address of memory locations for phase 2, and processing continues using the pattern values from phase 2.
  • the pattern indexes are all reset to the starting points of the patterns regardless of their cu ⁇ ent position.
  • the pitch and velocity at note series index 8 is retrieved (83, 120), the velocity 120 has the first phase 2 velocity pattern value 0 added to it, and the first spatial location pattern value 0 is sent out.
  • the pitch 83 (B5) is generated, with a velocity of 120, after which the pattern indexes have advanced by 1. Furthermore, since the rhythm pattern in phase 2 is different, this
  • 121 note will have the rhythm of an 8th note (first value 12 in phase 2's rhythm pattern values), as shown by the musical notation.
  • the cu ⁇ ent index pattern value 3 is subtracted from the note series index (since phase 2 is operating in the down direction).
  • the pitch and velocity at note series index 5 is retrieved (72, 115), the velocity 115 has the second velocity pattern value -10 added to it, and the second pan value 127 is sent out.
  • the note 72 (C5) is generated with a velocity of 105 and the rhythm of a 16th note (second value in phase 2's rhythm pattern values), and so on.
  • FIG. 57 shows two additional examples of the reading out of data process using the same note series.
  • a sequence of 13 rhythm events 5702, the co ⁇ esponding cluster pattern values, the note series indexes used to retrieve the pitches and velocities from the note series, and the resulting generated notes are shown below. Since the cluster advance mode for phase 1 is "single" and the direction is “up,” the actual net advance of the note series index after each cluster is only 1 even though it increments with each note due to the index pattern of 1. However, in phase 2, the cluster advance mode is "cluster” and the direction is “down.” As a result, the actual note series index is decremented each time a note in a cluster is produced due to the index pattern of 1 and is not adjusted at the end of the cluster. Thus, at rhythm event 9, indexes 7 and 6 are chosen, after which at rhythm event 10 index 5 is chosen since there was a net advance of 2, and the index was not reset as in single mode.
  • Phase 1 contains duration pattern values of ⁇ 12, 12, 6 ⁇ co ⁇ esponding to ⁇ 8th - 8th - 16th ⁇ (at 24 cpq) while phase 2 has a duration pattern value ⁇ 12 ⁇ indicating straight 8th notes.
  • Phase 1 has stram pattern values indicating ⁇ down, down, up ⁇ .
  • Phase 2 has stram pattern values indicating ⁇ down, up ⁇ .
  • rhythm events 5706, including the rhythm pattern, duration pattern, and strum pattern values for each rhythm event are shown below.
  • the "V” and “inverted V” indicate the direction of the strums.
  • the rhythm target value is 24
  • the duration pattern value is
  • rhythm event 2 the rhythm target value is 12, the duration pattern value is 12, and the stram pattern value is "D,” resulting in an 8th note chord generated with an 8th note duration arpeggiated slightly in a downward direction.
  • rhythm event 3 the rhythm pattern value is 12, the duration pattern value is 6, and the strum pattern value is "U,” resulting in an 8th note chord with a 16th note duration (yielding a 16th note rest) arpeggiated slightly in an upwards direction.
  • a dram pattern is a note series of any length consisting of pitches and null values, or pools of pitches or pitches and null values, where a null value represents the absence of a pitch.
  • the pitches are note numbers co ⁇ esponding to pre-defined drum and percussion maps. Further, in the examples discussed here, the notes numbers are in the range 24 to 96, and co ⁇ espond to the General Midi Specification dram maps; other ranges and maps are possible.
  • One example of values derived from a dram pattern is the following: ⁇ 36, 0, 0, 0, 38, 0 36, 0, 36, 0, 0, 0, 38, 0, 38, 38 ⁇ .
  • FIG. 58 shows examples of two different rhythm patterns being utilized to read out these example values.
  • the index pattern (not shown) will produce the value ⁇ 1 ⁇ (the note series index will simply increment, and wrap around back to the beginning upon reaching the end of the note series.) For clarity, velocity patterns, duration patterns, pan patterns, phase changes etc. are omitted.
  • rhythm caused by a rhythm pattern value of ⁇ 6 ⁇ (16th note at 24 cpq) is shown 5804. Therefore, when reading data out of the dram pattern with this rhythm pattern causing the rhythm events, the dram notes shown in musical notation will be produced 5806. As seen, each time the null value 0 is retrieved from the note series, no data is issued, resulting in the absence of a sound (perceived as a rest).
  • the rhythm caused by a rhythm pattern of ⁇ 6, 12 ⁇ (16th note, 8th note) is shown 5808.
  • the dram notes shown in musical notation will be produced 5810.
  • the resulting drum beat has a different rhythm than 5806, extending partially into a second measure. In this manner, the same dram beat can be read out of memory with a different rhythm pattern, resulting in a different drum beat.
  • FIG. 59 is an example of the effect of reading data out of the same dram pattern with cluster pattern values of ⁇ 3, 1, 2 ⁇ , a cluster advance mode of "single” and a rhythm pattern value of ⁇ 6 ⁇ (16th note).
  • the index pattern (not shown) will again produce the value ⁇ 1 ⁇ . Any time the note series index goes outside of the range ⁇ 1 - 16 ⁇ (the dram pattern steps) it will be wrapped around by modulo division; for example, the value 17 becomes 1, 18 becomes 2, and so on.
  • a number of indexes equal to the cluster pattern value are retrieved from the drum pattern.
  • the cluster advance mode is "single," the note series index at the beginning of each cluster only has a net advance of l from the previous cluster, as previously described. Therefore, at rhythm event 1, 3 items are retrieved from indexes ⁇ 1, 2, 3 ⁇ since the index pattern value of ⁇ 1 ⁇ is added with each retrieval. At rhythm event 2, the note series index is set so that there was only a net advance of 1, and 1 item is retrieved from index ⁇ 2 ⁇ . At rhythm event 3, 2 items are retrieved from indexes ⁇ 3, 4 ⁇ and so on. Duplicate pitches are shown in bold face and ultimately discarded. Null values produce no output.
  • FIG. 60 is an example of the same cluster pattern values ⁇ 3, 1, 2 ⁇ , but the cluster advance mode is set to "cluster.” Therefore, the note series index at the beginning of each cluster has a net advance of the previous cluster size 6000. For example, at rhythm event 1 , the first 3 items of the dram pattern are retrieved from indexes ⁇ 1, 2, 3 ⁇ since the index pattern value of ⁇ 1 ⁇ is added with each retrieval.
  • rhythm event 2 the note series index has not been reset but continues from its present location, and 1 item is retrieved from index ⁇ 4 ⁇ .
  • rhythm event 3 2 items are retrieved from indexes ⁇ 5, 6 ⁇ , and so on.
  • FIG. 61 is an example utilizing index pattern values of ⁇ 1, 4, -2 ⁇ to read data out of the drum pattern.
  • the cluster pattern value is assumed to be
  • note series index dram pattern size - note series index
  • index patterns and cluster patterns may be used together to further alter the read out of the data.
  • each drum pattern maintains a separate note series index, and separate pattern indexes, so that each pattern can be indexed in an independent manner, and data read out of different locations as desired.
  • the previously explained envelopes may have their time reference scaled to the length of a certain portion of the reading out procedure. This may be done by processing the portion desired according to the previously described process, but rather than using regularly received automatic and/or manual advance clock events, clock events are generated as fast as processing allows while suppressing the output of any data.
  • FIG. 62 is a flowchart showing the operation of a [Calculate Phrase Length] routine which may be used to scale the time reference of the envelopes to the length of a portion of musical effect to be generated. This routine may be called at any time during other processing to update the envelopes. First, the receipt of regular automatic and/or manual advance clock events is "locked out," so that the [Read Out
  • the cu ⁇ ent values of the variables and indexes are restored 6212 from the values that were stored previously at step 6204. This has the effect of restoring the previous state of the variables and indexes at the point in the processing sequence prior to this procedure being called.
  • the receipt of regular automatic and/or manual advance clock events is then restored 6214, after which the read out of data may continue as previously described.
  • the accumulated rhythm target value may then be utilized to calculate a new time range for any envelopes which may be basing their time range on this method 6216, and the routine is finished 6220.
  • time range ((60000 / tempo) / cpq) * accumulated rhythm target.
  • Locations in the addressable series from which to read out data are chosen by one or more of several methods:
  • MIDI controllers such as a ribbon, mod wheel, joystick and so on configured for this purpose; the value passed to the routine is the current value of the controller;
  • buttons and keys These can be numbered in a series of ⁇ 1 to "n" ⁇ ("n" being an integer representing the number of such buttons or keys).
  • the value passed to the routine is the number of the button, which may optionally be velocity-sensitive, in which case, the velocity is also passed to the routine, with a velocity of 0 being sent on the release of the button. If the buttons are not velocity sensitive, a default velocity such as 127 for button press and 0 for release can be used.
  • a direct index call is a single operation of the direct indexing routine, utilizing the value from one of the previous methods.
  • a direct index chord is a group of
  • a direct index chord may be created from two or more direct index calls, such as by multiple key presses grouped together using a process such as the time window method previously described, or by buttons or keys on the control panel of an electronic musical instrument configured to send a group of direct index calls. This will cause several different indexes from the addressable series to be chosen and output as MIDI notes simultaneously, creating a chord, in which case a flag in memory will be set indicating that a direct index chord has occu ⁇ ed. This flag may then be utilized during selection of values in the following routine.
  • FIG. 63 is a flowchart of the direct index routine. Since many of the steps in this routine are the same as or similar to FIG.
  • the process of direct indexing in FIG. 63 begins with an input call from a continuous controller 6300, a keyboard 6301, and/or a button 6302. If a keyboard key 6301 or a button 6302 is the source of the call, the velocity of the key or button press is stored 6304.
  • the note series index is calculated by linearly scaling the value from an original (old) range to a value within a new range.
  • the old range is typically 0 to 127 (old bottom and old top).
  • Keyboards will have a predetermined range of valid note numbers ranging from the lowest pitch to the highest pitch.
  • interface keys or buttons may be considered to have an old range of ⁇ 1 to the number of buttons.
  • the new range (new bottom and new top) is ⁇ 1 to the number of steps in the note series. ⁇
  • note series index ((value - old bottom) * (new top - new bottom) / (old top - old bottom)) + new bottom.
  • any portion of the range may be utilized (e.g. ⁇ 1 to (length / 2) ⁇ , ⁇ 3 to (length - 2) ⁇ , and so on).
  • the note series index may optionally be filtered or adjusted by comparing it with the last note series index calculated by a previous running of this routine 6310.
  • a continuous controller it is advantageous to filter out repetitions of the same value, so if the value was the same, the routine would terminate 6356.
  • the source note-off or button release will generate the same adjusted pitch as a note-off co ⁇ esponding to the note-on.
  • the routine After filtering or adjustment of the note series index, it is determined whether or not the routine was called by a note-on 6312. In the case of a continuous controller, all values are considered to be note-ons with an arbitrary default velocity value such as 127. In the case of a keyboard or user interface button, the depression of the key or button is considered to be a note-on, and the release is a note-off. If the routine was called by a note-on, the cu ⁇ ent value of the cluster pattern is used to determine the number of times to perform a loop 6316. The loop consists of the steps 6317 through 6348, with each repetition generating one or more notes and other MIDI data. If a cluster pattern is not being used, this step 6316 can be skipped and the loop would execute one time.
  • a note is retrieved from a note series in memory at the location specified by the note series index 6317.
  • the note may be optionally modified as previously described.
  • the actual velocity or a stored velocity is selected 6318. This can be determined by settings in memory. In the case of a continuous controller calling the routine, the actual velocity would be a default value such as 127 with other values
  • the actual velocity will be the velocity with which the key or button was pressed, and was stored previously 6304. If not using actual velocity, then the velocity stored in the note series can be used. In the subsequent steps, previously described operations are performed.
  • the pitch of the note can be optionally scaled into a certain range and sent out as pitch bend data 6319.
  • the velocity of the note can be modified by the current value of the velocity pattern and velocity envelope, for each note or once per cluster or direct index chord 6320.
  • the cu ⁇ ent value of the spatial location pattern is sent out as pan data, for each note or once per cluster or direct index chord 6324.
  • a stram time is calculated, once per cluster or direct index chord 6332, and additional notes can be retrieved from the note series using various replication algorithms 6336.
  • the cu ⁇ ently retrieved notes are then issued at scheduled times as note-on messages 6340.
  • the loop ends and another part of the routine will handle the note-offs. Otherwise, if actual durations are not being used, the duration pattern will be utilized. In such a case, it will be necessary to calculate duration times based on a duration pattern value 6346 (or constant value if not utilizing a duration pattern) and schedule the issuance of note- offs co ⁇ esponding to the issued note-ons 6348, before continuing the loop. If required, the loop executes again.
  • the cluster pattern index is advanced 6352, either once per direct index chord or per every execution of the routine.
  • the routine ends 6356, until the next time a user action calls the routine.
  • this information may be used to control the duration of the generated notes. If actual duration is not selected 6358, then steps 6346 and 6348 have already scheduled the issuance of the note-offs and the routine terminates 6356. If actual duration is selected 6358, note-off messages are sent out immediately for any note-ons not previously scheduled or issued 6360, thereby imposing the actual duration on the
  • FIG. 64 illustrates an example of direct indexing using a MIDI continuous controller, such as a ribbon controller that allows placing the fmger at any starting point and moving upwards or downwards from there, thereby generating a range of values (e.g. ⁇ 0 - 127 ⁇ ).
  • the example shows the contents of an 8 step note series 6400 (consisting of pitch and velocity at sequential index locations ⁇ 1 - 8 ⁇ ). Spatial location and duration pattern values for a single phase are also shown 6402. For purposes of clarity, other various patterns are not shown. Scaling of the controller output into a note series index ⁇ 1 - 8 ⁇ is accomplished by the algorithm in chart form 6404 although it should be recognized that other algorithms could be used.
  • a series of values generated by the ribbon controller is illustrated by the tables and musical notation in the lower portion of the figure 6406.
  • the numbers in bold type signify a discontinuity in the input to the controller caused by lifting the fmger and starting in a new place (a location jump).
  • duplicate note series indexes can be filtered out and not cause any output as previously described.
  • the controller provides multiple sequential values between 0 and 18, no additional output occurs until the controller output enters a new input range 6404 (e.g. ⁇ 19 - 36 ⁇ or ⁇ 27 - 54 ⁇ ).
  • the resulting scaled note series index 6406 retrieves pitches and velocities from the note series, and pan data is selected by advancing through the pan pattern as each successive note is generated. Since the duration pattern value is ⁇ 6 ⁇ , each note is generated with a duration of a 16th note, but the rhythm of the resulting notes is determined by the movement of the continuous controller. Although the musical notation shows the pitches and durations of the phrase, no rhythm is implied.
  • FIG. 65 is a diagram showing another example direct indexing using a number of user interface buttons, in this example assumed to be 12 buttons numbered ⁇ 1 - 12 ⁇ .
  • the example shows the contents of a 12 step note series 6500 (consisting of pitch and velocity at sequential index locations ⁇ 1 - 12 ⁇ ).
  • Various pattern memory locations for a single phase are shown 6502. For purposes of clarity, various other
  • buttons (12) and the number of notes in the note series (12) are the same, in this example there is a direct co ⁇ elation between which button is pressed and which index is chosen. In other words, scaling the button numbers into the note series produces the same value as before, although there could be more or fewer buttons than steps in the note series.
  • the buttons may be configured so that they produce a velocity value relating to how hard they have been pressed, and send a velocity value of 0 when released. In the following example, however, the velocities are ignored because actual velocities and actual durations are not being used.
  • Next is shown a rhythmic pattern played on a series of buttons 6504, and the resulting musical phrase generated by the button presses 6506.
  • the pitches and velocities at the note series indexes are retrieved, the velocity is modified by the next velocity pattern value, and pan data is sent from the spatial location pattern as each successive note is generated. Since actual durations are not being used, the duration pattern value of ⁇ 12 ⁇ produces notes all having the duration of an 8th note, even though the rhythm of the button presses contained quarter notes.
  • FIG. 66 is an example of achieving direct indexing with the notes from a MIDI keyboard.
  • the range of notes used is ⁇ 60 - 84 ⁇ (25 notes covering a 2 octave range).
  • a 12 step note series is shown 6600 (consisting of pitch and velocity at sequential memory locations ⁇ 1 - 12 ⁇ ).
  • a spatial location pattern for a single phase is shown 6602. For purposes of clarity, various other patterns are not shown. Actual durations and actual velocities are used instead of patterns.
  • An arbitrary scaling algorithm in chart form 6604 shows the mapping of the keyboard output into the note series index. As seen, several adjacent notes will produce the same note series index since the range of notes is greater than the range of indexes.
  • a series of input notes played on the MIDI keyboard 6606 are shown in chart form and musical notation, with the rhythm, duration, and velocities they were played with.
  • the resulting musical phrase generated in response is shown below
  • Pan data is generated from the spatial location pattern as each note issues.
  • the note in bold type (the seventh note) signifies a duplicate index adjusted. Because the input note number 72 would result
  • the index is adjusted to an adjacent index (e.g. 4).
  • Pitch-shifting algorithms are well-known in the industry, whereby the pitch of a sound that has been digitally recorded into memory can be changed to a different pitch.
  • One example of a product incorporating pitch-shifting algorithms is the Digitech Studio Vocalist.
  • devices that allow digital audio data in memory to played back by more than one playback voice at different pitches and amplitudes simultaneously are well know as "samplers," with the Fairlight CMI Series III being one example.
  • An example system utilizing an electric guitar with a hex pickup has already been described in the creation of a digital audio note series, whereby a number of discrete channels of digital audio data are recorded into separate DALs.
  • the system also provides for a number of playback voices, which can be the same as the number of DALs, or a higher number.
  • the digital audio in each DAL buffer is capable of being played back by one or more playback voices at the same time, at different pitches and amplitudes.
  • the digital audio notes series consists of pitches, velocities, original pitches and dal ids as previously described.
  • the values retrieved are used to initiate playback and modification of the digital audio with one or more of the playback voices.
  • FIG. 43 shall be utilized in the following discussion, which shows an 18 step digital audio note series 4300.
  • the original pitch, pitch, velocity and dal id are retrieved at the index specified according to the processing.
  • the digital audio data in the buffer indicated by the dal id is played back using one of the playback voices, but the retrieved pitch is used to playback the audio at a different pitch
  • the dal id is 2.
  • the pitch of the note series at index 8 is 49. Therefore when the digital audio data in the buffer co ⁇ esponding to dal id 2 is played, it may be shifted up by 2 semitones (49 - 47). If a velocity pattern is being used during the processing as previously described, the resulting modified or replaced velocity value may then be optionally used to modify the amplitude or playback volume of the digital audio, so that it was louder or softer as a result than the original recording. For example, a velocity value of 127 could indicated playback at 100% original volume, and a value of 0 indicating playback at 0% original volume, with values in between being scaled accordingly. Therefore, during the read out of data using the clock advance mode of FIG.
  • step 5544 instead of issuing note-ons and note-offs, the playback of digital audio in the buffer indicated by the retrieved dal id is commenced, with the duration calculation being used to determine when to stop playback and end the note.
  • step 6340 the playback of digital audio in the buffer indicated by the retrieved dal id is commenced, with step 6348 or 6360 determining when to end playback.
  • the difference between the retrieved pitch and the original pitch indicates an amount of pitch-shift to apply to the digital audio data, with the velocity optionally controlling the volume during playback.
  • the step of creating an altered digital audio note series could consist of duplicating the recorded digital audio data of the input notes, and pitch- shifting it ahead of time rather than in real-time.
  • the DAL would be duplicated, and the pitch then shifted to the specified pitch. Therefore, for the example shown in FIG. 43, the altered note series 4300 would contain 18 DALs, with dal ids ⁇ 1 - 18 ⁇ .
  • the digital audio data in the locations would simply be played at the pitches they were stored with; however the velocity may still control the volume of the playback.
  • Automatic pitch-bending effects may be independently generated during the process of the reading out of data or generating a repeated effect, co ⁇ esponding with the notes as they are generated. This is achieved by sending out MIDI pitch bend messages of different values at precalculated times, imposing an overall bend shape on a note while it is sustaining.
  • the ramp shape is a single bend from a start pitch to a destination pitch.
  • the hammer shape is a series of two bends from the start pitch to the destination pitch and back to the start pitch.
  • the hammer/ramp shape is a series of three bends combining the hammer with a ramp at the end.
  • Other shapes are possible, such as shapes containing four or more separate bends.
  • An overall bend window is utilized as illustrated, which is the length of the bend over time. Parameters are provided that determine where in the bend window the bends will be generated.
  • the bend start and bend end are percentages of the overall bend window indicating where the bend will start and end.
  • an additional width parameter is specified, which is a percentage of the portion centered between the start and end points.
  • the diagram shows a width setting of 50%. Therefore it is centered between the bend start and bend end, with 25% left on either side.
  • the 68 illustrates 3 different settings of the width parameter and the resulting affect on a hammer/ramp bend shape.
  • the first example shows that when the width is 100%), the length of the third bend is 50% of the remaining portion after the bend end (100 - (100 / 2)).
  • the second example shows that when the width is 50%, the length of the third bend is 75% of the remaining portion (100 - (50 / 2)).
  • the third example shows that when the width is 0%, the length of the third bend is 100% of the remaining portion (100 - (0 / 2)).
  • Other methods are possible, including a separate parameter controlling the length of the third bend.
  • Two modes of operation may be used to determine the actual bend window length. If the length mode is note duration, the duration of the note about to be generated is utilized; if the length mode is actual time, a fixed amount of time such as a value in milliseconds is utilized. FIG. 69 illustrates the difference between the two length modes. In a bend using note duration, the percentages apply to a bend window that changes based on the note's duration. In a bend using absolute time, the lengths of the bend windows stays the same regardless of the actual duration of the note.
  • the amount to bend the pitch may be a predetermined value, such as a fixed amount or a value derived from the next step of a bend pattern. Alternately, the amount to bend the pitch can be calculated based on previously generated notes and/or notes which will be generated in the future. In the case of reading out data, the pitches of one or more previously generated notes can be stored. From these values, the required bend amount and shape can be calculated, and pitch bend data issued so that the note appears to bend to a previous pitch. Bending to the pitch two steps previous (previous + 1), three steps previous (previous + 2) and so on can be achieved if desired, by storing the requisite number of pitches desired.
  • the pitches of notes to be generated in the future can be determined by looking ahead in the reading out process, such as by running a second simultaneous reading out process that is ahead of the present process by one or more instances of reading out data (without output of data), and storing the pitches of the notes that would have been generated. From these values, the required bend amount and shape can be calculated, and pitch bend data issued so that the note appears to bend to a next pitch not yet generated. Bending to the pitch two steps ahead (next note + 1), three steps ahead (next note + 2) and so on can be achieved if desired, by running the second reading out process more than one step ahead of the present process.
  • a bend envelope may be utilized to describe a shape, with the y-axis envelope value being scaled to the desired bend amount, and the x-axis time range being scaled to the length of the bend window.
  • an additional step may be inserted into the process between steps 5540 and 5544.
  • an additional step may be inserted into the process between steps 6336 and 6340.
  • the additional step is the [Start Pitch Bend] routine shown in FIG. 70.
  • Double precision (14 bit) MIDI pitch bend values are utilized in this example and hereafter, ranging from ⁇ 0 - 16383 ⁇ , with 8192 being deemed a center position at which the pitch is at its normal value. Standard values (7 bit) from ⁇ 0 - 127 ⁇ could alternately be used.
  • the bend range on the MIDI device is assumed to be set to an octave, so that a pitch bend value of 0 bends the pitch down one octave.
  • a value of 8192 returns the pitch to its normal pitch, and a value of 16383 bends the pitch up one octave.
  • an initial bend reset value e.g.
  • a bend amount is calculated 7002, being a number of semitones to bend in either direction. Positive values bend the pitch upwards; negative values bend the pitch downwards.
  • the calculation of the bend amount may be done in several different ways. If it is a fixed amount (e.g. 6) it can be retrieved from parameter memory. If a bend pattern is utilized, it can be derived from the next step of the bend pattern and the bend pattern index advanced to a new location. In the case of a fixed or derived semitone value, the bend amount may be adjusted to compensate for atonal bends by using a conversion table based on a cu ⁇ ent chord or scale.
  • One may employ the following pseudo-code as an example of the procedure: bent note cu ⁇ ent note + bend amount bent note - [Convert] bent note
  • adjusted bend amount bent note - cu ⁇ ent note.
  • the cu ⁇ ent chord is a CMaj7 utilizing a conversion table of ⁇ 0, 0, 2, 4, 4, 7, 7, 7, 9, 11, 11 ⁇
  • the bent note is reduced to its pitch class and octave
  • the pitch class (6) is modified by the conversion table to 7 and placed back in the co ⁇ ect octave, yielding 79 (G4).
  • the resulting bend amount arrived at by any of these methods may be limited to a maximum range of values (e.g. +12 to -12), or may have modulo division performed to keep it within a range (e.g. modulo 12).
  • the bend amount may be optionally inverted (e.g. 7 becomes -7, -12 becomes
  • the inversion may indicate utilizing the opposing operation. For example, bend to the
  • the bend window is calculated 7004, depending on the length mode. If the length mode is absolute time, a value is retrieved from parameter memory or derived from the next step of a bend pattern representing a time in milliseconds (e.g. 100 ms). If the length mode is note duration, the bend window is calculated according to the duration of the note about to be generated. The duration time calculated in FIG. 55 5540 or FIG. 63 6336 may be utilized, or calculated in the same fashion. If using an absolute time, it may be checked if the absolute time is greater than the calculated duration time (meaning the
  • the bend window may be limited to the duration time in this case.
  • bend shape is checked. If the bend shape is "ramp" 7006, then a single bend must be calculated 7008, using the parameter memory values of bend start and bend end, and the bend window.
  • bend start ms (bend window * bend start)
  • a bend target value is calculated, being the total amount to bend in double precision MIDI pitch bend values.
  • the values after calculation 7008 are stored in a bend data location in memory.
  • the data location can be pre-allocated, or allocated during processing using standard memory allocation techniques.
  • FIG. 71 shows the structure of a bend data location in memory.
  • the times to bend is stored (e.g. 10), the bend amount each time is stored (e.g. 273), and the bend rate is stored (e.g. 20 ms).
  • a bend counter is initialized to 0.
  • the third bend is also calculated using the width parameter.
  • Each of the bends allocates its own bend data location, stores the applicable values inside, and schedules a call to the [Do Auto Bend] routine at the co ⁇ ect start time, producing one or more resulting bends.
  • the bend amount each time value is stored, it is first inverted so the bend will proceed in the opposite direction.
  • stepped bends may be created in a similar fashion, where instead of a smooth linear ramp between two points, the number of semitones between the two points is used, with the result that the bend is quantized as if stepping by semitones to reach the desired destination value.
  • the bend shape is not a hammer/ramp 7018, it is assumed a bend envelope is being utilized to describe the shape, and calculations are made to scale the envelope value and time range of the envelope to the bend amount and the bend window respectively 7024.
  • the envelope value (x-axis) may be scaled from its arbitrary range of ⁇ 0 - 100 ⁇ into double precision pitch bend values in the range (8192 to (8192 + 2731).
  • the bend window is 500 ms
  • the envelope is then started 7026 and the routine is finished 7040.
  • Bends in progress may be stopped at any time by searching through the task list in memory of scheduled tasks to perform, and removing any pending scheduled calls to the [Do Auto Bend] routine, or by stopping any bend envelopes which are operating. This may also be done as an optional step at the beginning of the [Start Pitch Bend] routine, so that a new automatic pitch bend effect that is about to be generated may terminate any bending operations still in progress from earlier operations of the routine.
  • FIG. 73 shows an example section of MIDI data in piano-roll format, along with the resulting pitch bend data generated by bending each note to the next pitch, utilizing a bend window equal to the duration of the note. Therefore, the shorter notes have shorter overall bend lengths, with fewer instances of bend data sent out.
  • the hammer bend shape has been utilized, with a width of 50%, so that each note bends to the next pitch and back.
  • the first note is a C2 (36) and the second note is an E2 (40).
  • a pitch bend of +4 semitones has been generated during the first note.
  • the third note is a B2 (37) and the fourth note is a G2 (41); a pitch bend of -4 semitones has been generated during the third note.
  • the preceding method may also be utilized during the processing of musical data in memory. Sections of preexisting MIDI data such as the preceding example may be analyzed, and automatic pitch bend data generated over the duration of each note, utilizing either the note duration or an absolute time as a bend window.
  • the processing/playback can be in real-time related to tempo, with or without output of the actual sequence data, or can be performed in memory without output as fast as processing speed allows, with the results stored in other memory locations.
  • the duration of a note can be determined before playing it by searching forward to find the co ⁇ esponding note-off; alternately, the data may be preprocessed to store durations with each note.
  • each note as it is played or processed may be stored and become a previous note to bend to, or the data may be scanned ahead so that the next note from a cu ⁇ ent position is dete ⁇ riined and becomes a next note to bend to. Alternately, a bend of a fixed amount may be applied, modified by conversion tables if so desired.
  • the bending is automatically performed in real-time while the user plays notes on a keyboard or other control device.
  • the system of FIG. 2 may be simplified by removing modules 230, 235, 240, 245, 255 and 260. Each time an input note is received, the calculations are performed and the necessary bends scheduled at the
  • the overall bend window length may be specified as a certain duration at a cu ⁇ ent tempo (e.g. quarter or eighth note), or a specified number of milliseconds (e.g. 500 ms).
  • the bend can be chosen to start on key down or key release. Note-offs may be delayed for a period of time, so that when starting a bend with the release of a key, the note will continue for some time after release so the bend can be performed.
  • the amount of time to delay the issuance of the note-offs may be specified as a certain duration at a cu ⁇ ent tempo, or a specified number of milliseconds.
  • the previous note that the user has played may be stored in memory, and when the user plays the next note, a bend size may calculated by utilizing the cu ⁇ ent pitch and the previous pitch.
  • the bend can be performed either to or from the previous pitch.
  • the cu ⁇ ently played pitch is sent out and the bend data is generated so that it appears to bend to the previous pitch.
  • the previous pitch is sent out, and bend data is generated whereby it appears to bend to the cu ⁇ ent pitch.
  • FIG. 74 utilizing a bend to a previous note.
  • an initial bend reset value (e.g. 8192) may be sent out 7403, which resets the pitch bend of the destination device to a default or center position. If desired, any bends that are presently in progress may be terminated. Then it is checked whether a parameter memory location indicates the bend should be performed "to" or "from” 7404. If bending to the previous pitch 7406, a start pitch value in memory receives the cu ⁇ ent pitch value, and an end pitch value in memory receives the value stored in a previous pitch location. If bending from the previous pitch 7408, the start pitch receives the previous pitch, and the end pitch receives the cu ⁇ ent pitch. In the case where no previous note has yet been played, a default value may be chosen, such as a pitch one octave above or below the cu ⁇ ent pitch. A note-on is then sent out with the start pitch 7410.
  • the bend amount is calculated by subtracting the start pitch from the end pitch 7414. For example, if the start pitch is 60, and the end pitch is 64, the bend amount is +4 semitones (64 - 60). The resulting bend amount may be
  • the bend window length is calculated by retrieving a predetermined value from parameter memory, or a value derived from the next step of a bend pattern.
  • the value may be an absolute time in milliseconds, or a value calculated according to a duration at the cu ⁇ ent tempo. All other calculations necessary to schedule one or more bends based on the bend shape are carried out according to the previous embodiment, and one or more bends are scheduled to start. Alternately, a bend envelope may be utilized and the scaling calculations performed on its axes.
  • step 7414 will be skipped, and no bends will be started.
  • the cu ⁇ ent pitch is then stored in memory as the previous pitch 7416, where it may be utilized at steps 7406 and 7408 with the next input note-on.
  • an altered notes buffer in memory is utilized to store pairs of pitches, in this case representing the cu ⁇ ent pitch, and the pitch that was actually sent out.
  • note-offs when they arrive may find the cu ⁇ ent pitch value, and then utilize the stored sent value for the note-off
  • the cu ⁇ ent pitch and sent pitch (which may be different) are stored as a pair in the altered notes buffer 7418, after which the routine is finished 7440. If the input note is a note-off 7402, the cu ⁇ ent pitch is located in the altered notes buffer 7420. If located 7422, the pair of pitches is first removed from the altered notes buffer 7424.
  • a parameter memory location is then checked to see if a bend is to be initiated by a key up action 7426. If not, a note-off is sent out 7428 with the sent pitch located previously in the altered notes buffer, no bend is started, and the routine ends 7440. If key up actions are being used to start the bend 7426, a note-off is scheduled to be output at a point in the future equal to (now time + "n") 7430.
  • the value "n" is calculated by retrieving a predetermined value from parameter memory, or a value derived from the next step of a duration pattern. The value may be an absolute time in milliseconds, or a value calculated according to a duration at the cu ⁇ ent tempo. This causes the note to continue playing for some period of time after the receipt of the note-off, so that the bends may be performed while the note is sustaining.
  • One or more bends are then calculated and scheduled
  • the preceding example utilized the method of bending to/from a previous pitch.
  • a fixed bend amount, or a bend amount derived from the next step of a bend pattern may also be utilized.
  • the bend amount may be modified to avoid atonal bends by the conversion table method previously described.
  • the start pitch receives the cu ⁇ ent pitch
  • the end pitch receives the (cu ⁇ ent pitch + bend amount).
  • the start pitch receives the (cu ⁇ ent pitch + bend amount) and the end pitch receives the cu ⁇ ent pitch.
  • Step 7416 is skipped, and step 7412 proceeds to step 7418 when key down actions are not being utilized. All other steps operate in the manner previously described.
  • the velocity of the notes may trigger the bending effect.
  • the velocity of a note-on can be tested against a threshold or range. If it does not pass the test, the routine may immediately terminate 7440. For example, it could be configured that only a note-on with a velocity greater than 120 will pass the test and thereby initiate a bend.
  • notes played on a keyboard controller in one area may be used to precisely control bending effects on notes that are played in another area of the keyboard.
  • the system of FIG. 2 may be simplified by removing modules 230, 235, 240, 245, 255 and 260.
  • a sliding control area two octaves wide is determined that can be either above or below the notes the user is playing, or both. Therefore, the notes can be played with either the right or left hand, and the control area used with the other hand.
  • the sliding control areas are updated based on the cu ⁇ ent note. Subsequently, as long as the note is held, notes played in the control areas do not make any sound. Instead, they are utilized to bend the pitch of the held note(s).
  • FIG. 75 is a diagram showing the operation of the sliding control areas.
  • the lower control area is based on the lowest note the user presses, starts one octave
  • the upper control area is based on the highest note the user presses, starts one octave above the highest note and extends two octaves farther up. These ranges are arbitrary and could be farther apart on a larger keyboard if desired.
  • a single note (E4) has been played; the lower control area therefore extends from ⁇ El - E3 ⁇ , and the upper control area extends from ⁇ E5 - E7 ⁇ . While this example uses a single note for clarity, more than one note can be held, and the upper and lower areas adjusted independently.
  • each control area is a null point, or key that causes no bend to be produced.
  • the null point of the lower control area will be the note two octaves below the lowest note held (e.g. E4).
  • the null point of the upper control area will be the note two octaves above the highest note held (e.g. E6).
  • the pitch to which the held note is bent is calculated from the null point in either control area. From the null point, the pitch bends go up or down 12 semitones, co ⁇ esponding to the octaves of keys above and below the null points.
  • the user can bend to a desired note by indicating the desired note two octaves higher or lower than the note that is being held. For example, if the held note is an E4 as shown in the example, to bend up 3 semitones to a G4 above, the user plays a G three keys above either one of the null points with the other hand (G2 or G6).
  • a bend time parameter in memory determines how long over a period of milliseconds the bend will take to go from its cu ⁇ ent value to the new pitch indicated by the control area.
  • a bend rate parameter determines the time between pitch bend messages during the overall bend. The resulting bend can be an instantaneous change of pitch from the original note to the bent note, simulating the stringed instrument technique know as the hammer-on, can be a slower bend that simulates the bending of many ethnic instruments, or a long bend that can be a novel effect.
  • the release of a certain number of keys in the control area may be optionally utilized to cause a bend back to the original pitch. If the release of every key is to be utilized, as soon as the note in the control area is released the pitch bends back to the original note. If the release of two keys is utilized, two notes can be played
  • FIG. 76 is a flowchart illustrating the operation of the sliding control area bending process.
  • a buffer is utilized in memory to store notes that are sustaining. When a note-on is received 7602, it is added to the buffer 7604. When a note-off is received, the buffer is searched and the co ⁇ esponding note-on is removed 7606. The number of items in the buffer is therefore the number of notes cu ⁇ ently sustaining. After the note-on is added to the buffer, it is checked whether the number of notes sustaining is equal to "1" (meaning this is the first note to arrive since the buffer was last emptied) 7608. If so, execution passes to step 7612, and the sliding control areas are updated. Both the lower and upper control areas may be utilized, or only one or the other.
  • the lowest pitch in the buffer is found, and values are set in memory indicating a certain range of notes.
  • the lower control area's bottom pitch is 3 octaves below the lowest pitch in the buffer
  • the lower control area's top pitch is 1 octave below the lowest pitch in the buffer, with other ranges being possible.
  • the lower control area's null point is set to indicate the pitch 2 octaves below the lowest note.
  • the highest pitch in the buffer is found, and values are set in memory indicating a certain range of notes.
  • the upper control area's bottom pitch is 1 octave above the highest pitch in the buffer
  • the upper control area's top pitch is 3 octaves above the highest pitch in the buffer, with other ranges being possible.
  • the upper control area's null point is set to indicate the pitch 2 octaves above the highest note.
  • sustaining notes is greater than "1" 7608, it is checked whether the pitch of the note is within either of the two sliding control area ranges 7610. If not, the sliding control areas are also updated at step 7612.
  • An initial bend reset value (e.g. 8192) may be sent out 7613, which resets the pitch bend of the destination device to a default or center position. If desired, any bends that are presently in progress may be terminated.
  • the note-on is then sent out 7614, a value in memory that stores the last sent bend amount is reset to "0" 7616, and the routine is finished 7640.
  • the null pitch is E6 (88)
  • the pitch of the note played in the control area is G6 (91)
  • the last bend amount 0
  • the distance from null is (91 - 88)
  • the bend amount is then stored as the last bend amount, and the distance from null value is also stored 7619.
  • a bend target value is calculated, being the total amount to bend in double precision MIDI pitch bend values.
  • the bend time is a predetermined time in milliseconds specifying the length of the bend; an example value of 100 ms will be utilized.
  • the calculations are stored in a bend data location as previously described, and a call is made to the [Do Auto Bend] routine, which is passed a pointer to the bend data location 7620. This starts a recursive chain of pitch bend values being sent out until the required number have been completed, thereby bending to the pitch specified by the note in the control area.
  • a bend envelope may be utilized and scaling calculations performed on its axes, where the x-axis time range is scaled to the bend time, and the y-axis envelope value is scaled to the bend target. Referring back to step 7602, if a note-off calls this routine, the co ⁇ esponding
  • the pitch 150 note-on is first removed from the buffer 7606. It is then checked whether the pitch is within one of the sliding control areas 7622. If not, the note-off is sent out 7624, and the routine finished 7640. If the note-off is in one of the control areas 7622, it may optionally be utilized to determine a bend back to the original pitch. Therefore, the steps 7626 through 7634 are optional and may be omitted. A value in memory used to count the note-offs received since the initiation of a bend has been initialized elsewhere to "0.” The note-offs since bend value is incremented by one 7626. It is then checked whether the value is equal to a predetermined target 7628. If not, the routine is finished 7640 with no bend back to the original pitch performed. If the note-offs since bend is equal to the target 7628, then the value 7630 is reset to "0", and a bend is calculated back to the original pitch 7632.
  • the bend amount is calculated by inverting the distance from the null value that was calculated and stored earlier. Since this value is always the cu ⁇ ent distance from center pitch, inverting it will allow a bend from the present position back to the null or center pitch.
  • the other variables are calculated as previously described, and the last bend amount value 7633 is reset to "0".
  • the calculated values are then stored in a bend data location, and a call is made to the [Do Auto Bend] routine, which is passed a pointer to the bend data location 7634. This starts a recursive chain of pitch bend values being sent out until the required number have been completed, thereby bending to the pitch back to the original pitch.
  • a bend envelope may be utilized and scaling calculations performed on its axes, where the x-axis time range is scaled to the bend time, and the y-axis envelope value is scaled to the bend target.
  • the routine is then finished 7640.
  • the sliding control area could also be used to control pitch bending characteristics of an intemal tone generation system directly, and remain within the scope of the invention.
  • the use of the sliding control areas is not limited to producing pitch bend, but may be utilized to control other actions.
  • sliding control windows may be utilized to control any level or parameter of a tone generator in a logical and accurate fashion.
  • the values across the keys of the sliding window could represent filter frequency offsets for a resonant filter, or amounts of vibrato to apply, or any other tone control parameter or MIDI message, and still
  • the input musical source data may be repeated directly, or collected musical data may be stored and repeated.
  • the input data for the repeat generator 260 may come from the data read out by the read out data module 255, or input notes from the input device 200 or song data playback means 215. If only notes from the input device 200 or song data playback means 215 are utilized, the addressable series module 230 and clock event generator 245 need not be utilized.
  • FIG. 77 is a simplified overview of the process of generating a repeated effect.
  • a note-on When a note-on is received 7702, it reserves a memory location to be used for processing and stores some initial values such as pitch, velocity, and starting processing values 7704. This then starts a recursive note-on processing chain of procedure calls to a processing routine, each one scheduling the next one to occur a certain time in the future and producing note-ons 7706.
  • the memory location co ⁇ esponding to the note-on for that pitch is located 7708, and a separate recursive note-off processing chain of procedure calls to a processing routine is started, each one scheduling the next one to occur a certain time in the future and producing note-offs 7710.
  • the memory location has separate areas for note-on and note-off processing, so that each chain of procedure calls can maintain its own current indexes into various patterns and other such counters. In this manner, each note-on and note-off maintain their own separate yet related variables as they repeat and reschedule themselves for further processing in the future, while maintaining access to some shared parameters in the parent memory location.
  • the process ends 7712 when a certain number of repetitions has occurred, or through other termination means described later.
  • a separate pathway shall be generally shown for note-ons and note-offs. This is for ease of operation and explanation. For example, the two steps 7706 and 7710 could be combined into a single processing
  • each repetition accesses a rhythm pattem. As each repeated note is generated, the next value in the rhythm pattem is accessed and used to determine how far in the future to schedule the generation of the next repeated note.
  • a velocity pattem can be used, which provides accents to the repeated notes.
  • the next value in the velocity pattem is accessed and used to modify the velocity of the repeated note, optionally in conjunction with a fixed velocity offset, so that the repeated notes can overall increase or decrease in volume while maintaining a pattem of accents.
  • a transposition pattem can be used, which allows the pitch of each repeated note to be transposed by a different value than the previous note, in either direction.
  • the resulting transposed pitches can be further modified by a transposition table based on a selected chord or scale type, thereby shifting atonal pitches to tonal pitches. Furthermore, if a note after being shifted has the same pitch as a previous repeated note, it can be selectively discarded and the next value of the transposition pattem used.
  • a cluster pattem can be used, which allows multiple repeated notes or repeated groups of notes to be generated at the same time from an original note or group of notes.
  • a strum pattem can be used, which allows the repeated notes within a cluster to be issued with time delays between them.
  • a spatial location pattem can be used, which allows each repeated note to be moved about in a stereo or multi-dimensional space.
  • An assignable pattem can be used, which allows each repeated note to modify some tonal characteristic of the tone module that is used to create the sounds, such as resonance, filter frequency and so on.
  • a voice change pattem can be used, which allows each repeated note, or some number of repeated notes to change the instrumental sound of the tone module that is used to create the sounds, for example from a trumpet to a violin.
  • a bend pattem can be used, which allows each repeated note to generate a different automatic pitch-bending effect if desired.
  • the durations of the repeated notes can be the same as the original notes, or can use a duration pattem, which
  • each repeated note can have a different duration. Furthermore, the durations of the resulting repeated notes can be controlled in several different ways so that in addition to providing new useful musical effects, the problem of large numbers of voices in a destination tone module being used up is eliminated.
  • a range of notes within which to remain when transposing pitches can be used in several different ways to cause further variations. When notes go outside the range due to transposition, the generation of the repeated notes may be terminated, or the pitches wrapped around, or rebounded, or a phase change may be determined as will be explained later on.
  • a phase change may also be triggered at various times by one of several methods, whereby completely different groups of pattems and parameters are selected with which to continue processing. A phase pattem may be used to determine the order of the various phases as processing continues.
  • the repeated effect can be selectively started immediately upon the receipt of input notes, or by any of the triggering means previously described including input notes within a time window, input notes within predetermined velocity ranges, or by other actions such as user operated pedals, buttons and switches, and/or by locations in a backing track of prerecorded music.
  • the repeated effect can be selectively terminated by the same type of actions, in addition to the completion of a number of repetitions, the completion of a number of phases, the transposition of pitches outside a predetermined range, and/or the start of a new repeated effect. Envelopes may also be triggered as previously described, and utilized in the processing of the repeated effect.
  • phases have been previously described. As such, only the differences related to the generation of a repeated effect will be described here in detail. Referring to FIG. 78, within an overall parameter memory 7800 are shown two phase parameter memory locations 7802 and 7804. In the case of generating a repeated effect, a phase change is deemed to occur by one or more of several methods, such as
  • Pattems and the various types have been previously described in detail. Only the differences between those descriptions and the way that pattems are used in generating a repeated effect shall now be described.
  • a rhythm pattem controls when and how often data will be produced, with each derived value indicating a time at which a next event should be produced, in this case a time in the future at which the next repeated notes will be generated.
  • a cluster pattem controls how many notes will actually be generated simultaneously for each repeated note.
  • a example of derived values from a cluster pattem may take the form ⁇ 3, 1, 2 ⁇ which means that a single original note would first generate a repeat of 3 simultaneous notes, then a repeat of 1 note, then a repeat of 2 notes and so on.
  • a transposition pattem is used to either modify or replace a pitch for a note about to be generated, with each derived value indicating either an absolute pitch value or an amount by which to transpose a retrieved or actual pitch value.
  • An example of derived values from an absolute transposition pattem may take the form ⁇ 60, 64, 67 ⁇ . This indicates that a first note would be generated with a pitch of 60 (C4), the second note with a pitch of 64 (E4), the third with a pitch of 67 (G4), then back to the beginning of the pattem for the next note.
  • An example of derived values from a modify transposition pattem is ⁇ 1, 3, -2.
  • the pitch of the first note to be generated would be transposed by 1 semitone up, the pitch of the second note by 3 semitones up, the pitch of the third note by 2 semitones down, and so on.
  • This modification can be done with an absolute reference to the original pitch, meaning that the original pitch is always transposed to yield the resulting pitch.
  • the resulting pitches would be 61 (60 + 1), 63 (60 + 3), 58 (60 + -2), 61 (60 + 1) and so on.
  • the modification can be done with a cumulative reference, meaning that after each pitch is transposed, the new value is used and transposed for the
  • a velocity pattem, duration pattem, spatial location pattem, voice change pattem, assignable pattem, bend pattem, and stram pattem are all as previously described.
  • each of the pattems described may have an associated pattem modifier parameter 7808, as previously described. Furthermore, each of the pattems may have an associated pattem offset parameter 7810, which is used to further modify values calculated at various points in the processing, as shall be described later. Any of the pattems could be modified to include an additional parameter for each step directing that the particular operation be performed a number of times before moving on to the next value.
  • pattems may represent musical characteristics and processing instructions. Pattem types that may be considered to have data items representing a musical characteristic include rhythm, velocity, duration, spatial location, voice change, bend, assignable, and dram pattems. Pattems that may be considered to have data items representing processing instructions include index, cluster, strum, and phase pattems. A transposition pattem may be considered to belong to either group, depending on whether it represents absolute pitch values or transposition values.
  • the pattems may be the same set of pattems utilized during the read out of data, or a different set of pattems.
  • the pattems may be the same set of pattems utilized during the read out of data, or a different set of pattems.
  • a duration mode indicates one of two modes of operation for controlling the durations of repeated notes.
  • the duration mode is "pattem,” the notes are generated with durations specified by a duration pattem, and the original durations are ignored.
  • the duration mode is "as played,” the notes are repeated with the durations they were originally performed or generated with.
  • An overlap mode indicates one of two modes of operation further modifying the durations. When the overlap mode is "yes,” the durations of notes are allowed to overlap new notes being generated. When the overlap mode is "no", the durations of notes are not allowed to overlap new notes being generated.
  • these modes may be individually selected for each of two types of notes: (a) original notes, referring to the original notes supplied as input notes; (b) repeat notes, referring to the notes are generated as repetitions of the original notes. Therefore, there is a repeat note duration mode and repeat note overlap mode, and an original note duration mode and original note overlap mode.
  • FIG. 79 is a graphical representation of eight different combinations of these modes which shall be refe ⁇ ed to as duration effects. Those of skill in the art will realize that other combinations can also be achieved. Each of the eight sections shows an original note, and 4 repeated notes. A solid black line indicates a duration that is produced; a dotted line shows a duration that might have been normally produced, but was changed according to the processing. The means by which these different effects are achieved shall be described in detail at the appropriate places in the following descriptions.
  • one aspect of the invention that shall be described herein is that if the notes and the repeated notes overlap each other, a means is provided so that repeated notes of the same pitch as previous repeated notes already sustaining first terminate the sustaining notes, thereby preventing the overlapping of repeated notes with the same pitch, and greatly cutting down on the number of voices in a tone generator required to generate the effect.
  • the original note is echoed to output exactly as played.
  • the repeated notes are the same as the original note, but they are not allowed to overlap. If the original input note is shorter than the time between the repeats, then they will be the same as the as played notes; if the original note is longer as shown, the repeats will terminate other sustaining repeats.
  • the original note has a duration calculated from a duration pattem; the original duration is not used.
  • the repeated notes have durations calculated with the duration pattem, and therefore have no relation to the original note's duration, and are not allowed to overlap, as in (5).
  • note locations (1 to "n") exist in memory 8000, which are used to store the relevant data necessary to reproduce a repeated note. These may be preallocated, or allocated during processing using standard memory allocation techniques. Each of them contain the same data locations, which are shown in detail for the first location. Each location contains two identical sub- locations refe ⁇ ed to as note-on location 8002 and note-off location 8004, which store data used to modify and generate the note-ons and note-offs as the procedure repeats; they shall be explained in detail shortly.
  • the other parameters and memory locations within the note location are as follows.
  • the original pitch and original velocity store the pitch and velocity with which an input note is received.
  • Initial velocity stores a precalculated value at which to generate the first repeats; new velocity stores a newly calculated velocity during processing.
  • Original reps to do stores a predetermined initial number of repetitions to perform; target reps stores a predetermined count at which to perform phase changes.
  • a reserved flag indicates whether this memory location is in use and is initialized to "no," and a completed flag indicates when a note-off has been received for a co ⁇ esponding note-on stored in this location.
  • a do voice change flag, voice change count counter, and voice change target value are used to determine when to ch-ange an instramental voice during processing; a voice change data area contains precalculated data to change the instrumental voice.
  • a spatial location data area contains precalculated data to control
  • An assignable data area contains other miscellaneous precalculated data used to control a tonal characteristic of the note.
  • a sustaining cluster buffer is a predetermined number of storage locations containing data space for a pitch, comprising a list of all cu ⁇ ently sustaining repeated notes for that note location only.
  • the remaining locations are pattem indexes indicated by the abbreviation "pat idx,” which are used during processing to index the next location of a particular pattem to be used, as previously described. These pattern indexes are only used during note-on processing and therefore do not need duplicate locations in the note-on/note-off locations described below.
  • the note-on location 8002 and note-off location 8004 are shown in detail in
  • FIG. 81 The parameters and memory locations are: "new pitch” stores a newly calculated pitch, “reps to do” stores an initial number of repetitions of notes to perform, “reps done” stores the number of repetitions actually completed. A transpose direction is used during calculation of the new pitch. A terminated flag is set when the procedures require termination. A do phase change flag and phase change count counter are used to determine when to change phases; a phase pointer points to the memory locations of the cu ⁇ ent phase that is being used during processing. The remaining locations are pattem indexes ending in the abbreviation pat idx, which are used during processing to index the next location of a particular pattem to be used.
  • the note-on location and note-off location each have their own variables and parameters for processing, yet coexist within a parent note location containing data and parameters that may be accessed and shared by either the note- on or note-off as processing progresses.
  • the note locations are in sequential locations of memory as an a ⁇ ay. When a note location is in use and has its reserved flag set to "yes,” it is added to a list of pointers that constitutes an "in use list.” When it is returned to use and has its reserved flag set to "no,” it is removed from the list. This list can then be used to find note locations in use, rather then searching the entire group of memory locations. It is also possible to store the note locations as a linked list using techniques well known in the industry, where each location has a pointer to a previous location. The locations in use are then assembled into a separate in use
  • altered notes buffer a predetermined number of storage locations containing data space for a pitch and an altered pitch, comprising a list of pitches and altered pitches after transposition.
  • replicated notes buffer a predetermined number of storage locations containing data space for a pitch and an replicated pitch, comprising a list of pitches and replicated pitches after transposition.
  • sustained notes buffer a predetermined number of storage locations containing data space for a pitch, comprising a list of cu ⁇ ently sustaining input (original) notes
  • sustained repeats buffer a predetermined number of storage locations containing data space for a pitch, comprising a list of all cu ⁇ ently sustaining repeated notes.
  • Input notes may come from one or more of the following locations:
  • notes received directly as input source material such as notes played in real-time on a MIDI keyboard or other MIDI device, or notes being provided in realtime by the output of an intemal or external MIDI file playback device, such as a sequencer;
  • this routine adds an input note-on to a buffer of sustaining notes, and removes it from the buffer when a note-off is received, the removal dependent on a duration mode.
  • the receipt of the note-on may terminate a previously repeating effect, sends out the note-on, and causes additional spatial location, voice change and other data to be sent out. If the velocity of the note-on is not within a predetermined range, portions of the routine can optionally be bypassed. Therefore, the velocity can optionally be used to trigger the start of the repeated effect, or the effect can start for each note-on.
  • the receipt of the note-off sends out the note-off, in addition to passing it to the processing chain, dependent on a duration mode.
  • the velocity is then optionally tested to see if it should trigger the start of the effect 8204. This could be testing whether the velocity is greater than a predetermined threshold, or less than a threshold, or within or outside of a predetermined range such as a minimum and/or maximum value. If the test is negative, the routine is finished with no repeated notes being generated 8236. If the test is positive (or if this step was being skipped), the[Terminate Previous Effect] routine is entered 8206.
  • this routine may also be called by the receipt of a predetermined external control 8208, such as a pedal, button, switch or other controller operated by a user, or sent at predetermined locations marked inside of or calculated from a pre-recorded background track of music. This may also be controlled as an additional trigger mode according to the previously described triggering means.
  • a predetermined external control 8208 such as a pedal, button, switch or other controller operated by a user
  • the [Terminate Previous Effect] routine shown in FIG. 83 allows newly arriving input notes to optionally terminate a repeating effect that was started by prior input notes; a time window is utilized so that several note-ons arriving nearly simultaneously will only terminate the effect and reset the memory locations once.
  • a terminate previous effect parameter exists in memory as part of the collection of parameters specifying the overall repeated effect. If the parameter does not indicate that a previous effect is to be terminated 8302, the routine returns to the [Main Routine] with no termination 8324. If termination of previous effect is selected, then a window running flag in memory is checked 8304. If the flag is "yes,” then the time window is already running, no termination will be allowed until a certain time period has elapsed, and the routine finishes 8324. If the time window
  • the window running flag is set to "yes,” indicating the time window has started 8306.
  • a procedure call is scheduled for "n" milliseconds in the future ("n" being a predetermined time for the length of the window, such as 30 ms) whereby the window running flag will be returned to "no,” again allowing the window to be ran 8308.
  • all note locations which have been allocated in a previous running of the procedure (which shall be described shortly) are reallocated and made available for use 8310. This is done by removing them all from the in use list, and setting all of their reserved flags to "no,” indicating they are again available.
  • any of the various procedure calls which have been scheduled to process repeated notes are then unscheduled so that they will not occur 8312. This is done by removing them from the task list.
  • a note-off is then sent out for every pitch cu ⁇ ently in the sustaining repeats buffer 8314, the sustaining repeats buffer is emptied 8316, the altered notes buffer is emptied 8318, and the routine returns to the [Main Routine] 8324.
  • initial spatial location data may then be sent out 8210, thereby influencing the spatial location of the note-on that is later sent out.
  • Initial voice change data may then be sent out 8212, being in this example a MIDI program change value derived from the default starting index of a voice change pattem.
  • Initial assignable data may then be sent out 8214, being in this example a MIDI controller 17 value derived from the default starting index of an assignable pattem.
  • the note-on is then sent out 8216, and the pitch is added to the sustaining notes buffer 8218.
  • the [Allocate Note Location] routine is then called with the note- on 8220, which eventually may start a note-on processing chain resulting in a repeated effect, after which the routine is finished 8236.
  • the original note duration mode is checked 8222. If it is not "as played,” then the routine ends with no further processing taking place 8236. This is because the note-off will be generated by the further processing of the invention, and will contribute to achieving duration effects (7) and (8) of FIG. 79 (for the original note). If it is "as played,” the pitch is located
  • the note-off is sent out 8228, which contributes to achieving duration effects (1) through (6) of FIG. 79 (for the original note), and duration effects (1) through (3) (for the repeated notes).
  • the pitch is then removed from the sustaining notes buffer 8230.
  • the [Allocate Note Location] routine is then called with the note- off 8220, which eventually may start a note-off processing chain.
  • the sustaining notes buffer therefore holds a collection of pitches for all note-ons that have not yet received a co ⁇ esponding note-off. If the pitch is not found in the sustaining note buffer 8226, then it has been supplied by a later working of the procedure as will be described, or was never issued, such as by the velocity test at step 8204, and the note-off is ignored 8236.
  • the [Allocate Note Location] routine shown in FIG. 84 allocates a note location in memory for a note-on and starts a note-on processing chain, or matches a note location already in use with a note-off, which then may start its own note-off processing chain.
  • the input note is a note-on 8402
  • it is checked to see whether a note location is available 8404. This can be done by looping through all note locations in memory and checking whether each one's reserved flag is set to "no.” If a location is not available (meaning all are cu ⁇ ently in use), then the routine finishes 8426. When the first available location is found the [Initialize Note Location] routine is then called 8406, being passed the address of the available note location.
  • the [Initialize Note Location] routine shown in FIG. 85 initializes various parameters to predetermined starting values in the chosen note location.
  • the reserved flag indicating the note location is in use is set to "yes" 8502.
  • the completed flag indicating that a note-off has been received matching the original note-on is set to "no" 8504.
  • the pitch and velocity of the note-on are stored as the original pitch and original velocity 8506.
  • the original reps to do value (number of repetitions to complete) is set to a predetermined or user selected value 8508.
  • the target reps value (count at which to perform optional phase changes) is initialized to a predetermined or user selected value 8509.
  • the initial velocity, which is used to calculate the velocities of the repeated notes is set by copying the original velocity 8510, or optionally by specifying either a predetermined absolute value, or by
  • the new velocity which may be repeatedly modified as the effect repeats and will be used to determine the velocity of the repeated notes, is set to the initial velocity.
  • the various pattem indexes in FIG. 80 are then initialized to predetermined values indicating a starting position in the applicable pattem 8512.
  • the do voice change flag that indicates a change in an instramental voice later on is set to "no" 8514, and the voice change count is set to "0" 8516.
  • An initial voice target (number of repetitions to generate before changing voices) is calculated and stored 8518. This is done by using the stored voice change pattem index to choose the voice pattem data at the step indicated by the index and derive the target value, after which the index is advanced to another location.
  • the spatial location data area is initialized 8520. This is done by using the stored spatial location pattem index to access the spatial location pattem data at the step indicated by the index and derive one or more values, after which the index is advanced to another location.
  • the assignable data area is initialized 8522. This is done by using the stored assignable pattem index to access the assignable pattem data at the step indicated by the index, after which the index is advanced to another location.
  • the new pitch is set to the stored original pitch 8526. This value may be repeatedly modified as the effect repeats and will be the actual pitch of the repeated note(s).
  • the reps to do value is set to the original reps to do value 8528. If an optional predetermined setting indicates that the reps to do value should be scaled by the velocity of the input note-on 8530, then the reps to do value is modified accordingly 8532. For example, it might be specified that the original reps to do value be used if the velocity was 127, only 1 repetition to be performed with the velocity is 64 or less, and scaled linearly for values between 65 and 127.
  • This amount of scaling may also be performed according to other MIDI controllers, or a user operated control specifying a scaling amount, rather than velocity. This allows a predetermined number of repetitions to be determined, yet gives the user the flexibility to modify it at will. Reps done (the number of actual repetitions completed) is set to "0" at 8534.
  • the do phase change flag indicating it is time for a phase change is set to "no"
  • phase pointer which is a pointer to the address of one of the phase parameter memory locations in FIG. 78 is initialized to point to the phase indicated by the first value of the phase pattem 8540.
  • the various pattem indexes in FIG. 81 are then initialized to predetermined values indicating a starting position in the applicable pattem 8542.
  • the terminate flag that indicates it is time to terminate the repeating operations is set to "no" 8544.
  • the transpose direction 8546 is set to "1," and the routine then returns to the [Allocate Note Location] routine 8550.
  • various envelopes are being utilized, they may be selectively started 8407.
  • they include a tempo envelope that is used to modify the calculations of the next repeat time, a velocity envelope that is used to modify the velocity of notes as they are generated, and a bend envelope that continuously sends out MIDI pitch bend data.
  • the [Process Note-On] routine is called next 8408, which may start a note-on processing chain to be described shortly. The routine is then finished 8426.
  • the original note duration mode is checked 8410. If it is not "as played,” then a duration pattem is being used, and the routine is finished 8426. This is because later workings of the process has taken care of or will take care of supplying the note-off for the co ⁇ esponding note-on, and this note-off is ignored. This will contribute to achieving duration effects (7) and (8) of FIG. 79 (for the original note). If the original note duration mode is "as played", then the note locations that are in use (have their reserved flags set to "yes") are searched for a note location containing an original pitch equal to the pitch of the input note-off 8412.
  • the [Process Note-On] routine is shown in FIG. 86.
  • the [Calculate Repeat Time] routine is entered 8602, which is shown in FIG. 87.
  • This routine calculates a repeat time (time at which to schedule a repeated note in the future) using a rhythm pattem value, a rhythm pattem modifier, and a rhythm pattem offset. The calculation may be optionally modified by a tempo envelope.
  • a rhythm target location in memory receives the next value derived from the rhythm pattem 8702. This is done by using the stored rhythm pattern index to derive a rhythm pattem value from the step indicated by the index, after which the index is advanced to another location.
  • a memory location repeat time receives a value calculated from the rhythm target 8706, according to the cu ⁇ ent tempo chosen for the repeated effect.
  • the tempo may be a fixed value, or may be derived from the cu ⁇ ent envelope value of a tempo envelope as previously described.
  • repeat time may then be optionally further modified by the rhythm pattern's associated rhythm offset, to cause an overall increase or decrease over time 8708.
  • this is done by taking a predetermined or user determined rhythm offset, which may be positive or negative, multiplying it by the number of reps done, and adding it again to the repeat time; other methods are possible.
  • rhythm offset will start at 0 and become progressively larger with each completed repetition, causing an overall increase or decrease in repeat time.
  • the routine then returns 8710.
  • the [Schedule Note-Off] routine is entered 8604.
  • the [Schedule Note-Off] routine checks several duration mode and overlap mode options, and allows note-offs to be sent out in certain cases (even though this is the note-on processing chain), thereby achieving various duration effects. These note-offs will not be put out immediately. They will be scheduled to be put out at some time in the future, to co ⁇ espond with note-ons that will be put out instantly later on in this procedure. If reps done equals "0" 8802, then the original input note is still being processed (since no repetitions have yet occu ⁇ ed). It must then be determined whether or not to use the actual duration of the original note, or a duration pattem. If
  • the original note duration mode is not "pattem" (but is "as played") 8804, the original duration will be used. This means that no note-offs need to be generated here, because the original note-off will be utilized when it is received, and the routine returns 8824. This contributes to achieving duration effects (1) through (6) of FIG. 79 (for the original note). If the original note duration mode is "pattem” 8804, then a duration pattem is being used, the duration with which the note is actually played (the original note-off) will be ignored, and the duration for the original note must be calculated in the [Calculate Duration] routine 8806.
  • the [Calculate Duration] routine shown in FIG. 89 calculates a duration for a note using a duration pattem value, a duration modifier, and a duration offset.
  • the duration time may be limited to the cu ⁇ ent repeat time, so notes do not overlap notes which will come later, thereby achieving various duration effects.
  • a memory location duration target receives the next value derived from the duration pattem 8902. This is done by using the stored duration pattem index to derive a duration pattem value from the step indicated by the index, after which the index is advanced to another location. The duration pattern's associated duration modifier may then optionally be used to modify the duration target 8904 in a similar fashion to that already explained for the rhythm pattem.
  • a memory location duration time receives a value calculated from the duration target 8906, according to the cu ⁇ ent tempo (or tempo envelope value) chosen for the repeated effect. One may employ the same formula as used to calculate the repeat time.
  • duration time may then be optionally further modified by the duration pattern's associated duration offset 8908, to cause an overall increase or decrease over time, in the same fashion as already described for the rhythm pattem.
  • the overlap mode is then checked 8910. Since this routine was called as a result of checking the original note duration mode, we are checking the original note overlap mode. If “no,” then the duration time is limited to the repeat time 8912, so that it will not overlap the next note(s) which will be generated in the future. If the mode is "yes,” then overlaps are allowed, the duration time is not modified any further, and the routine returns to the [Schedule Note-Off] routine 8914. In this manner, duration effects (7) and (8) of FIG. 79 are achieved (for the original note). Returning to the [Schedule Note-Off] routine of FIG. 88, a procedure call to
  • reps done was not "0" 8802, then it is checked to see if reps done equals "1" 8810. (The value of reps done is incremented later on in this discussion, after each successful scheduling of the next repetition of the note-on.) If so, this is the first repetition of the effect since the original note was received, and a note-off for the original note may need to be sent out in the [Original Note Overlap] routine 8812, in order to achieve the desired duration effects.
  • the [Original Note Overlap] routine shown in FIG. 90 sends out a note-off for an original input note if it is still sustaining, based on various duration and overlap modes. If the original note duration mode is "as played" 9002, then the potential exists that the original note is still sustaining. The original note overlap mode is then checked 9004. If “no,” then repetitions are not allowed to overlap the original note and it must be ended. It is then checked to see if the original note is still sustaining 9006. This is done by searching through the sustaining notes buffer for the pitch stored in the note location as original pitch.
  • the located pitch is removed from the sustaining notes buffer 9010, a note-off is sent out for the original pitch 9012, and the [Allocate Note Location] routine is called directly with a note-off of original pitch 9014.
  • This will provide a note-off that will start the note-off processing chain for the original note as if it had actually been received. Since the original note is no longer in the sustaining notes buffer, it will be ignored when it is subsequently actually received. In this manner, duration effects
  • the [Repeat Note Overlap] routine shown in FIG. 91 sends out one or more note-offs for repeated notes if they are still sustaining, based on various duration and overlap modes, in order to achieve the desired duration effects.
  • the various buffers mentioned here may have notes from previous repetitions stored in them. If the repeat note overlap mode is "no" 9102, then each repeated note-on must shut off any sustaining previously repeated notes, regardless of the durations they were intended to be played with. This is done by sending out a note-off for every pitch cu ⁇ ently contained in the sustaining cluster buffer 9104 - 9106. In this manner, duration effects (2), (3), (5), (6), (7), and (8) of FIG. 79 are achieved (for repeated notes).
  • pitches must then be removed from other buffers which may contain them, so they are found and removed from the sustaining repeats buffer 9108. They are found and removed from the altered notes buffer 9110 and the replicated notes buffer 9111, based on the second value of the stored pairs (stored altered/replicated pitch), after which the sustaining cluster buffer is reset to empty 9112.
  • a note-off will be sent out for a sustaining previously repeated note only if it has the same pitch as the cu ⁇ ent note-on about to be generated. This is done by searching the sustaining repeats buffer for the pitch cu ⁇ ently stored as new pitch 9114. If found 9116, the located pitch is removed from the sustaining repeats buffer 9118, a note-off is sent out for new pitch 9120, and the routine returns 9124. In this
  • a memory location cluster target receives the next derived value from the cluster pattem 8606. This is done by using the stored cluster pattem index to derive a cluster pattem value from the step indicated by the index, after which the index is advanced to another location. The value of cluster target may then be optionally modified by the cluster
  • the cluster pattern's associated cluster offset may optionally be used to further modify the cluster target value, in a similar fashion to that described for the rhythm pattem.
  • a cluster loop count variable in memory is initialized to "1" 8610, which shall be used to count repetitions of a loop consisting of the steps 8618 through 8628, which shall be performed the number of times specified by the cluster target. This may cause the generation of one or more note-ons at this time.
  • a start pitch location in memory receives the cu ⁇ ent value of new pitch stored in the note-on location 8612, and the current value of the transposition pattem index is stored in a temporary memory location 8614.
  • step 8616 will only be performed once per cluster (since it is outside of the loop), and not at all in the case of an original note (since the other data has already been sent out). Furthermore, in the case of an original note, unless the cluster size is greater than 1 (which will cause the loop to be run more than one time), step 8618 will not get called. In this manner, what would normally be the first note of a cluster is skipped here, since it has already been sent out.
  • the [Send Out Other Data] routine shown in FIG. 92 handles sending out the spatial location data, the voice change data, and the assignable data, which is precalculated later on in this description and stored for output on the next repetition of this procedure. Therefore, the data to be output here will have been either calculated on the previous working of this routine, or initialized before the first call. If the do voice change flag is "yes" 9202, then the later workings of the process have set this flag to indicate that the pre-calculated voice data should be output here 9204, which in this example is a MIDI program change. The do voice
  • Pre-calculated spatial location data is then sent out 9208, which in this example is a MIDI pan value. Instead of using a special flag indicating the sending of data as in the voice change step, it is simply checked to see whether the data is different then previously sent out data. If not, no data is sent out. This method could also be used for the voice change data, and the two methods are shown as interchangeable.
  • Precalculated assignable data is then sent out 9210, which in this example is a MIDI controller 17 value. Again, if the value is not different from a previously sent value, no data is sent out. The routine then returns 9212 to the [Process Note-On] routine of FIG. 86, where execution then proceeds to the [Create Note-Ons] routine 8618.
  • the [Create Note-On] routine shown in FIG. 93 schedules a note-on for eventual output (based on a strum pattem) with a pre-calculated pitch, optionally modifying the pitch before sending by a conversion table, and optionally suppressing duplicate pitches which may result.
  • the velocity of the note-on may be modified by a velocity envelope.
  • the pitch is stored in several buffers so that note-offs can locate the co ⁇ ect pitch to send out later on, and so other parts of the procedure may determine which notes are sustaining.
  • a strum time in memory may be calculated for each note in the cluster (if the cu ⁇ ent cluster target is greater than 1) 9302. This is done by using the stored strum pattem index to derive a strum pattem direction from the step indicated by the index, after which the index is advanced to another location. The retrieval of the value and advancement of the index is done once per cluster at the beginning (e.g. when the cluster loop count is 1). As previously described in the reading out of data, the calculation may be done by using the loop index (in this case the cluster loop count), the cluster size, the stram direction, and a predetermined time in milliseconds. The resulting stram time may then be used to cause a delay between each of the repeated notes in the cluster.
  • the strum pattern's associated strum modifier and stram offset can be used to further modify the strum time in a manner similar to the other pattems previously described.
  • An altered pitch value in memory receives the cu ⁇ ent value of start pitch 9304. If a parameter memory location indicates that the operation is to include the
  • the conversion table can be part of a predetermined collection of parameters loaded as a whole by the user, or can be individually selected from a plurality of conversion tables stored elsewhere in memory, where the selection means could be one or more of the following: the operation of a chord analysis routine on input notes, or on a certain range of input notes; the operation of a chord analysis routine on an area of a musical controller such as a keyboard or guitar; the operation of a chord analysis routine performed on sections of a background track of music; markers or data types at various locations in a background track of music; or user operations.
  • a parameter memory location indicates the operation is to include the additional optional step of discarding duplicate pitches 9310
  • the altered pitch is tested to see if it is the same as the start pitch 9312. If so, the altered pitch is further modified by the addition or subtraction of a predetermined interval 9314, after which execution loops back to 9308, and the altered pitch is again modified by the conversion table. If the altered pitch is not equal to the previous pitch 9312, or the additional step of discarding duplicates is not being taken 9310, or conversion tables are not being used 9306, the start pitch and its co ⁇ esponding altered pitch are stored in the altered notes buffer 9316. This pair of stored values shall be used later to determine the co ⁇ ect note-offs to send out.
  • the value cu ⁇ ently contained in the new velocity location of the note location may be further optionally modified or replaced by the cu ⁇ ent envelope value of a velocity envelope 9317, such envelope having been triggered by one of the means previously described. In this example, this is done by scaling the envelope value of ⁇ 0 - 100 ⁇ into an offset of ⁇ -127 - 0 ⁇ and adding it to the new velocity, with other ranges possible.
  • a note-on is then scheduled to be output at a time in the future of (now time + strum time), with the pitch specified by altered pitch, and the velocity specified by new velocity 9318.
  • the altered pitch is then stored in the sustaining repeats buffer 9320, and the sustaining cluster buffer 9322.
  • the routine then returns 9330 to the [Process Note-On] routine of FIG. 86, where the [Replicate Note-On] routine is then
  • the start pitch and its co ⁇ esponding replicated pitch are then stored in the replicated notes buffer 9414. This pair of stored values shall be used later to determine the co ⁇ ect note-offs to send out.
  • a note-on is then scheduled to be output at a time in the future of (now time + strum time), with the pitch specified by replicated pitch, and the velocity value cu ⁇ ently contained in the new velocity location of the note location 9416.
  • the replicated pitch is then stored in the sustaining repeats buffer 9418, the sustaining cluster buffer 9420, and the routine retums 9426. If replication is not to be performed 9402, the routine also retums 9426 with no additional note-ons being generated.
  • this routine may optionally be performed more than one time, with different intervals or replication algorithms, as many times as desired. Furthermore, this routine could included a duplicate suppression system similar to the one employed in the [Create Note-On] routine (FIG. 93) if desired.
  • the cluster loop count is checked to see if it is equal to the cluster target 8622. If not, then there are more repetitions of the loop to perform, and the [Modify Cluster Pitch] routine is entered 8624.
  • a shift amount value in memory receives the next value derived from the transposition pattem 9504. This is done by using the stored transposition pattem index to derive a transposition pattem value from the step indicated by the index, after which the index is advanced to another location.
  • the value of shift amount may then be optionally modified by the transposition pattern's associated transposition modifier 9506. In this example this is a percentage so that the values retrieved from the pattem may be compressed or expanded in real-time, similar to the cluster pattem modifier previously described.
  • the transposition direction parameter was initialized to 1 as previously described, and will optionally be changed at different times in the following procedures to -1. This influences the positive/negative sign of the cu ⁇ ent pattem value. For example, if a shift amount of 3 was calculated, and the transposition direction was -1, the resulting value used to shift the pitch would be (-3). Other methods of indicating an inversion of the mathematical procedure may be employed.
  • the resulting start pitch may then be further modified by transposition pattern's associated transposition offset 9514. In this example this can be an interval to be added to or subtracted from the start pitch, so that even while using a pattem a
  • start pitch may then be optionally tested 9516. If not within a predetermined range of pitches, the terminate flag in the note-on location may be set to "yes" 9518. If the value is within the range, or this test is not utilized. The terminate flag remains at its cu ⁇ ent state of "no," and the routine retums 9524.
  • the cluster loop count is incremented 8628 and execution loops back to the [Create Note-On] routine 8618. In this manner, for the cu ⁇ ent cluster target a number of note-ons with potentially different pitches will be generated. If the terminate flag has been set to "yes" 8626, or the cluster loop count is equal to the cluster target 8622, the loop is finished and the transposition pattem may be optionally restored 8630 to the previous value saved earlier in this routine. If this step is not performed, then the transposition pattem index may be advanced more quickly due to the use of clusters. This option may be offered as a predetermined parameter or a user operated choice. Finally, the [Repeat Note-On] routine is reached 8632, after which the routine is finished 8640.
  • the [Repeat Note-On] routine shown in FIG. 96 is where a number of changes will be performed to the data stored in the note-on location, after which .another call to the [Process Note-On] routine that is cu ⁇ ently being described will occur at a point in the future, and the precalculated values then sent out or used as just described. Therefore, the [Process Note-On Routine] ultimately calls itself over and over, scheduling the calls at timed intervals in the future according to the rhythm pattem. Within the [Repeat Note-On] routine, several options for terminating the effect are also provided, so that future calls to the [Process Note-On] routine will not occur and the effect will end. Referring to FIG. 96, the first step is to enter the [Note-On Repetitions] routine 9602.
  • the [Note-On Repetitions] routine shown in FIG. 97 counts the number of repetitions that have been completed, and if the required number has been met, provides for eventual termination of the effect. It also allows a certain number of completed repetitions to signal an upcoming phase change. First, the reps to do value in the note-on location is decremented by one 9706. In this manner, every time the note-on is repeated the number of note-on repetitions to produce is
  • the [Modify Velocity] routine shown in FIG. 98 modifies the stored velocity with a velocity pattem value, velocity modifier and velocity offset, so that the next scheduled procedure call to the [Process Note-On] routine will generate note-on(s) with different velocities, and allows for termination of the effect if the new velocity is outside of a predetermined range.
  • a velocity amount value in memory receives the next value derived from the velocity pattem 9802. This is done by using the stored velocity pattem index to derive a velocity pattem value from the step indicated by the index, after which the index is advanced to another location.
  • the velocity pattem is a modify velocity pattem as previously described, although an absolute velocity pattem could also be used.
  • An example value might be ⁇ -20 ⁇ .
  • the stored new velocity (in the note location) is then modified by replacing it with a value 9806, calculated from the stored initial velocity (in the note location).
  • new velocity initial velocity + velocity amount.
  • notes are generated using the new velocity value, which is calculated here.
  • the new velocity is always replaced with the stored initial velocity modified by a value derived from the velocity pattem, providing accents in the repeated notes. Instead of replacing the value, it could be added to it or subtracted from it to provide a cumulative effect.
  • the value of new velocity may then be optionally further modified by an associated velocity offset to cause an overall increase or decrease over time 9808. In this example, this is done by taking a predetermined or user determined velocity offset, which may be positive or negative, multiplying it by the number of reps done, and adding it again to the new velocity.
  • a parameter memory location setting indicates an optional testing of the velocity 9810
  • the resulting new velocity value is tested against a predetermined minimum and/or maximum range 9812 in parameter memory. If the velocity is within the range 9812, or the testing is not being done, the routine retums 9820 with the terminate flag set to its cu ⁇ ent value of "no". If the velocity is out of range, the terminate flag is set to "yes" 9814 before returning 9820.
  • the [Modify Pitch] routine shown in FIG. 99 modifies the stored pitch with a transposition pattem value, transposition modifier and transposition offset, so that the next scheduled procedure call to the [Process Note-On] routine will generate note-on(s) with different pitches.
  • Options are provided to either terminate the effect, change certain operational parameters, or further modify the pitch if the pitch is outside of a predetermined range.
  • a pitch mode in parameter memory provides for several different options to either terminate the effect, change certain operational parameters, or further modify the pitch if the pitch is outside of a predetermined range after transposition.
  • the pitch modes include: stop: terminate the repeating effect if a pitch is transposed outside of a predetermined range. wrap:
  • a shift amount value in memory receives the next value derived from the transposition pattem 9902. This is done by using the stored transposition pattem index to derive a transposition pattem value from the step indicated by the index, after which the index is advanced to another location. The value of shift amount may then be optionally modified by the transposition pattern's associated transposition modifier 9904, already described in the [Modify Cluster Pitch] routine.
  • new pitch new pitch + (shift amount * transposition direction)
  • phase direction stored in each phase in parameter memory may be used in a similar fashion to the transposition direction, where the phase direction of "up” indicates using the shift amount as is, and the phase direction of "down” indicates inverting the shift amount.
  • the resulting new pitch may then be optionally further modified by an associated transposition offset 9908, also as previously described.
  • the resulting value of new pitch may then be optionally tested against a predetermined range 9910.
  • the range can be an absolute range, such as predetermined minimum/maximum pitches in parameter memory, or a sliding range, where the minimum and maximum notes will be a certain value above and below the stored original pitch in the note location. For example, if the original pitch was a C4 (60), the sliding range might specify ⁇ 4 below to 2 above ⁇ , so that the sliding range would be from (56 - 62).
  • a sliding range can be used separately or in conjunction
  • the previously described pitch mode indicates one of a number of options for modifying the processing. If the pitch mode is "rebound" 9912, then the cu ⁇ ent value of transposition direction is inverted 9914 (e.g. 1 to -1, - 1 to 1), which will cause the transposition pattem values to be applied in an opposite direction with future repeated notes.
  • the new pitch may then be modified to stay within the predetermined range, either by adding or subtracting an interval, or by reapplying the previous shift amount with the new transposition direction, after which the routine retums 9930.
  • pitch mode is "wrap” 9916
  • new pitch is modified 9918 by adding or subtracting a predetermined interval stored in parameter memory, such as an octave or a fifth until the pitch is once again within range.
  • a predetermined interval stored in parameter memory, such as an octave or a fifth until the pitch is once again within range.
  • the pitch mode is "phase change” 9920
  • the do phase change flag is set to "yes" 9922, which will cause a phase change at the appropriate place later on.
  • the pitch mode is assumed to be "stop,” and the terminate flag is set to "yes" 9924 before returning 9930. If the pitch was within the predetermined range 9910, or one of the previous options other than "stop” was selected, or the range test was not utilized, then the terminate flag remains at its cu ⁇ ent state of "no" before returning 9930.
  • the previous pitch mode options are shown as individual choices, they could be combined. For example, a pitch going outside of a predetermined range could trigger both the rebound and phase change options. Furthermore, the effect of rebound could be accomplished alternately by reversing the direction of movement of the pattem index through the transposition pattem, rather than inverting the value selected.
  • the pointer to the phase's memory locations to use during processing may be changed according to a phase pattem, a count of the total number of phases completed is maintained, and termination of the effect may be allowed if a specified number of phases has been completed. If the do phase change flag has not been set to "yes" by previously
  • phase change count in the note-on location
  • the do phase change flag is reset to "no" 10006. If the phase change count is now greater than or equal to total phases 10008 (a predetermined number of phases to perform in parameter memory), the terminate flag is set to "yes" 10010 and the routine retums 10020. If the count is not greater than or equal to total phases, the phase pointer is changed to point to the phase's memory locations specified by the next value derived from the phase pattem 10012.
  • phase pattem index This is done by using the stored phase pattem index to derive a phase pattem value from the step indicated by the index, after which the index is advanced to another location. From this point forward, all processing described will now use the memory locations pointed to by the phase pointer (which may be the same phase or a different phase).
  • Other pattem indexes, flags and values may be optionally and selectively reset at this point 10014, so that the various other pattems will start at predetermined points and with predetermined values when the next repeat occurs, or may be selectively left at their cu ⁇ ent values.
  • various random seeds may be selectively and independently reset to their stored values 10016, so that repeatable random number sequences are generated.
  • the phase pattem contains data indicating various parameters should be changed, the indicated parameters may then be changed to new values 10018. The routine then retums 10020 with the terminate flag at its current value of "no.”
  • voice change count is reset to "0" 10106.
  • the voice change data location receives data derived from the next step of the voice pattem 10108, and the voice change target receives a value derived from the next step of the voice pattem 10110.
  • These steps are done by using the stored voice change pattem index to derive a pair of values from the voice change pattem at the step indicated by the index, after which the index is advanced to another location.
  • the voice change data is a MIDI program change number
  • the voice change target is a number of repetitions to generate before causing a voice change.
  • the value of the voice change target may then be optionally modified by the voice change pattem's associated voice change modifier 10112.
  • this is a percentage so that the values retrieved from the pattem may be compressed or expanded in real-time, causing voice changes to happen faster or slower.
  • the do voice change flag is then set to "yes" 10114, which will cause the voice change data to be sent out in the [Send Out Other Data] routine as previously described, and the routine retums 10120.
  • a voice change offset could be further used to modify the voice change target or voice change data in a similar fashion to examples already provided.
  • This routine stores pre-calculated spatial location data using a spatial location pattem, spatial location modifier and spatial location offset, and stores pre-calculated assignable data using an assignable pattem, assignable modifier, and assignable offset, so that the next scheduled procedure call to the [Process Note-On] routine will cause the spatial location data and assignable data to be sent out.
  • a memory location spatial data receives the next data derived from the spatial location pattem 10202. This is done by using the stored spatial location pattem index to derive data from the spatial location pattem at the step indicated by the index, after which the index is advanced to another location.
  • the spatial data is arbitrarily a MIDI pan value.
  • the value of spatial data may then be optionally modified by the spatial location pattem's associated spatial location modifier 10204. Again, in this example this is a percentage so that the values retrieved from the pattem may be compressed or expanded in real-time.
  • the value of spatial data may then be optionally further modified by an associated spatial location offset to cause an overall spatial movement over time 10206.
  • this may be done by taking a predetermined or user determined spatial location offset, which may be positive or negative, multiplying it by the number of reps done, and adding it to the spatial data.
  • the spatial data is then stored in the note-on location's spatial location data area 10208, where it will be sent out in the [Send Out Other Data] routine as previously described.
  • a memory location assign data receives the next data derived from the assignable pattem 10210.
  • the assign data is arbitrarily a MIDI controller 17 value.
  • the value of assign data may then be optionally modified by the assignable pattem's associated assignable modifier 10212.
  • the value of assign data may then be optionally further modified by an associated assignable offset to cause an overall change over time 10214.
  • the assign data is then stored in the note-on location's assignable data area 10216, where it will be sent out in the [Send Out Other Data] routine as previously described, and the routine retums 10220.
  • the note-on processing chain starts with the [Process Note-Off] routine, which is either called directly (e.g. from within the [Allocate Note Location] routine in FIG. 84, 8420), or by scheduled procedure calls. It is passed a pointer to the address in memory of a note-off location, and those parameters and variables are used during processing. The memory locations of the parent note location can also be accessed. Note that this will therefore be inside a note location that has a co ⁇ esponding note- on location that is undergoing the note-on processing chain just described.
  • the parameter and variable names that are not in the cu ⁇ ent parent note location are referring to variables and parameters in the note-off location, not the note-on location. For example, when a step indicates an operation such as "reps done + 1," this means that the reps done value in the note-off location is being incremented, and not the co ⁇ esponding same location in the note- on location, which was utilized by the note-on processing chain.
  • FIG. 103 The [Process Note-Off] routine is shown in FIG. 103, which is nearly identical to the [Process Note-On] routine (FIG. 86), with the removal of several steps, and the substitution of several note-off routines for like-named note-on routines.
  • Steps 10302 through 10315 operate the same as 8602 through 8615 (with the exception that the procedures retum to this procedure and utilize note-off location values), up until the [Create Note-Off] routine 10318.
  • the [Create Note-Off] routine shown in FIG. 104 locates the cu ⁇ ent value of the pitch that is being processed in one of the buffers that has stored outgoing note- ons, and if located sends out a co ⁇ esponding note-off with the co ⁇ ect pitch value. It also removes the note from the various buffers of sustaining notes if the note-on is sent out.
  • a stram time may be calculated for each note in the cluster (if the cu ⁇ ent cluster target is greater than 1) 10402.
  • the cu ⁇ ent value of start pitch is then located in the altered notes buffer 10404. This is done by looping through all the stored pairs of values, and comparing
  • a memory location note-off pitch receives the second value (stored altered pitch) 10408 associated with the located first value.
  • the located pair of pitches are then removed from the altered notes buffer 10410.
  • the note-off pitch is then located in the sustaining repeats buffer 10412. If found 10414, the pitch is removed from the buffer 10416, and a note-off with the note-off pitch is scheduled to be output at a time in the future of (now time + strum time) 10418. If not found 10414, or continuing from 10418, the note-off pitch is then located in the sustaining cluster buffer 10420. If found 10422, the pitch is removed from the buffer 10424, and the routine retums 10440. If not found at 10422, the routine also retums.
  • the start pitch was not located in the altered notes buffer 10406, it is then located in the sustaining notes buffer 10426. If not located, the routine retums 10440. If located, the pitch is removed from the buffer 10430, and a note-off with the start pitch is scheduled to be output at a time in the future of (now time + strum time) 10432. The routine then retums 10440 to the [Process Note-Off] routine of FIG. 103, where the [Replicate Note-Off] routine is then entered 10320.
  • the [Replicate Note-Off] routine shown in FIG. 105 operates in a similar fashion to the routine just described.
  • the routine locates the cu ⁇ ent value of the pitch that is being processed in the replicated notes buffer, and if located, sends out a co ⁇ esponding note-off with the co ⁇ ect pitch value. It also removes the note from the various buffers of sustaining notes if the note-on is sent out.
  • the cu ⁇ ent value of start pitch is located in the replicated notes buffer 10504. This is done by looping through all the stored pairs of values, and comparing the start pitch with the first value of each pair. If it is located 10506, a note-off pitch value in memory receives the second value (stored replicated pitch) 10508 associated with the located first value. The located pair of pitches are then removed from the replicated notes buffer 10510. The note-off pitch is then located in the sustaining repeats buffer 10512. If found 10514, the pitch is removed from the buffer 10516, and a note-off with the note-off pitch is scheduled to be output at a time in the future of (now time + stram time) 10518. If not found 10514, or continuing from 10518, the note-off pitch is then located in the sustaining cluster
  • steps 10322 - 10330 again operate in the same fashion as FIG. 86, steps 8622 - 8630, except the loop consisting of the steps 10318 through 10328 sends out as many note-offs as are required by the cluster target (not note-ons), and the routines retum to this procedure.
  • the memory locations utilized during processing belong to the note-off location, not the note-on location. Since the note-on location and the note- off location each maintain separate pattem indexes, this routine will access pattems like the cluster pattem in the same order as they were accessed by the [Process Note- On] routine previously described.
  • the [Repeat Note-Off] routine is entered 10332, after which the routine is finished 10340.
  • the [Repeat Note-Off] routine shown in FIG. 106 is where a number of changes will be performed to the data stored in the note-off location in a similar fashion to changes which were made to the data in the note-on location by the [Repeat Note-On] routine. After these changes, another call to the [Process Note- Off] routine that is cu ⁇ ently being described will occur at a point in the future, and the precalculated values then sent out or used as already described.
  • the [Process Note-Off Routine] ultimately calls itself over and over, scheduling the calls at timed intervals in the future according to the rhythm pattem.
  • the [Repeat Note-Off] routine several options for terminating the effect are also provided, so that future calls to the [Process Note-Off] routine will not occur and the effect will end.
  • the first step is to enter the [Note-Off Repetitions] routine 10602.
  • the [Note-Off Repetitions] routine shown in FIG. 107 counts the number of repetitions that has been completed, and if the required number has been met, provides for eventual termination of the effect. It also allows a certain number of completed repetitions to signal an upcoming phase change. It is first checked whether the co ⁇ esponding note-on location's terminate flag is set to "yes" 10702. (This will be the note-on location within the same parent note location that the
  • the note-on's terminate flag may have been set to "yes" as a result of one of the operations previously described in the note-on processing chain. If it was terminated, then the note-off processing chain must be terminated at the same number of repetitions. Therefore, it is checked whether the note-off location's reps done value is equal to the note-on location's reps done value 10704. If so, then the note-off processing chain can be terminated by setting the note-off location's terminate flag to "yes" 10716, and the routine retums 10720.
  • steps 10706 - 10720 are performed in the same fashion as steps 9706 - 9720 of FIG. 97 (the [Note-On Repetitions] routine). The only difference is that the memory locations being described reside in the note- off location.
  • the repeat note duration mode is checked 10618. If it is not "as played” (meaning a duration pattem is being used), then it is not necessary to schedule a new procedure call at this time since that will have been handled in the [Schedule Note-Off] routine (FIG. 88, step 8820). This contributes to achieving the duration effects (4) through (8) of FIG. 79 (for repeated notes). Reps done is then incremented by "1" 10624, indicating that a repetition has been successfully completed, and the routine retums 10630. If the repeat note duration mode is "as played” 10618, then note-off processing is being dealt with inside this routine. A new procedure call to this same [Process Note-Off] routine (within which execution is cu ⁇ ently happening) is
  • the note- off processing chain (and co ⁇ esponding note-on processing chain) is completed for this note location, and it is reallocated for use 10626. This is done by removing it from the in use list, and setting its reserved flag to "no," indicating it is again available. The routine then retums 10630 and no further repeated note-offs are scheduled for generation.
  • FIG. 108 is a diagram showing an example of the generation of a repeated effect according to the previously described process.
  • a single phase consisting of a variety of pattems are shown 10800. These are not necessarily representations of the exact pattems, since specific value pattems or random pool pattems could be utilized; rather, these are the values that will be derived from the pattems during processing.
  • the cluster pattem is not shown, and may be assumed to be the value ⁇ 1 ⁇ or to not be utilized at all, so that only one note at a time is generated. Also, other various pattems are not included in this example for clarity although they could have been utilized.
  • the transposition direction previously described is assumed to be 1, so that transposition pattem values are utilized without inversion.
  • the spatial location pattem (in this example a MIDI pan value).
  • the first rhythm pattem value of 12 is calculated (an 8th note at 24 cpq), the first value of the transposition pattem 2 is used to modify the pitch to 62, and the first value of the velocity pattem -10 is used to modify the velocity to 117.
  • the first repeat is then scheduled to be output an 8th note in the future. When repeat one is therefore generated, the pitch, velocity, and pan values shown in the column beneath it are first put out. Then, the next value of transposition pattem modifies the pitch, the next velocity pattem value modifies the velocity, and the next rhythm pattem value is used to schedule the output of the note in the future, this time a 16th note.
  • the converted pitches row shows the optional use of a conversion table.
  • a conversion table is utilized to constrain the pitches to a certain scale or chord, as previously described.
  • a table co ⁇ esponding to a C Major scale is utilized, in the form ⁇ 0, 0, 2, 4, 4, 7, 7, 7, 9, 9, 11, 11 ⁇ . Therefore, the repeated pitch of 66 is reduced to a pitch class of 6 in the 5th octave, the 6th value in the table 7 is retrieved, the value is placed back in the 5th octave and the note 67 is issued.
  • an absolute transposition pattem may be used, so that the pitch of the input note(s) that start the repeating effect are not stored or taken into account whatsoever. For example, if the absolute transposition pattem were ⁇ 60, 64, 67, 71 ⁇ , then the effect would start with the pitch 60 being issued regardless of what the input note was, with each repeated note using the next pitch in the transposition pattem.
  • Another embodiment of generating a repeated effect provides a means for storing the input notes as they are received, and selectively allowing several different types of actions to trigger or repeatedly trigger the start of the repeated effect with the stored input notes, or terminate the repeated effect.
  • Triggering means have already been explained in detail. Only the differences as they apply here will be discussed.
  • the present embodiment provides for several additional trigger modes that can be set to utilize the same type of trigger events as previously described during the reading out of data: start trigger mode: start the repeated effect. terminate trigger mode: stop the repeated effect.
  • the [Receive Input Note] routine is shown in FIG. 109. Steps 10906, 10908, 10910 and 10916 are performed in the same fashion as previously described in FIG. 46, 4606, 4608, 4610, and 4616, with the exception that all flowchart diagrams retum to this procedure. As a result, the [Process Triggers] routine 10918 (which is different for this embodiment) may have been called with one or more trigger events, starting or stopping the repeated effect under the proper circumstances.
  • the [Process Triggers] routine is called with one of the trigger event types 11000. If the terminate trigger mode uses the trigger event type 11001, the previously described [Terminate Previous Effect] routine is called 11002. This would be performed as previously described, with the exception of skipping step 8302, FIG. 83. After this, the routine is finished 11040. The effect may alternately be terminated by looping through every note location in the in use list, and setting the note-on location's terminate flag to "yes.” This would have the effect of allowing the note-off processing chains to continue for a time as previously described, preserving the intended durations rather than immediately ending all notes.
  • the terminate trigger mode does not utilize the event type 11002, it is checked whether a key down trigger event called the routine 11004. If so, it is checked whether the start trigger mode utilizes key down events 11006. If not, the routine ends with no starting of the effect taking place 11040. If the key down
  • the [Main Routine] of FIG. 82 is called with each note-on cu ⁇ ently in the note-ons buffer being sent as the input notes 11010 - 11012. In this manner, repeated effects may be started for each of the notes in the buffer.
  • the note-ons buffer and note-offs buffer can be optionally reset by setting stored note-ons and stored note-offs to "0" 11014. It could also be a ⁇ anged that the reset of the buffer was accomplished by other means, so that more note-ons and note-offs could be added to those already stored, and this routine called again.
  • note-ons are only allowed to trigger the start of the repeated effect if the start trigger mode utilizes key down trigger events, and a key down trigger has been determined. If it was not a key down trigger event 11004, it is checked whether the routine was called by a key up trigger event 11018. If so, it is checked whether the start trigger mode utilizes key up events 11022. If not, the routine ends with no starting of the effect taking place 11040. If key up events are being utilized, the original note duration mode is then checked 11026. If it is "as played,” then the durations of the stored note-offs will be used to generate note-offs for the stored note-ons 11030.
  • the routine When the routine is eventually executed one or more times, it will be passed pointer(s) to the note-on(s) and use them as the input note(s).
  • the duration time is calculated by locating the same pitch in the note-ons buffer, and subtracting the note-on time stamp from the note-off time stamp, giving each note the duration with which it was originally played. Alternately, it can be calculated by finding the durations of all of the note-offs in the buffer using the same method, and selecting the shortest, longest, or average value.
  • the resulting duration can then be used so that all calls to the [Main Routine] are scheduled to happen at the same time.
  • the [Main Routine] is called for all note-ons in the note-ons buffer as previously described 11010 - 11012, the buffers are optionally reset 11014, and the routine ends 11040. In this manner, note-offs are only allowed to trigger the start of the repeated effect if the start trigger mode utilizes key up trigger events, and a key up trigger has been determined.
  • 193 mode utilizes ext/loc trigger events 11024. If not, the routine ends with no starting of the effect taking place 11040. If ext/loc trigger events are being utilized, the routine continues from step 11026 as previously described. In this manner, the receipt of external or location triggers can start the repeated effect, but only if the start trigger mode utilizes ext/loc trigger events.
  • the start trigger mode is utilizing key up trigger events
  • the start of the effect will happen on the release of the keys or buttons.
  • the repeat time calculated in FIG. 87 would be set to 0 for the first repetition only, so that it happens immediately. This is because the original note-ons would already have been sent out by the note-ons (key downs). Therefore when releasing the keys and causing the start of the effect, it is desirable to hear the first repeat immediately.
  • the [Phase Change] routine of FIG. 100 may include an additional step whereby the [Process Triggers] routine is called with phase trigger events, in the same fashion as FIG. 55, step 5579. Furthermore, the additional steps of testing for key down conditions of FIG. 54 may also be included in this embodiment.
  • the pitch of the input note is used to find a location in a pitch table of stored musical pitches, which may be selected from a plurality of pitch tables in memory.
  • the means of selecting the table could be one or more of the following: the operation of a chord analysis routine on input notes, or on a certain range of input notes; the operation of a chord analysis routine on an area of a musical controller such as a keyboard or guitar; the operation of a chord analysis routine performed on sections of a background track of music; markers stored at various locations in a background track of music; or user operations. If the pitch does not exist in the table, the nearest one in either direction may be chosen. Alternately, some other method of locating a suitable starting point may be used, such as finding the nearest note in either direction with the same pitch class (determined by modulo 12 division).
  • start index either an index can be moved sequentially backwards and forwards through the table, or an index pattem as previously described in other embodiments is used to move to a different location in the table, and a note with the pitch selected at that location in the table will be produced as the next repeated note. This may be done by storing the start index in the note-on and note-off locations, rather than the original pitch.
  • FIG. I l l shows an example pitch table, comprised of 16 steps 11100, indicating a four octave CMaj7 arpeggio shown in musical notation. This example only explains the use of the pitch table and index pattem, so other pattems and parameters used during processing are not shown.
  • pitch table index 7 with the value 43 is the start index 11100.
  • the input note is produced immediately as played.
  • the start index is stored in the note location, and the first repeat is scheduled.
  • An example of values derived from an index pattem ⁇ 1, 1, -3 ⁇ is shown.
  • the stored index of 7 is used to retrieve the pitch 43 which is then sent out.
  • the first value of the index pattem 1 is then used to modify the index to 8, and the next repeat is scheduled.
  • the pitch at index 8 of the pitch table is retrieved and sent out, the next value of the index pattem used to modify the stored index, and so on.
  • the start index could be used to replace the original input note, so that the original pitch is not put out, but the nearest located pitch in the pitch table.
  • the pitch 43 at the start index 7 would be put out immediately instead of the original pitch
  • the index 7 would be modified immediately by the next index pattem value
  • the first repeated note would retrieve the pitch at index 8, and so on. All other operations of producing the repeated notes may be performed as previously disclosed.
  • the index pattem could indicate absolute distances from the start index, rather than traveling distances, as was also previously disclosed.
  • the use of an index pattem may be omitted, and a constant positive or negative value added to move the index around (e.g. 1, or 2, or - 1).

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Electrophonic Musical Instruments (AREA)
EP99903458A 1998-01-28 1999-01-28 Verfahren und apparat zum generieren musikalischer effekte Withdrawn EP1057170A4 (de)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US7292298P 1998-01-28 1998-01-28
US7291998P 1998-01-28 1998-01-28
US7292198P 1998-01-28 1998-01-28
US7291898P 1998-01-28 1998-01-28
US72919P 1998-01-28
US72922P 1998-01-28
US72918P 1998-01-28
US72921P 1998-01-28
PCT/US1999/001812 WO1999039329A1 (en) 1998-01-28 1999-01-28 Method and apparatus for generating musical effects

Publications (2)

Publication Number Publication Date
EP1057170A1 EP1057170A1 (de) 2000-12-06
EP1057170A4 true EP1057170A4 (de) 2004-05-06

Family

ID=27491012

Family Applications (1)

Application Number Title Priority Date Filing Date
EP99903458A Withdrawn EP1057170A4 (de) 1998-01-28 1999-01-28 Verfahren und apparat zum generieren musikalischer effekte

Country Status (3)

Country Link
EP (1) EP1057170A4 (de)
AU (1) AU2347199A (de)
WO (1) WO1999039329A1 (de)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4399731A (en) * 1981-08-11 1983-08-23 Nippon Gakki Seizo Kabushiki Kaisha Apparatus for automatically composing music piece
US5496962A (en) * 1994-05-31 1996-03-05 Meier; Sidney K. System for real-time music composition and synthesis
WO1996024422A1 (en) * 1995-02-06 1996-08-15 Blue Ribbon Soundworks, Ltd. System for enhancing a multimedia presentation by composing music according to a user's perception

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3629480A (en) * 1970-04-10 1971-12-21 Baldwin Co D H Rhythmic accompaniment system employing randomness in rhythm generation
US4208938A (en) * 1977-12-08 1980-06-24 Kabushiki Kaisha Kawai Gakki Seisakusho Random rhythm pattern generator
US4181059A (en) * 1978-04-11 1980-01-01 Cbs Inc. Circuit for simulating sound of wire brush rotated around head of snare drum
JPS564192A (en) * 1979-06-25 1981-01-17 Nippon Musical Instruments Mfg Automatic player
JPH0631978B2 (ja) * 1985-12-27 1994-04-27 ヤマハ株式会社 電子楽器の自動伴奏装置
JPH0827628B2 (ja) * 1988-06-23 1996-03-21 ヤマハ株式会社 自動演奏装置
US5159141A (en) * 1990-04-23 1992-10-27 Casio Computer Co., Ltd. Apparatus for controlling reproduction states of audio signals recorded in recording medium and generation states of musical sound signals
JP2606456B2 (ja) * 1991-01-17 1997-05-07 ヤマハ株式会社 電子楽器
US5281754A (en) * 1992-04-13 1994-01-25 International Business Machines Corporation Melody composer and arranger
JP2991044B2 (ja) * 1994-03-15 1999-12-20 ヤマハ株式会社 自動演奏機能を有した電子楽器
JP3177374B2 (ja) * 1994-03-24 2001-06-18 ヤマハ株式会社 自動伴奏情報発生装置
JPH09319368A (ja) * 1996-05-28 1997-12-12 Kawai Musical Instr Mfg Co Ltd 電子楽器の移調制御装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4399731A (en) * 1981-08-11 1983-08-23 Nippon Gakki Seizo Kabushiki Kaisha Apparatus for automatically composing music piece
US5496962A (en) * 1994-05-31 1996-03-05 Meier; Sidney K. System for real-time music composition and synthesis
WO1996024422A1 (en) * 1995-02-06 1996-08-15 Blue Ribbon Soundworks, Ltd. System for enhancing a multimedia presentation by composing music according to a user's perception

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of WO9939329A1 *

Also Published As

Publication number Publication date
EP1057170A1 (de) 2000-12-06
WO1999039329A1 (en) 1999-08-05
AU2347199A (en) 1999-08-16

Similar Documents

Publication Publication Date Title
US6121532A (en) Method and apparatus for creating a melodic repeated effect
US6121533A (en) Method and apparatus for generating random weighted musical choices
US6103964A (en) Method and apparatus for generating algorithmic musical effects
US6087578A (en) Method and apparatus for generating and controlling automatic pitch bending effects
EP0856830B1 (de) Vorrichtung und Verfahren zur Erzeugung von Tönen durch Zeitstrecken- und Kompressionstechnik
EP1638077B1 (de) Vorrichtung, Verfahren und Computerprogramm zur automatischen Bestimmung eines Wiedergabestils
US6881888B2 (en) Waveform production method and apparatus using shot-tone-related rendition style waveform
US7396992B2 (en) Tone synthesis apparatus and method
CN1892812A (zh) 乐音合成设备和方法
US6911591B2 (en) Rendition style determining and/or editing apparatus and method
JP3601371B2 (ja) 波形生成方法及び装置
EP1391873B1 (de) Vorrichtung und Verfahren zur Feststellung von Vortragsstil
JPS6023355B2 (ja) 電子楽器
JP5995343B2 (ja) 電子楽器
EP1057170A1 (de) Verfahren und apparat zum generieren musikalischer effekte
JP3832421B2 (ja) 楽音生成装置及び方法
JP2000194361A (ja) 電子音響装置のゆらぎ付加装置及びゆらぎ付加方法
JP2000003175A (ja) 楽音生成方法、楽音デ―タ作成方法、楽音波形デ―タ作成方法、楽音デ―タ生成方法、および記憶媒体
JP3760909B2 (ja) 楽音生成装置及び方法
JP3788096B2 (ja) 波形圧縮方法及び波形生成方法
JP4015267B2 (ja) 波形発生装置
JP4826276B2 (ja) 楽音合成装置及びプログラム
JP3832422B2 (ja) 楽音生成装置及び方法
JP3832420B2 (ja) 楽音生成装置及び方法
JP3832419B2 (ja) 楽音生成装置及び方法

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20000821

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AT BE CH DE DK ES FI FR GB GR IE IT LI NL PT SE

A4 Supplementary search report drawn up and despatched

Effective date: 20040323

RIC1 Information provided on ipc code assigned before grant

Ipc: 7G 10H 1/00 A

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20060822

REG Reference to a national code

Ref country code: HK

Ref legal event code: WD

Ref document number: 1034135

Country of ref document: HK