public TracksToIgnore(Int32 TracksCount) { InitializeComponent(); Text = Languages.Parse("TracksToIgnoreTitle"); for (int i = 0; i < TracksCount; i++) { BASS_MIDI_MARK[] TracksText = BassMidi.BASS_MIDI_StreamGetMarks(MainWindow.KMCGlobals._recHandle, i, BASSMIDIMarker.BASS_MIDI_MARK_TRACK); UInt64 NoteCountTrack = (UInt64)BassMidi.BASS_MIDI_StreamGetEvents(MainWindow.KMCGlobals._recHandle, i, BASSMIDIEvent.MIDI_EVENT_NOTES, null); if (TracksText != null) { TracksCheckboxes.Items.Add(String.Format("Track {0} - {1} (Notes count: {2})", i + 1, TracksText[0].ToString(), NoteCountTrack), false); } else { TracksCheckboxes.Items.Add(String.Format("Track {0} - No text (Notes count: {1})", i + 1, NoteCountTrack), false); } } }
public static void PBWork(object sender, DoWorkEventArgs e) { try { try { BasicFunctions.PlayConversionStart(); // First of all, initialize BASS itself BASSControl.BASSInitSystem(true); BASSControl.InitializeDummyVSTs(); foreach (String MIDI in MainWindow.KMCGlobals.MIDIs) { // Initialize BASS stream BASSControl.BASSStreamSystem(MIDI, true); BASSControl.BASSLoadSoundFonts(MIDI); BASSControl.BASSInitVSTiIfNeeded(true); BASSControl.InitializeVSTsForStream(); BASSControl.BASSEffectSettings(); BASSControl.BASSVolumeSlideInit(); // Get length of the stream Int64 Position = Bass.BASS_ChannelGetLength(MainWindow.KMCGlobals._recHandle); Int64 Length = Convert.ToInt64(Bass.BASS_ChannelSeconds2Bytes(MainWindow.KMCGlobals._recHandle, 0.0275)); // Notes stuff MainWindow.KMCStatus.PlayedNotes = 0; if (!MainWindow.KMCGlobals.DoNotCountNotes) { try { MainWindow.KMCGlobals._mySync = new SYNCPROC(BASSControl.NoteSyncProc); Bass.BASS_ChannelSetSync(MainWindow.KMCGlobals._recHandle, BASSSync.BASS_SYNC_MIDI_EVENT, (Int64)BASSMIDIEvent.MIDI_EVENT_NOTE, MainWindow.KMCGlobals._mySync, IntPtr.Zero); MainWindow.KMCStatus.TotalNotesOrg = (UInt64)BassMidi.BASS_MIDI_StreamGetEvents(MainWindow.KMCGlobals._recHandle, -1, (BASSMIDIEvent)0x20000, null); MainWindow.KMCStatus.TotalNotes = MainWindow.KMCStatus.TotalNotesOrg; } catch (Exception ex) { BasicFunctions.WriteToConsole(ex); MainWindow.KMCGlobals.DoNotCountNotes = true; } } // KMC is now busy MainWindow.KMCStatus.IsKMCNowExporting = true; BassWasapi.BASS_WASAPI_Start(); while (CheckStreamStatus() != BASSActive.BASS_ACTIVE_STOPPED) { if (MainWindow.KMCGlobals.CancellationPendingValue != MainWindow.KMCConstants.CANCELLED_BY_USER) { BASSControl.BASSPlayBackEngine(Length, Position); } else { break; } TimerFuncs.MicroSleep(-1); } BASSControl.ReleaseResources( (MainWindow.KMCGlobals.CancellationPendingValue != MainWindow.KMCConstants.CANCELLED_BY_USER), (MainWindow.KMCGlobals.CancellationPendingValue == MainWindow.KMCConstants.CANCELLED_BY_USER) ); if (MainWindow.KMCGlobals.CancellationPendingValue == MainWindow.KMCConstants.CANCELLED_BY_USER) { break; } } MainWindow.KMCStatus.RenderingMode = false; MainWindow.KMCStatus.IsKMCBusy = false; MainWindow.KMCStatus.IsKMCNowExporting = false; MainWindow.KMCGlobals.VSTSkipSettings = false; String Msg = (MainWindow.KMCGlobals.CancellationPendingValue == MainWindow.KMCConstants.CANCELLED_BY_USER) ? "PlaybackAborted" : "PlaybackCompleted"; BASSControl.BASSCloseStream(Languages.Parse(Msg), Languages.Parse(Msg), 0); BasicFunctions.PlayConversionStop(); } catch (Exception exception) { BasicFunctions.WriteToConsole(exception); BASSControl.ReleaseResources(false, true); } } catch (Exception exception2) { BASSControl.BASSCloseStreamException(exception2); } }
private void FrameConverter_DoWork(object sender, DoWorkEventArgs e) { try { // Initialize BASS and variables Bass.BASS_Init(0, 44100, BASSInit.BASS_DEVICE_NOSPEAKER, IntPtr.Zero); Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_MIDI_VOICES, 0); Data.StreamHandle = BassMidi.BASS_MIDI_StreamCreateFile(Data.MIDIToLoad, 0L, 0L, BASSFlag.BASS_MIDI_NOCROP | BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_MIDI_DECAYEND, 0); Data.PlayedNotesAvg = new List <Double>(); // Check if the MIDI file is valid BASSError Error = Bass.BASS_ErrorGetCode(); if (Error == BASSError.BASS_ERROR_ILLPARAM || Error == BASSError.BASS_ERROR_FILEOPEN || Error == BASSError.BASS_ERROR_FILEFORM) { MessageBox.Show("Invalid MIDI file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Settings.Interrupt = true; return; } Data.OsuemSize = Properties.Settings.Default.CounterFont.Size; Int64 StreamLength = Bass.BASS_ChannelGetLength(Data.StreamHandle); Int32 ChunkLength = Convert.ToInt32(Bass.BASS_ChannelSeconds2Bytes(Data.StreamHandle, FFMPEGProcess.Hertz)); Byte[] Buffer; // Initialize played notes sync Data.NoteSync = new SYNCPROC(NoteSyncProc); Bass.BASS_ChannelSetSync(Data.StreamHandle, BASSSync.BASS_SYNC_MIDI_EVENT, (long)BASSMIDIEvent.MIDI_EVENT_NOTE, Data.NoteSync, IntPtr.Zero); // Initialize time signature sync BassMidi.BASS_MIDI_StreamGetMark(Data.StreamHandle, BASSMIDIMarker.BASS_MIDI_MARK_TIMESIG, 0, Data.Mark); Data.TimeSigSync = new SYNCPROC(TimeSigSyncProc); Bass.BASS_ChannelSetSync(Data.StreamHandle, BASSSync.BASS_SYNC_MIDI_TIMESIG, (long)BASSMIDIMarker.BASS_MIDI_MARK_TIMESIG, Data.TimeSigSync, IntPtr.Zero); // Initialize note count Data.TotalNotes = Convert.ToUInt32(BassMidi.BASS_MIDI_StreamGetEvents(Data.StreamHandle, -1, (BASSMIDIEvent)0x20000, null)); Data.HowManyZeroesNotes = String.Concat(Enumerable.Repeat("0", Data.TotalNotes.ToString().Length)); // Initialize conversion if (!StartConversion(Data.MIDIToLoad)) { return; } FPSUpdate(); if (Properties.Settings.Default.StillFramesBeginning) { for (int a = 0; a <= (Properties.Settings.Default.FPSExport * 5); a++) { // 5 seconds of nothing if (Settings.Interrupt == true) { break; } CheckPosition(); Data.NotesPerSecond = "0"; PushFrame(false); FFMPEGProcess.Frames++; FPSUpdate(); } } while (Bass.BASS_ChannelIsActive(Data.StreamHandle) == BASSActive.BASS_ACTIVE_PLAYING) { if (Data.OsuemSize > Properties.Settings.Default.CounterFont.Size) { Data.OsuemSize -= (Properties.Settings.Default.CounterFont.Size / 24); if (Data.OsuemSize < Properties.Settings.Default.CounterFont.Size) { Data.OsuemSize = Properties.Settings.Default.CounterFont.Size; } } else { Data.OsuemSize = Properties.Settings.Default.CounterFont.Size; } if (Settings.Interrupt == true) { break; } Buffer = new Byte[ChunkLength]; Bass.BASS_ChannelGetData(Data.StreamHandle, Buffer, ChunkLength); CheckPosition(); if (FFMPEGProcess.Frames % (ulong)Properties.Settings.Default.FPSExport == 0) { Data.NotesPerSecond = Data.PlayedNotesFrame.ToString(); Data.PlayedNotesAvg.Add(Data.PlayedNotesFrame); Data.AverageNotesPerSecond = Data.PlayedNotesAvg.Average().ToString("0.0"); Data.PlayedNotesFrame = 0; } PushFrame(false); FFMPEGProcess.Frames++; FPSUpdate(); } Buffer = new Byte[ChunkLength]; Bass.BASS_ChannelGetData(Data.StreamHandle, Buffer, ChunkLength); if (Properties.Settings.Default.StillFramesEnd) { for (int a = 0; a <= (Properties.Settings.Default.FPSExport * 5); a++) { if (Data.OsuemSize > Properties.Settings.Default.CounterFont.Size) { Data.OsuemSize -= (Properties.Settings.Default.CounterFont.Size / 24); if (Data.OsuemSize < Properties.Settings.Default.CounterFont.Size) { Data.OsuemSize = Properties.Settings.Default.CounterFont.Size; } } else { Data.OsuemSize = Properties.Settings.Default.CounterFont.Size; } // 5 seconds of nothing if (Settings.Interrupt == true) { break; } CheckPosition(); Data.NotesPerSecond = "0"; PushFrame(false); FFMPEGProcess.Frames++; FPSUpdate(); } } for (int i = 0; i < Data.PlayedNotesChan.Length; i++) { Data.PlayedNotesChan[i] = 0; } Data.Mark = new BASS_MIDI_MARK(); FFMPEGProcess.Frames = 0; FFMPEGProcess.FFMPEG.StandardInput.Close(); Bass.BASS_StreamFree(Data.StreamHandle); Bass.BASS_Free(); Settings.Interrupt = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public static string[] GetMoreInfoMIDI(string str) { try { // Get size of MIDI long length = new System.IO.FileInfo(str).Length; string size; try { if (length / 1024f >= 1000000000) { size = ((((length / 1024f) / 1024f) / 1024f) / 1024f).ToString("0.0 TiB"); } else if (length / 1024f >= 1000000) { size = (((length / 1024f) / 1024f) / 1024f).ToString("0.0 GiB"); } else if (length / 1024f >= 1000) { size = ((length / 1024f) / 1024f).ToString("0.0 MiB"); } else if (length / 1024f >= 1) { size = (length / 1024f).ToString("0.0 KiB"); } else { size = (length).ToString("0 B"); } } catch { size = "-"; } Bass.BASS_Init(0, 4000, BASSInit.BASS_DEVICE_NOSPEAKER, IntPtr.Zero); Int32 time = BassMidi.BASS_MIDI_StreamCreateFile(str, 0L, 0L, BASSFlag.BASS_STREAM_DECODE, 0); if (time == 0) { return(null); } Int64 pos = Bass.BASS_ChannelGetLength(time); Double num9 = Bass.BASS_ChannelBytes2Seconds(time, pos); TimeSpan span = TimeSpan.FromSeconds(num9); // Get length of MIDI string Length = span.Minutes.ToString() + ":" + span.Seconds.ToString().PadLeft(2, '0') + "." + span.Milliseconds.ToString().PadLeft(3, '0'); UInt64 count = 0; Int32 Tracks = BassMidi.BASS_MIDI_StreamGetTrackCount(time); for (int i = 0; i < Tracks; i++) { count += (UInt32)BassMidi.BASS_MIDI_StreamGetEvents(time, i, BASSMIDIEvent.MIDI_EVENT_NOTES, null); } Bass.BASS_Free(); return(new string[] { Length, String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:N0}", Tracks), String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:N0}", count), size }); } catch { MessageBox.Show(String.Format(Languages.Parse("NoEnoughMemoryParseInfo"), str), Languages.Parse("Error"), MessageBoxButtons.OK, MessageBoxIcon.Information); return(new string[] { Languages.Parse("NA"), Languages.Parse("NA"), Languages.Parse("NA"), Languages.Parse("NA") }); } }
public static void BASSStreamSystemRT(String str, Boolean PreviewMode) { try { MainWindow.KMCGlobals._recHandle = BassMidi.BASS_MIDI_StreamCreateFile(str, 0L, 0L, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT, 0); BASSCheckError(); BASS_MIDI_EVENT[] eventChunk; try { // Thank you so much Falcosoft for helping me there!!! // Visit his website: http://falcosoft.hu/index.html#start MainWindow.KMCGlobals.eventc = (UInt32)BassMidi.BASS_MIDI_StreamGetEvents(MainWindow.KMCGlobals._recHandle, -1, 0, null); // Counts all the events in the MIDI MainWindow.KMCGlobals.events = new BASS_MIDI_EVENT[MainWindow.KMCGlobals.eventc]; // Creates an array with the events count as size for (int i = 0; i <= (MainWindow.KMCGlobals.eventc / 50000000); i++) { int subCount = Math.Min(50000000, (int)MainWindow.KMCGlobals.eventc - (i * 50000000)); eventChunk = new BASS_MIDI_EVENT[subCount]; BassMidi.BASS_MIDI_StreamGetEvents(MainWindow.KMCGlobals._recHandle, -1, 0, eventChunk, i * 50000000, subCount); //Falcosoft: to avoid marshalling errors pass the smaller local buffer to the function eventChunk.CopyTo(MainWindow.KMCGlobals.events, i * 50000000); //Falcosoft: copy local buffer to global one at each iteration } eventChunk = null; } catch { BASSCloseStreamException(new MIDILoadError("This MIDI is too big for the real-time conversion process.\n\nMake sure you're using the 64-bit version of the converter.")); } Bass.BASS_StreamFree(MainWindow.KMCGlobals._recHandle); MainWindow.KMCGlobals._recHandle = BassMidi.BASS_MIDI_StreamCreate(16, BASSFlag.BASS_STREAM_DECODE | (PreviewMode ? 0 : (Properties.Settings.Default.SincInter ? BASSFlag.BASS_MIDI_SINCINTER : 0)) | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_SAMPLE_SOFTWARE, 0); BASSCheckError(); if (PreviewMode) { BASS_WASAPI_DEVICEINFO infoDW = new BASS_WASAPI_DEVICEINFO(); BassWasapi.BASS_WASAPI_Init(-1, 0, 2, BASSWASAPIInit.BASS_WASAPI_BUFFER, 0, 0, null, IntPtr.Zero); BassWasapi.BASS_WASAPI_GetDevice(); BassWasapi.BASS_WASAPI_GetDeviceInfo(BassWasapi.BASS_WASAPI_GetDevice(), infoDW); BassWasapi.BASS_WASAPI_Free(); BassWasapi.BASS_WASAPI_Init(-1, infoDW.mixfreq, 2, BASSWASAPIInit.BASS_WASAPI_SHARED, infoDW.minperiod, 0, null, IntPtr.Zero); BASSCheckError(); } BASSInitializeChanAttributes(); BASSTempoAndFilter(); if (Path.GetFileNameWithoutExtension(str).Length >= 49) { MainWindow.KMCGlobals.NewWindowName = Path.GetFileNameWithoutExtension(str).Truncate(45); } else { MainWindow.KMCGlobals.NewWindowName = Path.GetFileNameWithoutExtension(str); } MainWindow.KMCGlobals._plm = new Un4seen.Bass.Misc.DSP_PeakLevelMeter(MainWindow.KMCGlobals._recHandle, 1); MainWindow.KMCGlobals._plm.CalcRMS = true; } catch (Exception ex) { BASSCloseStreamException(ex); } }