private void 開くOToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog1.Filter = "MIDIファイル(*.mid)|*.mid"; openFileDialog1.ShowDialog(); var filePath = openFileDialog1.FileName; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) { return; } if (mPlayer.IsPlay) { mPlayer.Stop(); btnPalyStop.Text = "再生"; } try { mSMF = new SMF.SMF(filePath); mPlayer.SetEventList(mSMF.EventList); hsbSeek.Maximum = mPlayer.MaxTick; Text = Path.GetFileNameWithoutExtension(filePath); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public void FileOut(string filePath, SMF.SMF smf) { IsFileOutput = true; var prog = midi_GetWavFileOutProgressPtr(); *(int *)prog = 0; var fm = new StatusWindow(smf.MaxTime, prog); fm.Show(); Task.Factory.StartNew(() => { var ms = new MemoryStream(); var bw = new BinaryWriter(ms); foreach (var ev in smf.EventList) { bw.Write(ev.Tick); bw.Write(ev.Data); } var evArr = ms.ToArray(); fixed(byte *evPtr = &evArr[0]) { midi_WavFileOut(Marshal.StringToHGlobalAuto(filePath), mpWaveTable, mpInstList, 44100, 16, (IntPtr)evPtr, (uint)evArr.Length, 960); } IsFileOutput = false; }); }