예제 #1
0
        // Méthode principale
        void CreateAndPlayMusic(int songNumber, bool onlyRecord)
        {
            // s'il y a un fichier en cours de lecture on l'arrête
            if (isPlaying)
            {
                mplayer.Stop();
                mplayer.Close();
                isPlaying = false;
            }
            // Générateur aléatoire

            Individu individu = population.Individus[songNumber];
            // 1) Créer le fichier MIDI
            // a. Créer un fichier et une piste audio ainsi que les informations de tempo
            MIDISong song = new MIDISong();
            song.AddTrack("Piste1");
            song.SetTimeSignature(0, 4, 4);
            song.SetTempo(0, individu.Tempo);

            // b. Choisir un instrument entre 1 et 128
            // Liste complète ici : http://fr.wikipedia.org/wiki/General_MIDI

            song.SetChannelInstrument(0, 0, individu.Instrument);

            // c. Ajouter des notes
            foreach(Note note in individu.Genes)
                song.AddNote(0, 0, note.Valeur, note.Duration);

            // d. Enregistrer le fichier .mid (lisible dans un lecteur externe par exemple)
            // on prépare le flux de sortie
            MemoryStream ms = new MemoryStream();
            song.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            byte[] src = ms.GetBuffer();
            byte[] dst = new byte[src.Length];
            for (int i = 0; i < src.Length; i++)
                dst[i] = src[i];

            ms.Close();
            // et on écrit le fichier
            try
            {
                strFileName = "Fichier" + nbFile + ".mid";
                FileStream objWriter = File.Create(strFileName);
                objWriter.Write(dst, 0, dst.Length);
                objWriter.Close();
                objWriter.Dispose();
                objWriter = null;
            }
            catch (Exception E)
            {
                MessageBox.Show("Veuillez fermer la mélodie qui est en cours de lecture", "Erreur", MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
            if (!onlyRecord) {
                // 2) Jouer un fichier MIDI
                mplayer.Open(new Uri(strFileName, UriKind.Relative));
                nbFile++;
                isPlaying = true;
                mplayer.Play();
            }
        }
예제 #2
0
        // Méthode principale
        void CreateAndPlayMusic(int songNumber, bool onlyRecord)
        {
            // s'il y a un fichier en cours de lecture on l'arrête
            if (isPlaying)
            {
                mplayer.Stop();
                mplayer.Close();
                isPlaying = false;
            }
            // Générateur aléatoire

            Individu individu = population.Individus[songNumber];
            // 1) Créer le fichier MIDI
            // a. Créer un fichier et une piste audio ainsi que les informations de tempo
            MIDISong song = new MIDISong();

            song.AddTrack("Piste1");
            song.SetTimeSignature(0, 4, 4);
            song.SetTempo(0, individu.Tempo);

            // b. Choisir un instrument entre 1 et 128
            // Liste complète ici : http://fr.wikipedia.org/wiki/General_MIDI

            song.SetChannelInstrument(0, 0, individu.Instrument);

            // c. Ajouter des notes
            foreach (Note note in individu.Genes)
            {
                song.AddNote(0, 0, note.Valeur, note.Duration);
            }

            // d. Enregistrer le fichier .mid (lisible dans un lecteur externe par exemple)
            // on prépare le flux de sortie
            MemoryStream ms = new MemoryStream();

            song.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            byte[] src = ms.GetBuffer();
            byte[] dst = new byte[src.Length];
            for (int i = 0; i < src.Length; i++)
            {
                dst[i] = src[i];
            }

            ms.Close();
            // et on écrit le fichier
            try
            {
                strFileName = "Fichier" + nbFile + ".mid";
                FileStream objWriter = File.Create(strFileName);
                objWriter.Write(dst, 0, dst.Length);
                objWriter.Close();
                objWriter.Dispose();
                objWriter = null;
            }
            catch (Exception E)
            {
                MessageBox.Show("Veuillez fermer la mélodie qui est en cours de lecture", "Erreur", MessageBoxButton.OK,
                                MessageBoxImage.Error);
            }
            if (!onlyRecord)
            {
                // 2) Jouer un fichier MIDI
                mplayer.Open(new Uri(strFileName, UriKind.Relative));
                nbFile++;
                isPlaying = true;
                mplayer.Play();
            }
        }