private void wAVToolStripMenuItem_Click(object sender, System.EventArgs e) { NUS3BANK.NUS_TONE.TONE_META meta = null; if (selected != null && soundListBox.SelectedIndex >= 0) { meta = (NUS3BANK.NUS_TONE.TONE_META)soundListBox.SelectedItem; } if (meta != null) { using (var sfd = new SaveFileDialog()) { sfd.FileName = meta.name; sfd.Filter = "WAVE (.wav)|*.wav|" + "All Files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { if (sfd.FileName.EndsWith(".wav") && meta != null) { File.WriteAllBytes(sfd.FileName, WAVE.FromIDSP(meta.idsp)); } } } } }
public void Play() { // this cannot be very fast .-. // if anyone know how to pass the file via a byte array then that would be great... File.WriteAllBytes("temp.idsp", idsp); Console.WriteLine("here"); IntPtr vgm = VGMStreamNative.InitVGMStream("temp.idsp"); if (vgm == IntPtr.Zero) { throw new Exception("Error loading idsp"); } Console.WriteLine("here"); int channelCount = VGMStreamNative.GetVGMStreamChannelCount(vgm); int bitsPerFrame = VGMStreamNative.GetVGMStreamFrameSize(vgm); int size = VGMStreamNative.GetVGMStreamTotalSamples(vgm); int samplerate = VGMStreamNative.GetVGMStreamSampleRate(vgm); Console.WriteLine("here"); int total = (int)((samplerate * bitsPerFrame * channelCount * (size / 24576000f)) / 8 * 1024); //Console.WriteLine(channelCount + " " + bitsPerFrame + " " + size + " " + samplerate + " " + total.ToString("x")); short[] buffer = new short[total]; VGMStreamNative.RenderVGMStream(buffer, buffer.Length / 2, vgm); Console.WriteLine("here"); FileOutput o = new FileOutput(); o.Endian = Endianness.Little; for (int i = 0; i < buffer.Length / 2; i++) { o.writeShort(buffer[i]); } o.save("test.wav"); Console.WriteLine("here"); WAVE.Play(o.getBytes(), VGMStreamNative.GetVGMStreamChannelCount(vgm), VGMStreamNative.GetVGMStreamSamplesPerFrame(vgm), VGMStreamNative.GetVGMStreamSampleRate(vgm)); VGMStreamNative.CloseVGMStream(vgm); File.Delete("temp.idsp"); }