IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[Projet] Création d'un logiciel de composition musicale


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut [Projet] Création d'un logiciel de composition musicale
    Je suis entrent de réfléchir sur un futur projet....

    Il s'agit de créer un logiciel spécialisé permettant de composer de la musique semblable aux logiciels comme "Finale 2006" ou "Encore 4.5"

    Ces logiciels permettant de composer des partitions, .... on place des notes sur des portées (a l'aide de la souris ou du clavier) ... puis on peut écouter ce qu'on à composé.

    Le logiciel que je souhaite créer doit se différencier des autres logiciels par les points suivants:

    Prise en charge des «instruments á vent» spécifiques suivantes:
    a) Highland Bagpipe
    b) Gaita (Cornemuse de Galice, Asturias)
    c) Cornemuse de Poitou
    d) Biniou
    e) Uillean-Pipe
    etc......

    Le logiciel doit reproduire les sons des différents cornemuses le plus authentique que possible et non comme les logiciels évoque plus haut, dans mon message, qui produisent des sons qui ressemblent à des "chants des canards".

    En cherchant depuis deux jours sur google je n'ai pas trouvé des composants visuels delphi permettant de designer des portées et (ou) des notes ....

    Mon projet "multimédia" comporte plusieurs volets:

    Graphique : Designer (placer des notes) sur les portées à l'aide de la souris ou du clavier
    Acoustique : Reproduction des sons des différents instruments á vent
    Impression : Impressions des partitions
    Création des fichiers audio en fin de création: wav, mp3 et ogg
    Pour une futur version il est prévu de connecter une gaita électronique, via une interface midi, voire aussi sur http://www.mastergaita.com pour saisir (écrire) les notes sur la partion, directement à partir de l’instrument et non via la souris ou le clavier.
    Il est également prévu d’intégrer une interface d’enregistrement permettant d'enregistrer les timbres des divers instruments (reproduction des sons de son propre instrument).

    Mes Questions:
    Est que Delphi c'est le système idéal pour la réalisation de ce projet multimédia?

    Sur quelle palette des composants peux je m'appuyer pour réaliser mon projet? Je veux éviter de réinventer la roue, perdre mon temps!

    Je pris conscience que mon projet est bien ambitieux!

    Je vous remercie pour tous vos conseils permettant de me mettre sur la bonne piste ....

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Devant ce cahier des charges plus que sérieux et complet digne d'un puriste, faut logiquement se rendre à l'évidence ; je ne crois pas qu'il soit possible d'émuler/reproduire un son qui soit aussi pointu et riche dans son essence même.

    Par exemple, comment reproduire la différence entre le son d'un Duport et d'un Davidov...

    Une classique analyse oscilloscopique s'impose.

    Chaque note devant être enregistrée en haute qualité afin de ne pas altérer la richesse de ses harmoniques, sans oublier de ne pas essayer de convertir tout cela en ondes numériques, même avec un fort taux d'échantillonnage ; pureté oblige.

    Voilà ma modeste approche de ce projet en effet fort ambitieux, mais n'est-ce pas la rançon à payer contre le risque de sonorités en rapport avec la famille des anatidés

    Résumons-nous :
    Est que Delphi c'est le système idéal pour la réalisation de ce projet multimédia?
    Bof, idéal j'en sais rien, mais capable de répondre à tes souhaits ; pourquoi pas.

    Sur quelle telle palette des composants peux je m'appuyer pour réaliser mon projet? Je veux éviter de réinventer la roue, perdre mon temps!
    J'espère pour toi qu'une palette existe, ne compte pas trop dessus, mais si tel est le cas, ce ne doit pas être du freeware

    Espérant t'avoir un peu aidé en pensant ondes analogiques à 100%.

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Dans le désordre :

    • Je dois réaliser un séquenceur MIDI IN/OUT, je pourrais t'aider à ce niveau.

    • Concernant les samples, j'ai écrit ce tutoriel. Il ya des démos pour l'enregistrement et la restitution des samples en utilisant DirectSound. J'ai depuis trouvé BASS.DLL pour pouvoir lire les samples WAV et MP3. Le fonctionnement est pratiquement identique à DirectSound. Voici un sujet où je l'ai utilisé : http://developpez.net/forums/showthread.php?t=264149#13

    • Concernant l'écriture et l'impression de la partition, il faudra le coder toi-même je pense (tu as plutôt intérêt à bien connaître le solfège). Tu dois pouvoir trouver des compo permettant d'afficher un fichier MId dans une partition, mais cela m'étonnerait que ce soit gratuit. Sinon, techniquement et dans les grandes lignes, tu prend une TImage représentant une partition vierge, et tu poses dessus les notes (glisser / déposer) contenues dans d'autres TImages...

    à+
    De retour parmis vous après 10 ans!!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos suggestions J-P et Sub0

    Chaque note devant être enregistrée en haute qualité afin de ne pas altérer la richesse de ses harmoniques, sans oublier de ne pas essayer de convertir tout cela en ondes numériques, même avec un fort taux d'échantillonnage ; pureté oblige.
    Tu à raison de penser à "la la richesse de ses harmoniques"! Je ne sais pas encore de quel manière je vais reproduire les sons .... mais je pense que tu surement raison.

    Avant de me lancer "comme une brute sur le code" ... je essaye de voire quel sont les différents techniques pour réaliser les divers modules du futur logiciel.

    Devant ce cahier des charges plus que sérieux et complet digne d'un puriste, faut logiquement se rendre à l'évidence ; je ne crois pas qu'il soit possible d'émuler/reproduire un son qui soit aussi pointu et riche dans son essence même.
    Je vais créer un vrai cahier des charges (fonctionnel) dans les semaines (mois) à venir, cahier qui d'écrit les différents fonctionnalités du futur logiciel. C'est indispensable pour pouvoir communiquer avec les autres personnes qui souhaitent s'associer à ce projet. Ce cahier contiendra également des notions de base de solfège, pour ceux qui ne connaissant pas le solfège. Enfin le futur Logiciel doit s'adresser aussi aux débutants de musique, il y aura une bonne documentation à réaliser (français, anglais et espagnol)

    Petit détour : J'ai 49 ans et habite à Bordeaux ou je me suis mis à la musique il y à un ans. Je prend des cours de percussion: congas, Darbouka, et depuis 6 mois je vais aux conservatoire de Libourne ou j'apprend les bases du solfège et de la flûte à bec avec Jean Gujon, qui un excellent professeur de musique, cours pour adultes le soir. Je prend entre autres des cours privé de gaita (cornemuse de Galice) avec Mickael Cozien (un musicien et professeur surdoué qui est un expert des divers cornemuses) . Michael est disposé de soutenir mon projet (Conseils, enregistrements des echantillions, redaction des divers documents pédagogiques).

    Je peut vous dire que j'ai eu beaucoup de peine de tout réunir, depuis un ans quand je me suis mis à la musique, achat des instruments, livres, recherche des profs, méthode d'apprentissage, et je me suis aperçu qu'il reste encore beaucoup a faire..... surtout au niveau logiciel!


    Je dois réaliser un séquenceur MIDI IN/OUT, je pourrais t'aider à ce niveau.
    Merci beaucoup pour ta proposition, ton aide me sera très précieuse
    Je regardera ta documentation ce soir ....

  5. #5
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Mes conseils à moi... si je puis me permettre !

    -d'abort, une feuille (enfin plus!) et un stylo bien sur, et c'est parti...
    Dessine ton logiciel, enfin le schéma relationnel, les relations entre tes form, quelles fonctions tu dois développer...Tu y verra un peu plus clair déjà!

    -des recherche intensive sur le net, et là Google est ton ami !!!
    cherches des compos, des exemples(et en effets, ceux de sub0 t'en apprendrons beaucoup !)

    -avoir sous la main, si c'est possible, un logiciel similaire afin de l'étudier, de le décortiquer, et d'en améliorer le principe (sinon ton soft ne marchera pas !!! commercialement parlant biensur, si c'est pour toi, y'a pas de probleme...)

    - et pour finir, ton imagination ....

    Voilà, alors maintenant à toi de jouer !!! enfin de programmer !

  6. #6
    Membre régulier Avatar de user 56gt8
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 92
    Points
    92
    Par défaut
    Salut Didier 100, ton projet me parait assez délirant (le coté cornemuse surtout) mais bon , étant assez intéressé par le multimédia sous delphi voici quelques liens.

    Tobybear : Waveiox , une classe de sauvegarde de wav à toutes les résolutions.Ca marche bien je l'utilise dans un logiciel de création de wavetables.

    Axioworld : pour l'asio, permet d'implémenter le driver audio généralement utilisé en audionumérique.

    Pour l'implémentation midi il y avait un exemple utilisable en midi 'midimountain', malheureusement le site semble être offline ou mort ,qui utilisait mmsystem (mais tout était déjà prêt avec un .pas réutilisable : sysex, note_on, note_off , cc etc).ce pendant j'ai l'archive en stock donc si ca t'interesse...

    Ensuite des logiciels comme fruity loops, energyXT ou Usine sont codés en delphi donc ca doit être faisable pour quelqu'un qui sait coder.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 48
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Ton projet c'est un FreeWare, OpenSource ou ShareWare.

    J'avais un projet similaire il y a 2-3 ans mais j'ai vite abandonné car trop d'investissement personnel (surtout quand on le fait tout seul)...

    Sinon je pense que delphi devrais te permettre de réaliser ce logiciel mais est-ce encore un langage d'avenir....
    Moi-même j'utilise delphi depuis 7 ans et si je devais réaliser un tel logiciel le pense que je m'orrienterais vers du C#.....

    Sinon si tu cherche du monde pour ton projet, je pourrais éventuellement apporter un peu ma contribution : je suis musicien depuis 15 ans (avec un très bon niveau) et Analyse Programmeur (surtout en Delphi et un peu en C#)

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 125
    Points
    15 125
    Par défaut
    Salut !

    Je rebondis sur le post de user 56qt8, à propos de Waveiox et de l'exemple "ToPCM" inclus dans le zip : ce truc fonctionne d'une manière un peu bizarre !
    • après la copie d'un fichier étalon (1 sec, stereo, 44100 Hz), je me retrouve avec un fichier raccourci de moitié ;
    • la copie de $windir\media\The Microsoft Sound.wav produit un fichier avec un sale bruit à la fin : il semblerait que l'outil ne gère pas (ou mal) les chunks DISP et/ou LIST (je n'ai pas creusé).
    Après avoir écrit ça à l'auteur :
    By the way, I also want to share my experience with waveiox.pas and ToPCM,
    which returns a wrong file, starting with "The Microsoft Sound.wav"...
    In the converted file I notice "12 00 00 00" in the "fmt" size block,
    when it should be "10 00 00 00" as seen in original file...
    sans réponse depuis un mois et demi, pour moi, Waveiox --> Recycle Bin (pas le temps de le débugger).

    HTH,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre régulier Avatar de user 56gt8
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 92
    Points
    92
    Par défaut
    c'est vrai que l'auteur ne semble par répondre aux mails , j'en ai moi même envoyé un il y quelques jours par rapport au vst sdk ...et pas de réponse.
    Cependant waveiox est utilisable.Les fichiers crées avec mon logiciel sont importables dans plusieurs logiciels de type sampleurs.

    sinon pour midi mountain c'est de nouveau online
    : midi & delphi
    il s'agit de la classe qui utilise mmsystem et qui permet de gérer le midi.
    l'exemple ne fait que du monitoring mais le fichier 'midi.pas' est réutilisable.

    comme le dit markk un truc comme Juce semble plus approprié.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    J'ai passe encore quelques heures à chercher .... et j'ai trouvé la documentation suivante sur abcplus site web
    C'est un document riche en informations qui présente un langage de notation musicale très puissant. J'adore

    Je pense ainsi avoir trouvé un premier maillon pour mon projet, mais je n'ai pas encore trouvé les outils (Delphi) pour créer un éditeur de conception graphique (solfège). Enfin je vue un ou deux logiciels (editeurs de notation) crée avec Delphi mais le graphisme n'est pas jolie de tout ... tout repose sur le GDI!

    J'ai découvert une deuxième partie de mon puzzle, c'est un éditeur de notation graphique que je trouve superbe (dans ses fonctions et la présentation graphique). Malheureusement ce logiciel ne prend pas en charge les cornemuses! Il s'appel MagicScore Maestro / Version 5. Ce logiciel m'inspire bien.

    Les composants graphiques standard de Delphi reposent sur le GDI, Graphics Device Interface, qui est très lent, et je pense que ma future application ne peut pas reposer sur ce concept!

    J'ai découvert wxWidgets qui repose surtout sur le langage C++ ..... et je suis pas sur que cella est l'outil idéal pour maîtriser la partie graphique de mon projet ?

    Je continue à chercher ......car je ne souhaite pas réinventer la roue.
    markk à écrit:
    Sinon si tu cherche du monde pour ton projet, je pourrais éventuellement apporter un peu ma contribution : je suis musicien depuis 15 ans (avec un très bon niveau) et Analyse Programmeur (surtout en Delphi et un peu en C#)
    markk, merci d'avoir proposé ton aide... je reviendra quand je vois plus clair, car côté outils (Quels utils utiliser pour dévélopper ?..) c'est encore assez flou pour moi ....

    markk à écrit:
    Ton projet c'est un FreeWare, OpenSource ou ShareWare?
    je ne sais pas encore ... il est clair si je doit y passer deux ans pour réaliser le projet il ne pourra pas être gratuit .... mais bon pourqoui pas faire deux versions, une avec les fonctions standards (gratuite) et une version avec des fonctions avancée .... Pour être franc, pour le moment je ne pense pas au côte commercial .... c'est pas encore le moment.

    J'ai oublie ... merci aussi à user 56gt8 pour le code midi ....

  11. #11
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Y'a pas un composant qui s'appelle TMidiGen par hasard ?

    Sinon, un début, inspiré du code de notre FAQ Delphi (Jouer une note sur la carte son) :

    Au départ l'idée était une sorte de mini-défi pour grands débutants, mais comme on en fera rien, je le lâche ici (profitez en bien, parce que ça se trouve, on va changer d'avis et l'enlever...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    unit UnitMusique;
     
    interface
    uses  MMSystem;
     
    const
      //Mesures
      triple_croche =93;
      double_croche = 187;
      croche34 = 281; //partition en 3:4
      croche = 375;
      noire34 = 563;    //Partition en 3:4
      noire = 750;
      blanche34 = 1125;  //Partition en 3:4
      blanche = 1500;
      ronde = 3000;
     
      //Tons, au nombre de douze, numérotés de 1 à 12
      _SI_d=1 ; _DO_=1;  //Do
      _DO_d=2;  _RE_b=2; //Do dièse et Ré bémol
      _RE_=3;           //Ré
      _RE_d=4;  _MI_b=4; //Ré dièse et Mi bémol
      _MI_=5;   _FA_b=5; //Mi et Fa bémol
      _MI_d=6;  _FA_=6;   //Mi dièse et Fa
      _FA_d=7;  _SOL_b=7; //Fa dièse et SOL bémol, etc...
      _SOL_=8;
      _SOL_d=9; _LA_b=9;
      _LA_=10;
      _LA_d=11; _SI_b=11;
      _SI_=12;  _DO_b=12;
     
    type
      TVolumeLevel = 0..127;
     
    procedure MusiqueMystere;
    implementation
     
    uses classes,dialogs,sysutils,windows,forms;
     
    procedure MakeSound(Frequence {Hz}:double; Duree{mSec}: Integer; Volume: TVolumeLevel);
    var
      WaveFormatEx: TWaveFormatEx;
      MS: TMemoryStream;
      i, TempInt, DataCount, RiffCount: integer;
      SoundValue: byte;
      w,v: double; // omega=2*pi*fréquence
    const
      Mono: Word = $0001; //Son Mono
      SampleRate: Integer = 11025; // autres taux d'échantillonnage possibles 8000, 11025, 22050, or 44100
     
      //Champs de l'en-tête d'un fichier .WAV
      RiffId: string = 'RIFF';
      WaveId: string = 'WAVE';
      FmtId: string = 'fmt ';
      DataId: string = 'data';
    begin
      //si la fréquence de la note est trop élevée par rapport au taux d'échantillonnage
      if Frequence > (0.6 * SampleRate) then
      begin
        //... on considère que la note sera injouable.
        ShowMessage(Format('Un taux d''échantillonage de %d est trop bas pour jouer une tonalité de %gHz',
          [SampleRate, Frequence]));
        Exit;
      end;
     
      with WaveFormatEx do
      begin
       //Paramètres d'un en-tête de fichier WAV au format PCM
        wFormatTag := WAVE_FORMAT_PCM;
        nChannels := Mono;
        nSamplesPerSec := SampleRate;
        wBitsPerSample := $0008;
        nBlockAlign := (nChannels * wBitsPerSample) div 8;
        nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
        cbSize := 0;
      end;
     
      MS := TMemoryStream.Create;
      with MS do
      begin
        //Calcule la longueur des données du son à jouer et celle du fichier WAV qui en découle
        DataCount := (Duree * SampleRate) div 1000; // sound data
        RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
          SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // données du fichier
        //écriture de l'en-tête du fichier WAV dans le flux mémoire
        Write(RiffId[1], 4); // 'RIFF'
        Write(RiffCount, SizeOf(DWORD)); // taille du fichier
        Write(WaveId[1], Length(WaveId)); // 'WAVE'
        Write(FmtId[1], Length(FmtId)); // 'fmt '
        TempInt := SizeOf(TWaveFormatEx);
        Write(TempInt, SizeOf(DWORD)); // taille de TWaveFormat
        Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // taille d'un enregistrement WaveFormatEx
        Write(DataId[1], Length(DataId)); // 'data'
        Write(DataCount, SizeOf(DWORD)); // taille des données du son
        //calcule et écrit le signal sonore
        // calcul des valeurs qui composent le son,
        // c'est une courbe sinusoïdale dont les valeurs sont comprises entre 0 et 255,
        //donc l'axe médian de la sinusoïde est en y=127)
        w := 2 * Pi * Frequence; // omega
        v:=0.05;
        for i := 0 to DataCount - 1 do
        begin
          //enveloppe d'attaque
          if (i<19) then v:=v+0.05;
              //enveloppe de descente
          if (i>(DataCount-19)) then v:=v-0.05;
     
          SoundValue := 127 + trunc(v*Volume * sin(i * w / SampleRate));  // explication : wt = w * i / SampleRate
         //on écrit notre "point" de la courbe dans notre fichier WAV
          Write(SoundValue, SizeOf(Byte));
        end;
        //Maintenant on joue le son en disant à Windows :
        //-SND_MEMORY : c'est un son écrit dans un flux mémoire
        //-SND_SYNC : de jouer le son de façon synchrone (tant que le son n'est pas terminé, le code ne se déroule plus.
    	// Ainsi, un deuxième appel consécutif à notre procédure ne "coupera pas le sifflet" du premier appel.
        sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
        MS.Free;
      end;
    end;
     
    procedure Pause(const nDuree: Cardinal);
    var
      Tc: Cardinal;
    begin
      Tc :=  GetTickCount;
      repeat
        Application.ProcessMessages;
        Sleep(1);
      until Cardinal(GetTickCount - Tc) > nDuree;
    end;
     
    //calcule 2^n, n peut être un réel
    function DeuxPuissance(n:double):double;
    begin
      result:=Exp(n*Ln(2));
    end;
     
    procedure Jouer(Ton,Octave,Duree:Integer);
    const ref=440;
    var F:double;
    begin
      //Calcul de la fréquence de la note, en fonction du ton et de l'octave
      f:=ref*DeuxPuissance((Octave-3)+(Ton-10)/12);
      MakeSound(f,Duree,127);
      Pause(20);
    end;
     
    procedure MusiqueMystere;
    begin
          Jouer (_DO_,4,noire);
          Jouer (_SOL_,4,noire);
          Jouer (_FA_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
     
          Jouer (_DO_,5,noire);
          Jouer (_SOL_,4,noire);
          Jouer (_FA_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
     
          Jouer (_DO_,5,noire);
          Jouer (_SOL_,4,noire);
          Jouer (_FA_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_FA_,4,triple_croche);
     
          Jouer (_RE_,4,noire);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_DO_,4,noire);
     
          Jouer (_SOL_,4,noire);
          Jouer (_FA_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
          Jouer (_DO_,5,noire);
     
          Jouer (_SOL_,4,noire);
          Jouer (_FA_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
          Jouer (_DO_,5,noire);
     
          Jouer (_SOL_,4,noire);
          Jouer (_LA_d,4,triple_croche);
          Jouer (_LA_,4,triple_croche);
          Jouer (_LA_d,4,triple_croche);
          Jouer (_SOL_,4,noire);
     
          Jouer (_SOL_,4,noire);
          Jouer (_SOL_,3,noire);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_LA_,3,noire34);
          Jouer (_LA_,3,double_croche);
     
          Jouer (_FA_,4,double_croche);
          Jouer (_MI_,4,double_croche);
          Jouer (_RE_,4,double_croche);
          Jouer (_DO_,4,double_croche);
          Jouer (_DO_,4,triple_croche);
     
          Jouer (_RE_,4,triple_croche);
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
          Jouer (_LA_,3,double_croche);
          Jouer (_SI_,3,croche);
     
          Jouer (_SOL_,3,croche34);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_LA_,3,noire34);
          Jouer (_LA_,3,double_croche);
          Jouer (_FA_,4,double_croche);
     
          Jouer (_MI_,4,double_croche);
          Jouer (_RE_,4,double_croche);
          Jouer (_DO_,4,double_croche);
          Jouer (_SOL_,4,double_croche);
          Jouer (_RE_,4,noire34);
     
          Jouer (_SOL_,3,croche34);
          Jouer (_SOL_,3,triple_croche);
          Jouer (_LA_,3,noire34);
          Jouer (_LA_,3,double_croche);
          Jouer (_FA_,4,double_croche);
     
          Jouer (_MI_,4,double_croche);
          Jouer (_RE_,4,double_croche);
          Jouer (_DO_,4,double_croche);
          Jouer (_DO_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
     
          Jouer (_MI_,4,triple_croche);
          Jouer (_RE_,4,triple_croche);
          Jouer (_LA_,3,double_croche);
          Jouer (_SI_,3,croche);
          Jouer (_SOL_,4,croche34);
     
          Jouer (_SOL_,4,triple_croche);
          Jouer (_DO_,5,croche34);
          Jouer (_LA_d,4,triple_croche);
          Jouer (_SOL_d,4,croche34);
          Jouer (_SOL_,4,triple_croche);
     
          Jouer (_FA_,4,croche34);
          Jouer (_RE_d,4,triple_croche);
          Jouer (_RE_,4,croche34);
          Jouer (_DO_,4,croche34);
          Jouer (_SOL_,4,noire);
     
          Jouer (_SOL_,4,croche34);
          Jouer (_SOL_,4,triple_croche);
          Jouer (_SOL_,4,triple_croche);
          Jouer (_SOL_,4,triple_croche);
          Jouer (_SOL_,4,triple_croche);
     
          Jouer (_DO_,5,double_croche);
          Jouer (_DO_,4,triple_croche);
          Jouer (_DO_,4,triple_croche);
          Jouer (_DO_,4,triple_croche);
          Jouer (_DO_,4,noire34);
    end;
     
    end.
    Le passage de la partition à la musique est tout fait ... Par contre, coté instruments, ce n'est pas du MIDI
    Bidouilleuse Delphi

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Ahhhh waskol Jolie code ....

    Et merci cela donne des idées ....

    Merci pour le geste

  13. #13
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Didier100
    Ahhhh waskol Jolie code ....

    Et merci cela donne des idées ....

    Merci pour le geste
    De rien
    Bidouilleuse Delphi

  14. #14
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Pour info, L'idée du mini-défi avec ce code était de le proposer en plusieurs morceaux façon Puzzle, les compétiteurs devaient le remettre dans l'ordre, puis dire de quelle musique mystère il s'agissait et finalement de proposer la leur.
    Bidouilleuse Delphi

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Autre précision, il serait tout à fait possible de synthétiser différents instruments de musique, ça se passe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    w := 2 * Pi * Frequence; // omega
        v:=0.05;
        for i := 0 to DataCount - 1 do
        begin
          //enveloppe d'attaque
          if (i<19) then v:=v+0.05;
              //enveloppe de descente
          if (i>(DataCount-19)) then v:=v-0.05;
     
          SoundValue := 127 + trunc(v*Volume * sin(i * w / SampleRate));  // explication : wt = w * i / SampleRate
         //on écrit notre "point" de la courbe dans notre fichier WAV
          Write(SoundValue, SizeOf(Byte));
        end;
    Ici on sort un signal bêtement sinusoîdal.
    Pour synthétiser un son, il suffit de rajouter une seconde harmonique, voir une troisieme, modifier l'enveloppe, etc...
    Mais là je ne suis pas suffisemment calé pour savoir quelle genre de fonction synthétise mieux un violon ou un piano
    Bidouilleuse Delphi

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Waskol à écrit:

    Pour info, L'idée du mini-défi avec ce code était de le proposer en plusieurs morceaux façon Puzzle, les compétiteurs devaient le remettre dans l'ordre, puis dire de quelle musique mystère il s'agissait et finalement de proposer la leur.
    Interessant comme idée, surtout le coté ludique!

  17. #17
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    En tout cas, je viens brillemment de griller l'une de mes cartouches pour les défis futurs...
    Bidouilleuse Delphi

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    J'ai découvert un autre format de notation de musique qui me semble interessant: MusicXML

    Plus d'informations sur http://www.musicxml.org/xml/faq.html.

    Je continu à chercher un editeur visuel pour afficher (placer) les notes sur une fiche... Je toujour rien trouvé que me conviens pour Delphi (7)....

    Si non, il y à également quelques informations interessantes sur http://www.quintet-net.org/info/Auto...omposition.pdf

  19. #19
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Didier100
    Je continu à chercher un editeur visuel pour afficher (placer) les notes sur une fiche... Je toujour rien trouvé que me conviens pour Delphi (7)..../url]
    y'a pas une police de caractères qui existe ? On pourrait peut être en faire quelque chose...
    Bidouilleuse Delphi

  20. #20
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Bidouilleuse Delphi

Discussions similaires

  1. Projet création logiciel
    Par shmouki dans le forum Autres
    Réponses: 0
    Dernier message: 30/10/2010, 00h50
  2. [Projet] Création d'un cms
    Par Legenyes dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/02/2006, 16h42
  3. La question de création d'un logiciel ?
    Par Jean-Michel dans le forum Structure
    Réponses: 16
    Dernier message: 26/08/2005, 15h18
  4. Conseils pour la création d'un logiciel de newsletters
    Par zizou39 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 18/02/2005, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo