//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); }
public void Dispose() { try { CompositionTarget.Rendering -= OnRender; this.LoadedFile = null; } catch { } }
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; }
//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 }
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"); } } }