Beispiel #1
0
        //turn hue to sound
        private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
        {
            var      backgroundWorker = sender as BackgroundWorker;
            MIDIFile m = new MIDIFile();

            int[,] note = toNormalizedHue(imagePath);
            m.setVolume(127);
            int noOfSteps          = note.GetLength(0) * note.GetLength(1);
            int reportProgressStep = noOfSteps / 100 + 1;
            int step = 0;

            for (int i = 0; i < note.GetLength(0); i++)
            {
                for (int j = 0; j < note.GetLength(1); j++)
                {
                    m.addNote(note[i, j]); //create MIDI file of notes acquired from the hue channel of the image
                    step++;
                    if (step % reportProgressStep == 0)
                    {
                        backgroundWorker.ReportProgress(step / reportProgressStep);
                    }
                }
            }
            m.createMIDIFile("test"); //create MIDI file
            backgroundWorker.ReportProgress(100);
            musicFilePath = Directory.GetCurrentDirectory() + "\\test.mid";
        }
        public void WriteJournal(System.IO.Stream s, Journal j, int[] eventIDs, int[] commentIDs, bool header, bool footer)
        {
            MIDIFile m = new MIDIFile();
            Track    t = new Track();

            t.Events.Add(new TimeSignature(0, 4, 4, 24, 8));
            t.Events.Add(new ProgramChange(0, 1, (byte)settings.Program));
            foreach (Journal.EventsRow er in j.Events)
            {
                if (eventIDs != null && !((IList)eventIDs).Contains(er.ID))
                {
                    continue;
                }
                string text     = string.Empty;
                char   lastChar = (char)32;
                if (!er.IsBodyNull())
                {
                    text += r.Replace(er.Body, string.Empty);
                }
                if (!er.IsSubjectNull())
                {
                    text += " " + r.Replace(er.Subject, string.Empty);
                }
                foreach (Journal.CommentsRow cr in j.Comments.Select("JItemID = " + er.ID.ToString()))
                {
                    if (commentIDs != null && !((IList)commentIDs).Contains(cr.ID))
                    {
                        continue;
                    }
                    if (!cr.IsBodyNull())
                    {
                        text += r.Replace(cr.Body, string.Empty);
                    }
                    if (!cr.IsSubjectNull())
                    {
                        text += " " + r.Replace(cr.Subject, string.Empty);
                    }
                }
                foreach (char c in text.ToCharArray())
                {
                    if (c > 32 && c < 160)
                    {
                        t.Events.Add(new NoteOn(settings.NoteLength, 1, (byte)(c - 32), 127));
                        t.Events.Add(new NoteOff(settings.NoteLength, 1, (byte)(c - 32), 127));
                        lastChar = c;
                    }
                }
                t.Events.Add(new NoteOn(settings.NoteLength, 1, (byte)(lastChar - 32), 0));
                if (settings.PauseBetweenEntries)
                {
                    t.Events.Add(new AllNotesOff(settings.NoteLength * 100 > 1000 ? 1000 : settings.NoteLength * 100, 1));
                }
            }
            t.Events.Add(new EndofTrack(settings.NoteLength));
            m.Chunks.Add(t);
            m.WriteMIDI(s);
        }
Beispiel #3
0
 public void Dispose()
 {
     try
     {
         CompositionTarget.Rendering -= OnRender;
         this.LoadedFile              = null;
     }
     catch { }
 }
Beispiel #4
0
        void ContinueLoading()
        {
            if (loading)
            {
                return;
            }
            loading = true;
            Keyboard.ClearFocus();
            loadSettingsScreen.Visibility = Visibility.Collapsed;
            loadProgessScreen.Visibility  = Visibility.Visible;
            LoadedFile = new MIDINoteFile(filepath, loaderSettings, cancel.Token);
            LoadedFile.ParseFinished += () =>
            {
                Dispatcher.InvokeAsync(() =>
                {
                    ParseFinished?.Invoke();
                }).Task.GetAwaiter().GetResult();
            };
            LoadedFile.ParseCancelled += () =>
            {
                Dispose();
                Dispatcher.InvokeAsync(() =>
                {
                    ParseCancelled?.Invoke();
                }).Task.GetAwaiter().GetResult();
            };
            Task.Run(() =>
            {
                try
                {
                    LoadedFile.Parse();
                }
                catch (Exception e)
                {
                    Dispatcher.InvokeAsync(() =>
                    {
                        MessageBox.Show(e.Message, "Couldn't load midi file", this);
                        ParseCancelled?.Invoke();
                    }).Task.GetAwaiter().GetResult();
                }
            });

            rotateStoryboard.Children.Add(rotate);
            Storyboard.SetTarget(rotate, rotateLogo);
            Storyboard.SetTargetProperty(rotate, new PropertyPath("(Image.RenderTransform).(RotateTransform.Angle)"));

            CompositionTarget.Rendering += OnRender;
        }
Beispiel #5
0
        //turn hue to sound
        static void imageToSound(string path) //path to image
        {
            MIDIFile m = new MIDIFile();


            int[,] note = toNormalizedHue(path);

            m.setVolume(127);
            for (int i = 0; i < note.GetLength(0); i++)
            {
                for (int j = 0; j < note.GetLength(1); j++)
                {
                    m.addNote(note[i, j]); //create MIDI file of notes acquired from the hue channel of the image
                }
            }
            m.createMIDIFile("test"); //create MIDI file
        }
Beispiel #6
0
        static void Parse(string midiFile)
        {
            var file = new MIDIFile(midiFile);

            Console.WriteLine("MIDI Header");
            Console.WriteLine("-----------");
            Console.WriteLine($"Chunk Type: MThd, Size: {file.Header.Size.ToString()}, " +
                              $"Format: {file.Header.Format.ToString("X2")}, NTRKS: {file.Header.NumberOfTracks.ToString("X2")}, " +
                              $"Division: {file.Header.Division.ToString("X2")}");

            Console.WriteLine();
            foreach (var track in file.TrackChunks)
            {
                Console.WriteLine($"Track ({track.Name} - {track.Channel}), Size: {track.Size}, Total Events: {track.MTrkEvents.Count()}" +
                                  $" Total Delta: {track.MTrkEvents.Sum(x => x.DeltaTimeNormal).ToString()}");

                // if (track.MTrkEvents.Sum(x => x.DeltaTimeNormal) > 1000000)
                foreach (var ev in track.MTrkEvents)
                {
                    Console.WriteLine($"\tEvent: {ev.Event.GetType().Name} \tDelta: {BitConverter.ToString(ev.DeltaTime).Replace("-", "")}\t");
                }
            }
        }