diff --git a/BizHawk.Emulation/DiscSystem/Decoding.cs b/BizHawk.Emulation/DiscSystem/Decoding.cs
index d80abf34c2..f1941bdb7d 100644
--- a/BizHawk.Emulation/DiscSystem/Decoding.cs
+++ b/BizHawk.Emulation/DiscSystem/Decoding.cs
@@ -47,7 +47,7 @@ namespace BizHawk.DiscSystem
return false;
}
- string Run(params string[] args)
+ public string Run(params string[] args)
{
args = Escape(args);
StringBuilder sbCmdline = new StringBuilder();
diff --git a/DiscoHawk/AudioExtractor.cs b/DiscoHawk/AudioExtractor.cs
index 86a81d9a5c..a830618710 100644
--- a/DiscoHawk/AudioExtractor.cs
+++ b/DiscoHawk/AudioExtractor.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using BizHawk.DiscSystem;
-using WaveLibrary;
using System.IO;
using System.Diagnostics;
@@ -21,42 +20,29 @@ namespace BizHawk
if (track.TrackType != ETrackType.Audio)
continue;
- var wave = new WaveFile(2, 16, 44100);
var waveData = new byte[track.length_aba * 2352];
int startLba = track.Indexes[1].LBA;
for (int sector = 0; sector < track.length_aba; sector++)
disc.ReadLBA_2352(startLba + sector, waveData, sector * 2352);
- wave.SetData(waveData, waveData.Length / 4);
- string waveFilePath = Path.Combine(path, "__temp.wav");
- wave.WriteFile(waveFilePath);
+ string tempfile = Path.GetTempFileName();
- Encode(waveFilePath, string.Format("{0} - Track {1:D2}.mp3", Path.Combine(path, filebase), track.num));
-
- File.Delete(waveFilePath);
+ try
+ {
+ File.WriteAllBytes(tempfile, waveData);
+ Encode(tempfile, string.Format("{0} - Track {1:D2}.mp3", Path.Combine(path, filebase), track.num));
+ }
+ finally
+ {
+ File.Delete(tempfile);
+ }
}
}
static void Encode(string wavePath, string mp3Path)
{
- var args = Escape("-i", wavePath, "-ab", "192k", mp3Path);
-
- StringBuilder sbCmdline = new StringBuilder();
- for (int i = 0; i < args.Length; i++)
- {
- sbCmdline.Append(args[i]);
- if (i != args.Length - 1) sbCmdline.Append(' ');
- }
-
- ProcessStartInfo oInfo = new ProcessStartInfo(FFmpegPath, sbCmdline.ToString());
- oInfo.UseShellExecute = false;
- oInfo.CreateNoWindow = true;
- oInfo.RedirectStandardOutput = true;
- oInfo.RedirectStandardError = true;
-
- Process proc = System.Diagnostics.Process.Start(oInfo);
- proc.WaitForExit();
- string result = proc.StandardError.ReadToEnd();
+ var ffmpeg = new FFMpeg();
+ ffmpeg.Run("-f", "s16le", "-ar", "44100", "-ac", "2", "-i", wavePath, "-f", "mp3", "-ab", "192k", mp3Path);
}
static string[] Escape(params string[] args)
diff --git a/DiscoHawk/DiscoHawk.csproj b/DiscoHawk/DiscoHawk.csproj
index 1081b4d426..a7f554c9dc 100644
--- a/DiscoHawk/DiscoHawk.csproj
+++ b/DiscoHawk/DiscoHawk.csproj
@@ -94,10 +94,6 @@
ProgressDialog.cs
-
-
-
-
diff --git a/DiscoHawk/Wave/WaveFile.cs b/DiscoHawk/Wave/WaveFile.cs
deleted file mode 100644
index 58ea1b96fc..0000000000
--- a/DiscoHawk/Wave/WaveFile.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Wave File Library
- * A simple library to write a wave file
- *
- * Garrett Hoofman
- * 10/21/08
- * http://www.visionsofafar.com
- * */
-
-/* Wave File Format
-Reference : http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/
-The canonical WAVE format starts with the RIFF header:
-0 4 ChunkID Contains the letters "RIFF" in ASCII form
- (0x52494646 big-endian form).
-4 4 ChunkSize 36 + SubChunk2Size, or more precisely:
- 4 + (8 + SubChunk1Size) + (8 + SubChunk2Size)
- This is the size of the rest of the chunk
- following this number. This is the size of the
- entire file in bytes minus 8 bytes for the
- two fields not included in this count:
- ChunkID and ChunkSize.
-8 4 Format Contains the letters "WAVE"
- (0x57415645 big-endian form).
-
-The "WAVE" format consists of two subchunks: "fmt " and "data":
-The "fmt " subchunk describes the sound data's format:
-12 4 Subchunk1ID Contains the letters "fmt "
- (0x666d7420 big-endian form).
-16 4 Subchunk1Size 16 for PCM. This is the size of the
- rest of the Subchunk which follows this number.
-20 2 AudioFormat PCM = 1 (i.e. Linear quantization)
- Values other than 1 indicate some
- form of compression.
-22 2 NumChannels Mono = 1, Stereo = 2, etc.
-24 4 SampleRate 8000, 44100, etc.
-28 4 ByteRate == SampleRate * NumChannels * BitsPerSample/8
-32 2 BlockAlign == NumChannels * BitsPerSample/8
- The number of bytes for one sample including
- all channels. I wonder what happens when
- this number isn't an integer?
-34 2 BitsPerSample 8 bits = 8, 16 bits = 16, etc.
- 2 ExtraParamSize if PCM, then doesn't exist
- X ExtraParams space for extra parameters
-
-The "data" subchunk contains the size of the data and the actual sound:
-36 4 Subchunk2ID Contains the letters "data"
- (0x64617461 big-endian form).
-40 4 Subchunk2Size == NumSamples * NumChannels * BitsPerSample/8
- This is the number of bytes in the data.
- You can also think of this as the size
- of the read of the subchunk following this
- number.
-44 * Data The actual sound data.
-*/
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-
-namespace WaveLibrary
-{
- public class WaveFile
- {
- WaveHeader header;
- WavefmtSubChunk fmt;
- WavedataSubChunk data;
-
- public WaveFile(int channels, int bitsPerSample, int sampleRate)
- {
- header = new WaveHeader();
- fmt = new WavefmtSubChunk(channels, bitsPerSample, sampleRate);
- }
-
- public void SetData(byte[] SoundData, int numSamples)
- {
- data = new WavedataSubChunk(numSamples, fmt.NumChannels, fmt.BitsPerSample, SoundData);
- }
-
- public void WriteFile(string file)
- {
- FileStream fs = File.Create(file);
-
- //Set the total file chunk size
- //Has to be set here because we might not know what the actual Data size was until now
- header.SetChunkSize(fmt.Size, data.Size);
-
- header.WriteHeader(fs);
- fmt.Writefmt(fs);
- data.WriteData(fs);
-
- fs.Close();
- fs.Dispose();
- }
-
- public int NumChannels { get { return fmt.NumChannels; }}
- public int BitsPerSample { get { return fmt.BitsPerSample; }}
- }
-}
diff --git a/DiscoHawk/Wave/WaveHeader.cs b/DiscoHawk/Wave/WaveHeader.cs
deleted file mode 100644
index 892ccba4fc..0000000000
--- a/DiscoHawk/Wave/WaveHeader.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-
-namespace WaveLibrary
-{
- class WaveHeader
- {
- string ChunkID = "RIFF";
- int ChunkSize = 0;
- string Format = "WAVE"; //Specifiy WAVE, AVI could also be used for a RIFF format
-
- public WaveHeader()
- {
-
- }
- public void SetChunkSize(int fmtSubChunkSize, int dataSubChunkSize)
- {
- ChunkSize = 4 + (8 + fmtSubChunkSize) + (8 + dataSubChunkSize);
- }
-
- public void WriteHeader(FileStream fs)
- {
- //ChunkID
- byte[] riff = Encoding.ASCII.GetBytes(ChunkID);
- fs.Write(riff, 0, riff.Length);
-
- //Chunk Size
- byte[] chunkSize = BitConverter.GetBytes(ChunkSize);
- fs.Write(chunkSize, 0, chunkSize.Length);
-
- //Data Type
- byte[] wave = Encoding.ASCII.GetBytes(Format);
- fs.Write(wave, 0, wave.Length);
- }
-
- public int Chunk_Size { get { return ChunkSize; }}
- }
-}
diff --git a/DiscoHawk/Wave/WavedataSubChunk.cs b/DiscoHawk/Wave/WavedataSubChunk.cs
deleted file mode 100644
index cab37af0d8..0000000000
--- a/DiscoHawk/Wave/WavedataSubChunk.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-
-namespace WaveLibrary
-{
- class WavedataSubChunk
- {
- string SubChunk2ID = "data";
- int SubChunk2Size;
- byte[] SoundData;
-
- public WavedataSubChunk(int NumSamples, int NumChannels, int BitsPerSample, byte[] SoundData)
- {
- SubChunk2Size = NumSamples * NumChannels * (BitsPerSample / 8);
- this.SoundData = SoundData;
- }
-
- public void WriteData(FileStream fs)
- {
- //Chunk ID
- byte[] _subChunk2ID = Encoding.ASCII.GetBytes(SubChunk2ID);
- fs.Write(_subChunk2ID, 0, _subChunk2ID.Length);
-
- //Chunk Size
- byte[] _subChunk2Size = BitConverter.GetBytes(SubChunk2Size);
- fs.Write(_subChunk2Size, 0, _subChunk2Size.Length);
-
- //Wave Sound Data
- fs.Write(SoundData, 0, SoundData.Length);
- }
-
- public int Size { get { return SubChunk2Size; } }
- }
-}
diff --git a/DiscoHawk/Wave/WavefmtSubChunk.cs b/DiscoHawk/Wave/WavefmtSubChunk.cs
deleted file mode 100644
index fc711938e1..0000000000
--- a/DiscoHawk/Wave/WavefmtSubChunk.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-
-namespace WaveLibrary
-{
- class WavefmtSubChunk
- {
- string SubChunk1ID = "fmt ";
- int Subchunk1Size = 16; //For PCM
- int AudioFormat = 1; //For no compression
- public int NumChannels = 2; //1 For Mono, 2 For Stereo
- int SampleRate = 22050;
- int ByteRate;
- int BlockAlign;
- public int BitsPerSample = 16;
-
- public WavefmtSubChunk(int channels, int bitsPerSamples, int sampleRate)
- {
- BitsPerSample = bitsPerSamples;
- NumChannels = channels;
- SampleRate = sampleRate;
- ByteRate = SampleRate * NumChannels * (BitsPerSample / 8);
- BlockAlign = NumChannels * (BitsPerSample / 8);
- }
-
- public void Writefmt(FileStream fs)
- {
- //Chunk ID
- byte[] _subchunk1ID = Encoding.ASCII.GetBytes(SubChunk1ID);
- fs.Write(_subchunk1ID, 0, _subchunk1ID.Length);
-
- //Chunk Size
- byte[] _subchunk1Size = BitConverter.GetBytes(Subchunk1Size);
- fs.Write(_subchunk1Size, 0, _subchunk1Size.Length);
-
- //Audio Format (PCM)
- byte[] _audioFormat = BitConverter.GetBytes(AudioFormat);
- fs.Write(_audioFormat, 0, 2);
-
- //Number of Channels (1 or 2)
- byte[] _numChannels = BitConverter.GetBytes(NumChannels);
- fs.Write(_numChannels, 0, 2);
-
- //Sample Rate
- byte[] _sampleRate = BitConverter.GetBytes(SampleRate);
- fs.Write(_sampleRate, 0, _sampleRate.Length);
-
- //Byte Rate
- byte[] _byteRate = BitConverter.GetBytes(ByteRate);
- fs.Write(_byteRate, 0, _byteRate.Length);
-
- //Block Align
- byte[] _blockAlign = BitConverter.GetBytes(BlockAlign);
- fs.Write(_blockAlign, 0, 2);
-
- //Bits Per Sample
- byte[] _bitsPerSample = BitConverter.GetBytes(BitsPerSample);
- fs.Write(_bitsPerSample, 0, 2);
- }
-
- public int Size { get { return Subchunk1Size; } }
- }
-}