|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
FORCER UNE GAMME MUSICALE EN MIDI
Information sur la source
Description
Ce code utilise un algorythme simple qui permet d'appliquer une transposition midi aux messages midi de types note on/note off.Il est utilisable dans le contexte d'un instruemnt vsti ou d'une application midi.
Source
- type
- TScale = array [0..11] of integer;
-
- ====================================================================
-
- Scale: TScale;
-
- // les gammes courantes converties en table de transposition
-
- // Db Eb Gb Ab Bb
- const // C C# D D# E F F# G G# A A# B
- Maj : TScale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0);
- MinNat : TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, -1, 0, 0,-1);
- MinMelo: TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, 0,-1, -1, 0);
- MinHarm: TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, 0,-1, 0,-1);
- _7ThDom: Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0,-1);
- DoriMin: Tscale = ( 0, -1, 0, 0,-1, 0, -1, 0, -1, 0, 0,-1);
- Locrian: Tscale = ( 0, 0,-1, 0,-1, 0, 0,-1, 0,-1, 0,-1);
- Dim : TScale = ( 0, -1, 0, 0,-1, 0, 0,-1, 0, 0, -1, 0);
- PentMaj: Tscale = ( 0, -1, 0, -1, 0,-1, -2, 0, -1, 0, -1,-2);
- PentMin: Tscale = ( 0, -1,-2, 0,-1, 0, -1, 0, -1,-2, 0,-1);
- Blues : Tscale = ( 0, -1,-2, 0,-1, 0, 0, 0, -1,-2, 0,-1);
- DemiTT : Tscale = ( 0, -1, 0, -1, 0,-1, 0,-1, 0,-1, 0,-1);
- TT : Tscale = ( 0, -1, 0, -1, 0,-1, 0,-1, 0,-1, 0,-1);
- BBmaj : Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0);
- BBDom : Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0, 0);
- BBmin : TScale = ( 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0,-1);
- Lydian : TScale = ( 0, -1, 0, -1, 0,-1, 0, 0, -1, 0, -1, 0);
- LydDom : Tscale = ( 0, -1, 0, -1, 0,-1, 0, 0, -1, 0, 0,-1);
- Augm : Tscale = ( 0, -1,-2, 0, 0,-1, -2, 0, 0,-1, -2, 0);
- Phryg : TScale = ( 0, 0,-1, 0,-1, 0, -1, 0, 0,-1, 0,-1);
- TFullD : Tscale = ( 0, 0,-1, 0, 0,-1, 0,-1, 0,-1, 0,-1);
-
-
- ========================================================================
-
- procedure processMIDI(time,status,channel,data1,data2:integer);
- begin
- if (Status=$90) or (Status=$80) then
- begin // scale = pointer vers une des TScale déclarée en constante
- n:= data1 mod 12; // détéction de la note courante quelque soit l'octave
- n:= scale[n]+key; // key = dominante de la gamme , on ajoute la valeur de transposition
- data1:= data1+n; // à la valeur initiale
- end;
- case status of
- $80: MIDI_NoteOff(channel,data1,data2,0); // sortie midi spécifique au programme :
- $90: MIDI_NoteOn(channel,data1,data2,0); // thru (in = out) sauf s'il faut transposer.
- $A0: MIDI_PolyAftertouch(channel,data1,data2,0);
- $B0: MIDI_CC(channel,data1,data2,0);
- $C0: MIDI_ProgramChange(channel,data1,0);
- $D0: MIDI_ChannelAftertouch(channel,data1,0);
- $E0: MIDI_PitchBend2(channel,data1,data2,0);
- end;
type
TScale = array [0..11] of integer;
====================================================================
Scale: TScale;
// les gammes courantes converties en table de transposition
// Db Eb Gb Ab Bb
const // C C# D D# E F F# G G# A A# B
Maj : TScale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0);
MinNat : TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, -1, 0, 0,-1);
MinMelo: TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, 0,-1, -1, 0);
MinHarm: TScale = ( 0, -1, 0, 0,-1, 0, -1, 0, 0,-1, 0,-1);
_7ThDom: Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0,-1);
DoriMin: Tscale = ( 0, -1, 0, 0,-1, 0, -1, 0, -1, 0, 0,-1);
Locrian: Tscale = ( 0, 0,-1, 0,-1, 0, 0,-1, 0,-1, 0,-1);
Dim : TScale = ( 0, -1, 0, 0,-1, 0, 0,-1, 0, 0, -1, 0);
PentMaj: Tscale = ( 0, -1, 0, -1, 0,-1, -2, 0, -1, 0, -1,-2);
PentMin: Tscale = ( 0, -1,-2, 0,-1, 0, -1, 0, -1,-2, 0,-1);
Blues : Tscale = ( 0, -1,-2, 0,-1, 0, 0, 0, -1,-2, 0,-1);
DemiTT : Tscale = ( 0, -1, 0, -1, 0,-1, 0,-1, 0,-1, 0,-1);
TT : Tscale = ( 0, -1, 0, -1, 0,-1, 0,-1, 0,-1, 0,-1);
BBmaj : Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0);
BBDom : Tscale = ( 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0, 0);
BBmin : TScale = ( 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0,-1);
Lydian : TScale = ( 0, -1, 0, -1, 0,-1, 0, 0, -1, 0, -1, 0);
LydDom : Tscale = ( 0, -1, 0, -1, 0,-1, 0, 0, -1, 0, 0,-1);
Augm : Tscale = ( 0, -1,-2, 0, 0,-1, -2, 0, 0,-1, -2, 0);
Phryg : TScale = ( 0, 0,-1, 0,-1, 0, -1, 0, 0,-1, 0,-1);
TFullD : Tscale = ( 0, 0,-1, 0, 0,-1, 0,-1, 0,-1, 0,-1);
========================================================================
procedure processMIDI(time,status,channel,data1,data2:integer);
begin
if (Status=$90) or (Status=$80) then
begin // scale = pointer vers une des TScale déclarée en constante
n:= data1 mod 12; // détéction de la note courante quelque soit l'octave
n:= scale[n]+key; // key = dominante de la gamme , on ajoute la valeur de transposition
data1:= data1+n; // à la valeur initiale
end;
case status of
$80: MIDI_NoteOff(channel,data1,data2,0); // sortie midi spécifique au programme :
$90: MIDI_NoteOn(channel,data1,data2,0); // thru (in = out) sauf s'il faut transposer.
$A0: MIDI_PolyAftertouch(channel,data1,data2,0);
$B0: MIDI_CC(channel,data1,data2,0);
$C0: MIDI_ProgramChange(channel,data1,0);
$D0: MIDI_ChannelAftertouch(channel,data1,0);
$E0: MIDI_PitchBend2(channel,data1,data2,0);
end;
Historique
- 08 juillet 2008 01:56:37 :
- ajout d'un fichier joint + petites corrections syntaxiques...
- 08 juillet 2008 01:58:19 :
- correction orthographique dans le titre
- 10 juillet 2008 01:13:15 :
- Suppression de l'entrée
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Piano midi [ par sebrs1 ]
Comment faire pour jouer des ons de piano en midi?@+Sebrs1PS (qui ne signifie pas playstation :-)) : visitez mon site qui fait ses début svphttp://pro
MIDI files [ par magic123 ]
Salut tout le monde, J'aurais besoin d'informations pour savoir comment faire pour lire et décoder un midi file, ceci afin d'effectuer quelques modifi
Insérer un fichier Midi sous Delphi [ par frutygirls ]
Bonjour ! Nous avons un TP à faire en cours et nous souhaitons y ajouter un fond musical, mais nous galèrons ! Nous avons commencé à insérer un objet
Fichiers Midi - Bug avec la longueur des chemins ? [ par Udun ]
J'ai rencontré une erreur bizarre dans Delphi. En effet, avec le composantMediaPlayer, je lisais des fichiers midi et j'ai rencontré l'erreu
Port Jeux (MIDI) avec WinXP [ par PHIL63 ]
Bonjour à tous,J'aurais besoin dans une application, de pouvoir détecter si il y a un appuie sur le bouton feu du port joystick (c'est pas p
MIDI [ par Nicolas___ ]
Voila , hier j'ai telechargé un logicile excellent TS-AudioToMIDI disponible sur www.Telecharger.com le but étant ,pour ceux qui ne l'a
Midi : Testeurs pour un composant [ par Francky23012301 ]
Salut à tous,Je viens de faire un composant TMidiCom (Com c'est pour communication ) dont le but est de communiquer avec un appareil midi comme un sy
SoundFont [ par Francky23012301 ]
Salut à tous,Je suis entrain de faire un soft avec le protocole Midi. J'ai voulu utiliser la dll Bass mais à force de décortiquer cette Dll admet pas
Stratégie pour décaler des bits [ par Francky23012301 ]
Salut la compagnie ,Je travaille sur les fichiers midi : les évènements midi utilisent un paramètre qui est un DeltaTime et qui peut (et doit ) codé s
Problème sur routines de WinMM.dll, gestion de Midi [ par Bacterius ]
Bonsoir,je voudrais pouvoir jouer un son midi sans media player.J'ai trouvé sur MSDN quelques infos interessantes dans la DLL WinMM.dll ...mais je ne
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|