public WFOTransporter(WaveFileObject obj) { this.header = obj.header; switch (obj.header.bit) { case 16: arrShort = new short[obj.soundData.Count]; for (int i = 0; i < obj.soundData.Count; i++) { arrShort[i] = (short)obj.soundData[i]; } break; case 32: arrInt = new uint[obj.soundData.Count]; for (int i = 0; i < obj.soundData.Count; i++) { arrInt[i] = (uint)obj.soundData[i]; } break; case 64: arrDouble = new double[obj.soundData.Count]; for (int i = 0; i < obj.soundData.Count; i++) { arrDouble[i] = (double)obj.soundData[i]; } break; default: break; } }
public WaveFileObject[] ToWaveChunksWithOverlaps(int ms) { double secs = ms / 1000d; long chunkSamples = (long)(header.sampleRate * secs); long chunkCount = (((header.dataSize / header.blockSize) / chunkSamples) * 2) - 2; WaveFileObject[] waves = new WaveFileObject[chunkCount]; int osIndex = 0; // Even indexes are the original chunks // Odd indexes are the overlaps for (int i = 0; i < chunkCount / 2; i++) { for (int j = 0; j < chunkSamples; j++) { waves[i].soundData[j] = soundData[osIndex]; if (i == 1) { waves[i].soundData[j] = soundData[osIndex - (int)(chunkSamples * .5)]; } if (i > 1 && i < chunkCount - 2) { waves[i].soundData[j] = soundData[osIndex - (int)(chunkSamples * .5)]; } osIndex++; } waves[i].header.dataSize = (uint)chunkSamples * 4; } return(waves); }
public WaveFileObject[] ToWaveChunksWithOverlaps(int ms, WaveFileObject obj) { double secs = ms / 1000d; long chunkSamples = (long)(obj.header.sampleRate * secs); long chunkCount = (((obj.header.dataSize / obj.header.blockSize) / chunkSamples) * 2) - 2; WaveFileObject[] waves = new WaveFileObject[chunkCount]; int osIndex = 0; for (int i = 0; i < chunkCount; i++) { waves[i] = new WaveFileObject(); WavHeader tempHeader = header; if (header.bit == 16) { tempHeader.dataSize = (uint)chunkSamples * 2; tempHeader.blockSize = 2; waves[i].soundData = new List <ushort>(); } if (header.bit == 32) { tempHeader.dataSize = (uint)chunkSamples * 4; tempHeader.blockSize = 4; waves[i].soundData = new List <uint>(); } if (header.bit == 64) { tempHeader.dataSize = (uint)chunkSamples * 8; tempHeader.blockSize = 8; waves[i].soundData = new List <double>(); } waves[i].header = tempHeader; } for (int i = 0; i < chunkCount; i++) { for (int j = 0; j < chunkSamples; j++) { if (!IsOdd(i)) { waves[i].soundData.Add(obj.soundData[osIndex]); osIndex++; } else { waves[i].soundData.Add(obj.soundData[osIndex + j - (int)(chunkSamples * .5)]); } } } return(waves); }
void Start() { baseSamplePath = Application.dataPath + "/Resources/SoundSamples"; server.Initialize(); // Clean up from last time DirectoryInfo di = new DirectoryInfo(baseSamplePath); foreach (DirectoryInfo dir in di.GetDirectories()) { dir.Delete(true); } //Load FFTWBuddy here //System.Diagnostics.Process.Start(); filePaths = Directory.GetFiles(Application.dataPath + "/Resources/TrainingData"); List <string> correctFilePaths = new List <string>(); int wavCount = 0; for (int i = 0; i < filePaths.Length; i++) { if (filePaths[i].EndsWith(".wav")) { correctFilePaths.Add(filePaths[i]); wavCount++; } } soundSampleCount = wavCount; waveObjects = new WaveFileObject[wavCount]; for (int i = 0; i < wavCount; i++) { waveObjects[i] = new WaveFileObject(correctFilePaths[i]); } Debug.Log("Number of samples: " + wavCount); Thread t = new Thread(new ThreadStart(Process)); t.Start(); //double[] arr = new double[waveObjects[0].soundData.Count]; //waveObjects[1].soundData.CopyTo(arr, 0); //WriteWaveFile(arr, baseSamplePath + "/" + "test.wav"); //Debug.Log("wrote file"); }
public static WaveFileObject ReadWaveFile(string path) { WaveFileObject tempObj = new WaveFileObject(); using (FileStream fs = new FileStream(path, FileMode.Open)) using (BinaryReader br = new BinaryReader(fs)) { try { tempObj.header.riff = br.ReadBytes(4); tempObj.header.size = br.ReadUInt32(); tempObj.header.wavID = br.ReadBytes(4); tempObj.header.fmtID = br.ReadBytes(4); tempObj.header.fmtSize = br.ReadUInt32(); tempObj.header.format = br.ReadUInt16(); tempObj.header.channels = br.ReadUInt16(); tempObj.header.sampleRate = br.ReadUInt32(); tempObj.header.bytePerSec = br.ReadUInt32(); tempObj.header.blockSize = br.ReadUInt16(); tempObj.header.bit = br.ReadUInt16(); tempObj.header.dataID = br.ReadBytes(4); tempObj.header.dataSize = br.ReadUInt32(); for (int i = 0; i < tempObj.header.dataSize / tempObj.header.blockSize; i++) { tempObj.soundData.Add((short)br.ReadUInt16()); } } catch (Exception e) { Console.WriteLine(e.Message); throw; } finally { if (br != null) { br.Close(); } if (fs != null) { fs.Close(); } } } return(tempObj); }
public static void WriteWaveFile(WaveFileObject obj, string path) { using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) using (BinaryWriter bw = new BinaryWriter(fs)) { try { bw.Write(obj.header.riff); bw.Write(obj.header.size); bw.Write(obj.header.wavID); bw.Write(obj.header.fmtID); bw.Write(obj.header.fmtSize); bw.Write(obj.header.format); bw.Write(obj.header.channels); bw.Write(obj.header.sampleRate); bw.Write(obj.header.bytePerSec); bw.Write(obj.header.blockSize); bw.Write(obj.header.bit); bw.Write(obj.header.dataID); bw.Write(obj.header.dataSize); for (int i = 0; i < obj.header.dataSize / obj.header.blockSize; i++) { if (i < obj.soundData.Count) { bw.Write((ushort)obj.soundData[i]); } else { bw.Write(0); } } } finally { if (bw != null) { bw.Close(); } if (fs != null) { fs.Close(); } } } return; }
public WaveFileObject[] ToWaveChunks(int ms) { double secs = ms / 1000d; long chunkSamples = (long)(header.sampleRate * secs); long chunkCount = (header.dataSize / header.blockSize) / chunkSamples; WaveFileObject[] waves = new WaveFileObject[chunkCount]; int osIndex = 0; for (int i = 0; i < chunkCount; i++) { for (int j = 0; j < chunkSamples; j++) { waves[i].soundData[j] = soundData[osIndex]; osIndex++; } waves[i].header.dataSize = (uint)chunkSamples * 4; } return(waves); }
public WaveFileObject[] ToWaveChunksWithOverlaps(int ms, WaveFileObject obj) { double secs = ms / 1000d; long chunkSamples = (long)(obj.header.sampleRate * secs * obj.header.channels); long chunkCount = ((obj.soundData.Count / chunkSamples) * 2) - 2; WaveFileObject[] waves = new WaveFileObject[chunkCount]; int osIndex = 0; //Debug.Log("chunkCount " + chunkCount); Debug.Log("chunkSamples " + chunkSamples); //Debug.Log("sampleRate " + obj.header.sampleRate); //Debug.Log("size " + obj.header.size); //Debug.Log("Block size " + obj.header.blockSize); //Debug.Log("Block size " + obj.header.bit); Debug.Log("starting waves"); for (int i = 0; i < chunkCount; i++) { waves[i] = new WaveFileObject(); WavHeader tempHeader = header; if (header.bit == 16) { tempHeader.dataSize = (uint)chunkSamples * 2; tempHeader.blockSize = 2; waves[i].soundData = new List <short>(); } if (header.bit == 32) { tempHeader.dataSize = (uint)chunkSamples * 4; tempHeader.blockSize = 4; waves[i].soundData = new List <uint>(); } if (header.bit == 64) { tempHeader.dataSize = (uint)chunkSamples * 8; tempHeader.blockSize = 8; waves[i].soundData = new List <double>(); } waves[i].header = tempHeader; } for (int i = 0; i < chunkCount; i++) { //Debug.Log("Chunk count: " + i + " / " + chunkCount); //Debug.Log("osIndex : " + osIndex); //Debug.Log("soundDataCount : " + obj.soundData.Count); for (int j = 0; j < chunkSamples; j++) { if (!IsOdd(i)) { waves[i].soundData.Add(obj.soundData[osIndex]); //Debug.Log(obj.soundData[osIndex]); osIndex++; } else { waves[i].soundData.Add(obj.soundData[osIndex + j - (int)(chunkSamples * .5)]); } } } Debug.Log("returning waves"); return(waves); }
public static WaveFileObject ReadWaveFile(string path) { WaveFileObject tempObj = new WaveFileObject(); using (FileStream fs = new FileStream(path, FileMode.Open)) using (BinaryReader br = new BinaryReader(fs)) { try { tempObj.header.riff = br.ReadBytes(4); tempObj.header.size = br.ReadUInt32(); tempObj.header.wavID = br.ReadBytes(4); byte[] temp = br.ReadBytes(4); string chunk = System.Text.Encoding.UTF8.GetString(temp); if (chunk != "fmt ") { byte[] junk = br.ReadBytes(36); } else { tempObj.header.fmtID = temp; } tempObj.header.fmtSize = br.ReadUInt32(); tempObj.header.format = br.ReadUInt16(); tempObj.header.channels = br.ReadUInt16(); tempObj.header.sampleRate = br.ReadUInt32(); tempObj.header.bytePerSec = br.ReadUInt32(); tempObj.header.blockSize = br.ReadUInt16(); tempObj.header.bit = br.ReadUInt16(); tempObj.header.dataID = br.ReadBytes(4); tempObj.header.dataSize = br.ReadUInt32(); if (tempObj.header.bit == 16) { tempObj.soundData = new List <ushort>(); for (int i = 0; i < tempObj.header.dataSize / (tempObj.header.bit / 8); i++) { tempObj.soundData.Add(br.ReadUInt16()); } } if (tempObj.header.bit == 32) { tempObj.soundData = new List <uint>(); for (int i = 0; i < tempObj.header.dataSize / tempObj.header.blockSize; i++) { tempObj.soundData.Add(br.ReadUInt32()); } } if (tempObj.header.bit == 64) { tempObj.soundData = new List <double>(); for (int i = 0; i < tempObj.header.dataSize / tempObj.header.blockSize; i++) { tempObj.soundData.Add(br.ReadDouble()); } } } catch (Exception e) { Console.WriteLine(e.Message); throw; } finally { if (br != null) { br.Close(); } if (fs != null) { fs.Close(); } } } return(tempObj); }
public SamplePopData(DataSample sample, string path, WaveFileObject wav) { this.dataSample = sample; this.waveFilePath = path; this.wavObj = wav; }