Ejemplo n.º 1
0
        /// <summary>
        /// Export node.
        /// </summary>
        public override void NodeExport()
        {
            Wave w = (File as SoundWaveArchive)[tree.SelectedNode.Index];

            if (w != null)
            {
                //Get export path.
                SaveFileDialog s = new SaveFileDialog();
                s.RestoreDirectory = true;
                s.FileName         = tree.SelectedNode.Text;
                s.Filter           = "Wave|*.wav|Wave (3ds or Wii U)|*.bfwav;*.bcwav|Wave (Switch)|*.bfwav|Stream (3ds or Wii U)|*.bfstm;*.bcstm|Stream (Switch)|*.bfstm";
                s.ShowDialog();
                if (Path.GetExtension(s.FileName) == "")
                {
                    s.FileName += "wav";
                }
                if (s.FileName != "")
                {
                    //Get file data.
                    WriteMode m = WriteMode.Cafe;
                    if (Path.GetExtension(s.FileName).ToLower()[2] == 'c')
                    {
                        m = WriteMode.CTR;
                    }
                    byte[] b = null;
                    switch (s.FilterIndex)
                    {
                    //Wave.
                    case 1:
                        b = RiffWaveFactory.CreateRiffWave(w.Wav).ToBytes();
                        break;

                    //SDK Wave.
                    case 2:
                        if (m == WriteMode.Cafe)
                        {
                            b = w.Wav.ToBytes(ByteOrder.BigEndian, true);
                        }
                        else
                        {
                            b = w.Wav.ToBytes(ByteOrder.LittleEndian);
                        }
                        break;

                    //SDK Wave Switch.
                    case 3:
                        b = w.Wav.ToBytes(ByteOrder.LittleEndian, true);
                        break;

                    //SDK Stream.
                    case 4:
                        if (m == WriteMode.Cafe)
                        {
                            b = StreamFactory.CreateStream(w.Wav, w.Wav.fileHeader.vMajor, w.Wav.fileHeader.vMinor, w.Wav.fileHeader.vRevision).ToBytes(ByteOrder.BigEndian, true);
                        }
                        else
                        {
                            b = StreamFactory.CreateStream(w.Wav, w.Wav.fileHeader.vMajor, w.Wav.fileHeader.vMinor, w.Wav.fileHeader.vRevision).ToBytes(ByteOrder.LittleEndian);
                        }
                        break;

                    //SDK Stream Switch.
                    case 5:
                        b = StreamFactory.CreateStream(w.Wav, w.Wav.fileHeader.vMajor, w.Wav.fileHeader.vMinor, w.Wav.fileHeader.vRevision).ToBytes(ByteOrder.LittleEndian, true);
                        break;
                    }

                    //Write if possible.
                    if (b != null)
                    {
                        System.IO.File.WriteAllBytes(s.FileName, b);
                    }
                }
            }
            else
            {
                MessageBox.Show("You can't export a null file!", "Notice:");
            }
        }