Ejemplo n.º 1
0
    void MIDISongListener.OnSongChanged(MIDISong song)
    {
        if (song == null)
        {
            return;
        }

        m_song = song;

        Restart();
    }
Ejemplo n.º 2
0
    static private float m_defaultMicrosecondsPerQuarterNote = 500000.0f; // 120 beats per minute

    static public MIDISong Read(TextAsset midiFile)
    {
        m_song     = new MIDISong();
        m_midiData = midiFile.bytes;
        m_index    = 0;

        ReadHeader();
        ReadTracks();
        CalcEventTimestamps();
        CalcMeasureTimestamps();

        return(m_song);
    }
Ejemplo n.º 3
0
        private void CreateMidi(string trackName, int[] notes, int tempo, int[] instruments, int[] durations, string fileName)
        {
            MIDISong song = new MIDISong();

            song.AddTrack(trackName);
            song.SetTimeSignature(0, 4, 4);
            song.SetTempo(0, m_nBeats[tempo]);

            for (int channel = 0; channel < instruments.Length; channel++)
            {
                song.SetChannelInstrument(0, channel, instruments[channel]);
                foreach (int duration in durations)
                {
                    for (int i = 0; i < notes.Length; i++)
                    {
                        int noteNumber = notes[i];
                        noteNumber += 12 * (6 + (channel % 2));
                        song.AddNote(0, channel, noteNumber, duration);
                    }
                }
            }


            try
            {
                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();
                FileInfo FI = new FileInfo(fileName + ".mid");
                if (!FI.Directory.Exists)
                {
                    FI.Directory.Create();
                }
                FileStream objWriter = File.Create(FI.FullName);
                objWriter.Write(dst, 0, dst.Length);
                objWriter.Close();
                objWriter.Dispose();
                objWriter = null;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Ejemplo n.º 4
0
    public void SetSong(MIDISong song)
    {
        m_song = song;

        m_nextEventIndexList = new List <int>();
        foreach (MIDITrack track in m_song.tracks)
        {
            m_nextEventIndexList.Add(0);
        }

        NotifySongChanged();

        Stop();
    }
Ejemplo n.º 5
0
    void Start()
    {
        MIDISong song = MIDIFileReader.Read(m_midiFile);

        m_songPlayer = new MIDISongPlayer();
        m_songPlayer.SetSong(song);
        m_songPlayer.SetSpeedFactor(1.0f);

        m_songPlayer.RegisterSongListener(m_songVisualizer.GetComponent <MIDISongVisualizer>());

        m_songPracticeMode = new MIDISongPracticeMode(m_songPlayer);
        m_songPlayer.RegisterSongListener(m_songPracticeMode);
        m_midiDevice.GetComponent <MIDIDevice>().RegisterDeviceListener(m_songPracticeMode);
        m_songPracticeMode.Disable();

        m_songPerformanceFeedback = new MIDISongPerformanceFeedback(m_songVisualizer.GetComponent <MIDISongVisualizer>());
        m_songPlayer.RegisterSongListener(m_songPerformanceFeedback);
        m_midiDevice.GetComponent <MIDIDevice>().RegisterDeviceListener(m_songPerformanceFeedback);
    }
Ejemplo n.º 6
0
        //  Ecriture musique dans fichier temporaire
        private void WriteMusic(Individu individu, int numeroPiste)
        {
            // 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, tempo);

            //  Récupération du tableau contenant les notes de musique
            int[] tabMusique = individu.GetNotesDeMusique();

            //  Récupération du type d'instrument dans l'individu présent dans la population
            int instrument = individu.GetTypeInstrument();

            song.SetChannelInstrument(0, 0, instrument);

            //  Ajout des notes une à une dans la piste son
            for (int i = 0; i < numberIndividu; i++)
            {
                song.AddNote(0, 0, tabMusique[i], lengthNote);
            }

            // 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();
            ms.Close();

            FileStream objWriter = File.Create(directory + "/piste" + numeroPiste + ".midi");

            objWriter.Write(src, 0, src.Length);
            objWriter.Close();
            objWriter.Dispose();
            objWriter = null;
        }
Ejemplo n.º 7
0
        public static void Main(string[] args)
        {
            /*var hip = new JHPlayer();
             * using(var stream = new FileStream("hipc.Title", FileMode.Open))
             * {
             *      hip.loader(stream);
             *      var mid = new MIDISong();
             *      for(int i = 0; i < 4; i++) mid.AddTrack();
             *
             * }*/

            var hip  = HippelCosoFile.Open("hipc.City_Walk", null);
            var song = new MIDISong();

            for (int i = 0; i < 4; i++)
            {
                var track = song.AddTrack(null);
                song.SetTempo(track, 3000 / hip.Songs[0].Speed);
                song.SetTimeSignature(track, 4, 4);
            }

            /*for(int i = 0; i < hip.Voices.Length/4; i++)
             * {
             *      for(int j = 0; j < 4; j++)
             *      {
             *              var voice = hip.Voices[i*4+j];
             *              int vsize = 12;
             *              for(int k = 0; k < vsize; k++)
             *              {
             *                      int note = hip.Patterns[voice.PatternAddress*vsize+k].Note*2;
             *                      //if(note <= 5) note = 0;
             *                      song.AddNote(j, 0, note-1, 12);
             *              }
             *      }
             * }*/

            for (int i = 0; i < hip.Patterns.Length; i++)
            {
                int note = hip.Patterns[i].Note;
                song.AddNote(0, 0, note * 2 - 1, 12);
            }

            using (var stream = new FileStream("hip.mid", FileMode.Create))
            {
                song.Save(stream);
            }

            return;

            var cfg = ReadConfig();

            Console.WriteLine("AmiMus v" + Assembly.GetExecutingAssembly().GetName().Version.ToString(2));
            Console.WriteLine("Created by [email protected]");
            if (args.Length != 2)
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("  amimus [input] [output]");
                Console.WriteLine("Example:");
                Console.WriteLine("  amimus [sa.Song1] [Song1.mid]");
                Console.WriteLine("Currently supported formats:");
                Console.WriteLine("Input - Sonic Arranger (classic or with replayer)");
                Console.WriteLine("Output - MIDI");
            }
            else
            {
                SA2MIDI(args[0], args[1]);
                Console.WriteLine("Song converted.");
            }
        }
 void MIDISongListener.OnSongChanged(MIDISong song)
 {
     m_song = song;
     Reset();
 }
Ejemplo n.º 9
0
 void MIDISongListener.OnSongChanged(MIDISong song)
 {
     Reset();
 }
Ejemplo n.º 10
0
        public MIDISong ToMidi(Dictionary <string, int> instrumentMap, int songId = 0)
        {
            var inst = Instruments;
            var ovtb = Voices;
            var stbl = Songs[songId];
            var notb = Notes;
            var song = new MIDISong();

            for (int i = 0; i < 4; i++)
            {
                var track = song.AddTrack(null);
                song.SetTempo(track, 3000 / stbl.SongSpeed);
                song.SetTimeSignature(track, 4, 4);
            }
            for (int i = 0; i < inst.Length; i++)
            {
                var instr = inst[i];
                int minst;
                if (!instrumentMap.TryGetValue(instr.Name, out minst))
                {
                    Console.WriteLine("Unknown instrument " + instr.Name);
                }
                else
                {
                    Console.WriteLine(minst + " set for " + instr.Name);
                }
                if (i < 15 && i != 9)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        if (minst != -1)
                        {
                            song.SetChannelInstrument(j, i, minst);
                        }
                    }
                }
            }

            int lastinstr = Int32.MinValue;

            for (int i = stbl.StartPos; i <= stbl.StopPos; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    var voice = ovtb[i * 4 + j];
                    for (int k = 0; k < stbl.PatternLength; k++)
                    {
                        var note = notb[voice.NoteAddress + k];
                        if (note.Command == 15)
                        {
                            for (int l = 0; l < 4; l++)
                            {
                                song.SetTempo(l, 3000 / note.CommandInfo);
                            }
                        }
                        int instr = note.Instrument - 1;
                        if (instr >= 0)
                        {
                            if (instr == 9 || instr >= 15)
                            {
                                if (lastinstr != instr)
                                {
                                    int minst;
                                    instrumentMap.TryGetValue(inst[instr].Name, out minst);
                                    song.SetChannelInstrument(j, 15, minst);
                                    lastinstr = instr;
                                }
                                song.AddNote(j, 15, note.Value - 1, 12);
                            }
                            else
                            {
                                song.AddNote(j, instr, note.Value - 1, 12);
                            }
                        }
                        else
                        {
                            song.AddNote(j, 0, -1, 12);
                        }
                    }
                }
            }
            return(song);
        }