Ejemplo n.º 1
0
        public void PlayTestSong()
        {
            int stream = BassMidi.BASS_MIDI_StreamCreateFile("zumn.mid", 0, 0, 0, 0);

            BassMidi.BASS_MIDI_StreamSetFonts(stream, Fonts, 1);
            PlayInVolume(stream, true, volumeNote);
        }
Ejemplo n.º 2
0
 public void GetTags()
 {
     if (Program.mainWindow == null)
     {
         return;
     }
     try
     {
         if (Program.mainWindow.supportedModuleTypes.Contains(Path.GetExtension(filename).ToLower()))
         {
             Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
             int track = Bass.BASS_MusicLoad(filename, 0, 0, BASSFlag.BASS_MUSIC_NOSAMPLE | BASSFlag.BASS_MUSIC_PRESCAN, 0);
             title  = Bass.BASS_ChannelGetMusicName(track);
             artist = Bass.BASS_ChannelGetMusicMessage(track);
             length = (int)Bass.BASS_ChannelBytes2Seconds(track, (int)Bass.BASS_ChannelGetLength(track));
             Bass.BASS_Free();
         }
         else if (Program.mainWindow.supportedMidiTypes.Contains(Path.GetExtension(filename).ToLower()))
         {
             Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
             int track = BassMidi.BASS_MIDI_StreamCreateFile(filename, 0, 0, BASSFlag.BASS_DEFAULT, 0);
             title  = Path.GetFileName(filename);
             length = (int)Bass.BASS_ChannelBytes2Seconds(track, (int)Bass.BASS_ChannelGetLength(track));
             Bass.BASS_Free();
         }
         else
         {
             TagLib.File tagFile = TagLib.File.Create(filename);
             title = tagFile.Tag.Title;
             if (tagFile.Tag.Performers.Length > 0)
             {
                 artist = tagFile.Tag.Performers[0];
             }
             album = tagFile.Tag.Album;
             //year = tagFile.Tag.Year+"";
             //comment = tagFile.Tag.Comment;
             length  = (int)tagFile.Properties.Duration.TotalSeconds;
             bitrate = tagFile.Properties.AudioBitrate;
             tagFile.Dispose();
         }
     }
     catch (Exception)
     {
         title  = filename;
         length = 0;
     }
     if (String.IsNullOrWhiteSpace(title))
     {
         title = Path.GetFileName(filename);
     }
     try
     {
         listened = Int32.Parse(Program.mainWindow.xmlCacher.GetListened(filename));
     }
     catch (Exception)
     {
         listened = 0;
     }
 }
Ejemplo n.º 3
0
        public static long GetMIDILength(string str)
        {
            Bass.BASS_Init(0, 22050, BASSInit.BASS_DEVICE_NOSPEAKER, IntPtr.Zero);
            Int32 time = BassMidi.BASS_MIDI_StreamCreateFile(str, 0L, 0L, BASSFlag.BASS_STREAM_DECODE, 0);

            Bass.BASS_StreamFree(time);
            Bass.BASS_Free();
            return(Bass.BASS_ChannelGetLength(time));
        }
Ejemplo n.º 4
0
        private void InitializeBASSMIDIStream()
        {
            // Init stream
            ChangePreviewButtonText("Initializing stream...", false);
            ChangeWindowTitle("Initializing stream...");
            hStream = BassMidi.BASS_MIDI_StreamCreateFile(MIDIPreview, 0L, 0L,
                                                          BASSFlag.BASS_SAMPLE_FLOAT |
                                                          BASSFlag.BASS_SAMPLE_SOFTWARE |
                                                          (Convert.ToBoolean(Program.SynthSettings.GetValue("EnableSFX", 0)) ? BASSFlag.BASS_DEFAULT : BASSFlag.BASS_MIDI_NOFX) |
                                                          (LoopYesNo.Checked ? BASSFlag.BASS_SAMPLE_LOOP : BASSFlag.BASS_DEFAULT),
                                                          0);
            Bass.BASS_ChannelSetAttribute(hStream, BASSAttribute.BASS_ATTRIB_MIDI_CPU, (int)(Convert.ToInt32(Program.SynthSettings.GetValue("MaxRenderingTime", 75)) / 100));
            System.Threading.Thread.Sleep(50);

            // Init SoundFont
            ChangePreviewButtonText("Loading SoundFont...", false);
            ChangeWindowTitle("Loading SoundFont...");
            BASS_MIDI_FONTEX[] fonts = new BASS_MIDI_FONTEX[1];

            if (OriginalSF.ToLower().IndexOf('=') != -1)
            {
                var    matches = System.Text.RegularExpressions.Regex.Matches(OriginalSF, "[0-9]+");
                string sf      = OriginalSF.Substring(OriginalSF.LastIndexOf('|') + 1);
                fonts[0].font    = BassMidi.BASS_MIDI_FontInit(sf);
                fonts[0].spreset = Convert.ToInt32(matches[0].ToString());
                fonts[0].sbank   = Convert.ToInt32(matches[1].ToString());
                fonts[0].dpreset = Convert.ToInt32(matches[2].ToString());
                fonts[0].dbank   = Convert.ToInt32(matches[3].ToString());
            }
            else
            {
                fonts[0].font    = BassMidi.BASS_MIDI_FontInit(OriginalSF);
                fonts[0].spreset = -1;
                fonts[0].sbank   = -1;
                fonts[0].dpreset = -1;
                fonts[0].dbank   = 0;
            }

            BassMidi.BASS_MIDI_FontSetVolume(fonts[0].font, 1.0f);
            BassMidi.BASS_MIDI_StreamSetFonts(hStream, fonts, 1);
            BassMidi.BASS_MIDI_StreamLoadSamples(hStream);
        }
Ejemplo n.º 5
0
        private void InitializeBASSMIDIStream()
        {
            // Init stream
            ChangePreviewButtonText("Initializing stream...", false);
            ChangeWindowTitle("Initializing stream...");
            hStream = BassMidi.BASS_MIDI_StreamCreateFile(MIDIPreview, 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_SAMPLE_SOFTWARE, 0);
            Bass.BASS_ChannelSetAttribute(hStream, BASSAttribute.BASS_ATTRIB_MIDI_CPU, (int)(KeppySynthConfiguratorMain.Delegate.MaxCPU.Value / 100));
            System.Threading.Thread.Sleep(50);

            // Init SoundFont
            ChangePreviewButtonText("Loading SoundFont...", false);
            ChangeWindowTitle("Loading SoundFont...");
            BASS_MIDI_FONTEX[] fonts     = new BASS_MIDI_FONTEX[1];
            List <int>         termsList = new List <int>();

            termsList.Reverse();

            if (OriginalSF.ToLower().IndexOf('=') != -1)
            {
                var    matches = System.Text.RegularExpressions.Regex.Matches(OriginalSF, "[0-9]+");
                string sf      = OriginalSF.Substring(OriginalSF.LastIndexOf('|') + 1);
                fonts[0].font    = BassMidi.BASS_MIDI_FontInit(sf);
                fonts[0].spreset = Convert.ToInt32(matches[0].ToString());
                fonts[0].sbank   = Convert.ToInt32(matches[1].ToString());
                fonts[0].dpreset = Convert.ToInt32(matches[2].ToString());
                fonts[0].dbank   = Convert.ToInt32(matches[3].ToString());
                BassMidi.BASS_MIDI_FontSetVolume(fonts[0].font, 1.0f);
                BassMidi.BASS_MIDI_StreamSetFonts(hStream, fonts, 1);
            }
            else
            {
                fonts[0].font    = BassMidi.BASS_MIDI_FontInit(OriginalSF);
                fonts[0].spreset = -1;
                fonts[0].sbank   = -1;
                fonts[0].dpreset = -1;
                fonts[0].dbank   = 0;
                BassMidi.BASS_MIDI_StreamSetFonts(hStream, fonts, 1);
            }

            BassMidi.BASS_MIDI_StreamLoadSamples(hStream);
        }
Ejemplo n.º 6
0
        public static void BASSStreamSystem(String str, Boolean PreviewMode)
        {
            try
            {
                MainWindow.KMCGlobals._recHandle = BassMidi.BASS_MIDI_StreamCreateFile(str, 0L, 0L,
                                                                                       BASSFlag.BASS_STREAM_DECODE |
                                                                                       (PreviewMode ? 0 : (Properties.Settings.Default.SincInter ? BASSFlag.BASS_MIDI_SINCINTER : 0)) |
                                                                                       BASSFlag.BASS_SAMPLE_FLOAT |
                                                                                       BASSFlag.BASS_SAMPLE_SOFTWARE |
                                                                                       BASSFlag.BASS_MIDI_DECAYEND,
                                                                                       0);
                BASSCheckError();

                if (PreviewMode)
                {
                    MainWindow.KMCGlobals._myWasapi = new WASAPIPROC(MyWasapiProc);
                    BassWasapi.BASS_WASAPI_Init(-1, 0, 2, BASSWASAPIInit.BASS_WASAPI_EVENT, 0, 0, MainWindow.KMCGlobals._myWasapi, 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);
            }
        }
Ejemplo n.º 7
0
        private void OpenMIDIButton_Click(object sender, EventArgs e)
        {
            if (OpenMIDI.ShowDialog() == DialogResult.OK)
            {
                Bass.BASS_StreamFree(chan);

                if (!IsWinXPOrOlder())
                {
                    BassWasapi.BASS_WASAPI_Free();
                    WasapiProc = new WASAPIPROC(MyWasapiProc);
                    BassWasapi.BASS_WASAPI_Init(-1, 0, 2, BASSWASAPIInit.BASS_WASAPI_BUFFER | BASSWASAPIInit.BASS_WASAPI_SHARED, 0.5f, 0, WasapiProc, IntPtr.Zero);
                }

                LoopSyncProc  = null;
                LyricSyncProc = null;
                EndSyncProc   = null;
                TempoSyncProc = null;

                LyricsFromStream.Text = "";

                if ((chan = BassMidi.BASS_MIDI_StreamCreateFile(OpenMIDI.FileName, 0L, 0L,
                                                                (IsWinXPOrOlder() ? BASSFlag.BASS_DEFAULT : (BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT)) | BASSFlag.BASS_MIDI_DECAYEND | (RvAndChr.Checked ? BASSFlag.BASS_MIDI_NOFX : 0),
                                                                0)) == 0)
                {
                    OpenMIDIButton.Text = "Click here to open a file...";
                    MIDITitle.Text      = "";
                    Position.Text       = "-";
                    Error("Can't play the file");
                    return;
                }

                Bass.BASS_ChannelSetAttribute(chan, BASSAttribute.BASS_ATTRIB_MIDI_VOICES, VoiceBar.Value); // apply to current MIDI file too
                Bass.BASS_ChannelSetAttribute(chan, BASSAttribute.BASS_ATTRIB_MIDI_CPU, CPUBar.Value);      // apply to current MIDI file too
                OpenMIDIButton.Text = OpenMIDI.FileName;
                {                                                                                           // set the title (track name of first track)
                    BASS_MIDI_MARK mark = new BASS_MIDI_MARK();
                    if (BassMidi.BASS_MIDI_StreamGetMark(chan, BASSMIDIMarker.BASS_MIDI_MARK_TRACK, 0, mark) && mark.track == 0)
                    {
                        MIDITitle.Text = mark.text;
                    }
                    else
                    {
                        MIDITitle.Text = "";
                    }
                }
                TrackbarStream.Value   = 0;
                TrackbarStream.Minimum = 0;
                TrackbarStream.Maximum = (int)Bass.BASS_ChannelGetLength(chan, BASSMode.BASS_POS_MIDI_TICK) / 120;
                { // set looping syncs
                    BASS_MIDI_MARK mark = new BASS_MIDI_MARK();
                    LoopSyncProc = new SYNCPROC(LoopSync);
                    if (FindMarker(chan, "loopend", mark))                                                                                        // found a loop end point
                    {
                        Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, mark.pos, LoopSyncProc, IntPtr.Zero); // set a sync there
                    }
                    Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_END | BASSSync.BASS_SYNC_MIXTIME, 0, LoopSyncProc, IntPtr.Zero);            // set one at the end too (eg. in case of seeking past the loop point)
                }
                {                                                                                                                                 // clear lyrics buffer and set lyrics syncs
                    BASS_MIDI_MARK mark = new BASS_MIDI_MARK();
                    LyricSyncProc = new SYNCPROC(LyricSync);
                    EndSyncProc   = new SYNCPROC(EndSync);
                    lyrics        = "";
                    if (BassMidi.BASS_MIDI_StreamGetMark(chan, BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, 0, mark)) // got lyrics
                    {
                        Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_MIDI_MARKER, (long)BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, LyricSyncProc, (IntPtr)BASSMIDIMarker.BASS_MIDI_MARK_LYRIC);
                    }
                    else if (BassMidi.BASS_MIDI_StreamGetMark(chan, BASSMIDIMarker.BASS_MIDI_MARK_TEXT, 20, mark)) // got text instead (over 20 of them)
                    {
                        Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_MIDI_MARKER, (long)BASSMIDIMarker.BASS_MIDI_MARK_TEXT, LyricSyncProc, (IntPtr)BASSMIDIMarker.BASS_MIDI_MARK_TEXT);
                    }
                    Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_END, 0, EndSyncProc, IntPtr.Zero);
                }
                { // override the initial tempo, and set a sync to override tempo events and another to override after seeking
                    SetTempo(true);
                    TempoSyncProc = new SYNCPROC(TempoSync);
                    Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_MIDI_EVENT | BASSSync.BASS_SYNC_MIXTIME, (long)BASSMIDIEvent.MIDI_EVENT_TEMPO, TempoSyncProc, IntPtr.Zero);
                    Bass.BASS_ChannelSetSync(chan, BASSSync.BASS_SYNC_SETPOS | BASSSync.BASS_SYNC_MIXTIME, 0, TempoSyncProc, IntPtr.Zero);
                }
                { // get default soundfont in case of matching soundfont being used
                    BASS_MIDI_FONT[] sf = { new BASS_MIDI_FONT(font, fontp, fontb) };
                    // now set them
                    BassMidi.BASS_MIDI_StreamSetFonts(chan, sf, sf.Length);
                }
            }
            Bass.BASS_ChannelSetAttribute(chan, BASSAttribute.BASS_ATTRIB_MIDI_CPU, 95);
            if (PlayPauseBtn.Text != "Pause")
            {
                if (IsWinXPOrOlder())
                {
                    Bass.BASS_ChannelPlay(chan, true);
                }
                else
                {
                    BassWasapi.BASS_WASAPI_Start();
                }
            }
        }
Ejemplo n.º 8
0
        private static bool buildFileTimingBatch(string pMini2sfPath,
                                                 string p2sfFilePath, string pSseqFilePath)
        {
            bool   isSuccess = false;
            string arguments;

            StreamWriter sw;

            StringBuilder strReturn = new StringBuilder(128);
            int           minutes;
            int           seconds;

            int midiStream;

            string _2sfFileName = Path.GetFileName(p2sfFilePath);

            string psfpointBatchFilePath = Path.Combine(Path.Combine(pMini2sfPath, "text"), PSFPOINT_BATCH_TXT);

            if (!File.Exists(psfpointBatchFilePath))
            {
                sw = File.CreateText(psfpointBatchFilePath);
            }
            else
            {
                sw = new StreamWriter(File.Open(psfpointBatchFilePath, FileMode.Append, FileAccess.Write));
            }

            try
            {
                string midiFilePath = pSseqFilePath + ".mid";

                if (File.Exists(midiFilePath))
                {
                    // Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero, null);
                    midiStream = BassMidi.BASS_MIDI_StreamCreateFile(midiFilePath, 0L, 0L, BASSFlag.BASS_DEFAULT, 0);

                    if (midiStream != 0)
                    {
                        // play the channel
                        long   length  = Bass.BASS_ChannelGetLength(midiStream);
                        double tlength = Bass.BASS_ChannelBytes2Seconds(midiStream, length);
                        minutes = (int)(tlength / 60);
                        seconds = (int)(tlength - (minutes * 60));

                        if (seconds > 59)
                        {
                            minutes++;
                            seconds -= 60;
                        }
                    }
                    else
                    {
                        // error
                        Console.Write(Environment.NewLine);
                        Console.WriteLine("Stream error: {0}", Bass.BASS_ErrorGetCode());
                        return(false);
                    }


                    // Do Fade
                    if (isLoopingTrack(pMini2sfPath, Path.GetFileName(pSseqFilePath)))
                    {
                        arguments = " -fade=\"10\" " + _2sfFileName;

                        if (minutes == 0 && seconds == 0)
                        {
                            seconds = 1;
                        }
                    }
                    else
                    {
                        arguments = " -fade=\"1\" " + _2sfFileName;
                        seconds++;
                        if (seconds > 60)
                        {
                            minutes++;
                            seconds -= 60;
                        }
                    }

                    // Add fade info to batch file
                    sw.WriteLine("psfpoint.exe" + arguments);

                    // Add length info to batch file
                    arguments = " -length=\"" + minutes + ":" + seconds.ToString().PadLeft(2, '0') + "\" " + _2sfFileName;
                    sw.WriteLine("psfpoint.exe" + arguments);
                }

                isSuccess = true;
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("Error timing {0}: {1}", p2sfFilePath, e.Message));
            }
            finally
            {
                sw.Close();
                sw.Dispose();
            }

            return(isSuccess);
        }
Ejemplo n.º 9
0
        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());
            }
        }
Ejemplo n.º 10
0
        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") });
            }
        }
Ejemplo n.º 11
0
        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);
            }
        }