public void ListenDemo() { Task.Run(() => { isWorking = true; NotifyOfPropertyChange(() => CanListenDemo); NotifyOfPropertyChange(() => CanBuildKeySound); NotifyOfPropertyChange(() => CanOpenSoundfont2); int instrument; int key; if (!IsDrum) { key = PitchIdx + (OctaveIdx + 1) * 12; instrument = InstTypeIdx * 8 + InstNameIdx; } else { instrument = 0; key = 35 + InstNameIdx; } if (key > 127) { MessageBox.Show("No such key"); } else { string filename = MusicTheory.GetFileName(instrument, key, (int)Bpm, (int)Length, Volume, IsDrum); string midiFilename = $"{System.IO.Path.GetTempPath()}\\{filename}.mid"; string wavFilename = $"{System.IO.Path.GetTempPath()}\\{filename}.wav"; maker.GenKeySoundMidi(midiFilename, instrument, key, Bpm, Length, Volume, IsDrum); maker.SetOutputFilename(wavFilename); maker.RenderMiditoWav(midiFilename); System.Media.SoundPlayer player = new System.Media.SoundPlayer(wavFilename); player.Play(); } isWorking = false; NotifyOfPropertyChange(() => CanListenDemo); NotifyOfPropertyChange(() => CanBuildKeySound); NotifyOfPropertyChange(() => CanOpenSoundfont2); }); }
public void BuildKeySound() { Task.Run(() => { isWorking = true; NotifyOfPropertyChange(() => CanListenDemo); NotifyOfPropertyChange(() => CanBuildKeySound); NotifyOfPropertyChange(() => CanOpenSoundfont2); if (NeedParseDir && !string.IsNullOrEmpty(ParseDir)) { DirectoryInfo parseDirInfo = new DirectoryInfo(ParseDir); if (!parseDirInfo.Exists) { MessageBox.Show("Can't find parse dir"); goto clean; } foreach (var files in parseDirInfo.GetFiles()) { if (files.Extension == ".wav" || files.Extension == ".ogg" || files.Extension == ".mp3") { string ksFile = files.Name; string ksFileWithoutExt = ksFile.Substring(0, ksFile.LastIndexOf('.')); string[] ksArg = ksFileWithoutExt.Split('_'); int instrVal = int.Parse(ksArg[0]); int pitchIdxVal = 0; int OctaveIdxVal = 0; if (ksArg[1].Contains("#")) { pitchIdxVal = PitchName.IndexOf(ksArg[1].Substring(0, 2)); OctaveIdxVal = int.Parse(ksArg[1].Substring(2, ksArg[1].Length - 2)); } else { pitchIdxVal = PitchName.IndexOf(ksArg[1].Substring(0, 1)); OctaveIdxVal = int.Parse(ksArg[1].Substring(1, ksArg[1].Length - 1)); } int keyVal = pitchIdxVal + (OctaveIdxVal + 2) * 12; int bpmVal = int.Parse(ksArg[2]); double lengthVal = double.Parse(ksArg[3]) / 480; string tmpDir = Path.GetTempPath(); if (BuildTypeMid) { string midiFilename = $"{OutputDir}\\{ksFileWithoutExt}.mid"; maker.GenKeySoundMidi(midiFilename, instrVal, keyVal, bpmVal, lengthVal, 115, false); OutputFilename = midiFilename; } else { string midiFilename = $"{tmpDir}\\{ksFileWithoutExt}.mid"; maker.GenKeySoundMidi(midiFilename, instrVal, keyVal, bpmVal, lengthVal, 115, false); if (BuildTypeWav) { string wavFilename = $"{OutputDir}\\{ksFileWithoutExt}.wav"; maker.SetOutputFilename(wavFilename); maker.RenderMiditoWav(midiFilename); OutputFilename = wavFilename; } else { string wavFilename = $"{tmpDir}\\{ksFileWithoutExt}.wav"; maker.SetOutputFilename(wavFilename); maker.RenderMiditoWav(midiFilename); string mp3Filename = $"{OutputDir}\\{ksFileWithoutExt}.mp3"; maker.EncodeWavtoMp3(wavFilename, mp3Filename); OutputFilename = mp3Filename; } } } } goto clean; } int instrument; int key; if (!IsDrum) { key = PitchIdx + (OctaveIdx + 1) * 12; instrument = InstTypeIdx * 8 + InstNameIdx; } else { instrument = 0; key = 35 + InstNameIdx; } if (key > 127) { MessageBox.Show("No such key"); } else { int tick = (int)(480 * Length); string filename = MusicTheory.GetFileName(instrument, key, (int)Bpm, (int)tick, Volume, IsDrum); string tmpDir = System.IO.Path.GetTempPath(); if (BuildTypeMid) { string midiFilename = $"{OutputDir}\\{filename}.mid"; maker.GenKeySoundMidi(midiFilename, instrument, key, Bpm, Length, Volume, IsDrum); OutputFilename = midiFilename; } else { string midiFilename = $"{tmpDir}\\{filename}.mid"; maker.GenKeySoundMidi(midiFilename, instrument, key, Bpm, Length, Volume, IsDrum); if (BuildTypeWav) { string wavFilename = $"{OutputDir}\\{filename}.wav"; maker.SetOutputFilename(wavFilename); maker.RenderMiditoWav(midiFilename); OutputFilename = wavFilename; } else { string wavFilename = $"{tmpDir}\\{filename}.wav"; maker.SetOutputFilename(wavFilename); maker.RenderMiditoWav(midiFilename); string mp3Filename = $"{OutputDir}\\{filename}.mp3"; maker.EncodeWavtoMp3(wavFilename, mp3Filename); OutputFilename = mp3Filename; } } } clean: isWorking = false; NotifyOfPropertyChange(() => CanListenDemo); NotifyOfPropertyChange(() => CanBuildKeySound); NotifyOfPropertyChange(() => CanOpenSoundfont2); }); }