public void MixAudio(Dictionary <String, int[]> songsXtimes) { lastFile = targetFile += "_" + DateTime.Now.ToString(); toMix = new List <WaveFileReader>(); WaveMixerStream32 combined = null; foreach (String s in songsXtimes.Keys) { PrepareClip(s, songsXtimes[s]); //chop it up and add it to toMix } combined = Combine(); Wave32To16Stream wavmixer = new Wave32To16Stream(combined); WaveFileWriter.CreateWaveFile(targetFile, wavmixer); wavmixer.Dispose(); combined.Dispose(); /* * byte[] b = new byte[combined.Length]; * int len = (int)combined.Length; * combined.Read(b,0,len); * combined.Close(); * WaveFileWriter wv = new WaveFileWriter(targetFile, combined.WaveFormat); * wv.Write(b, 0, (int)combined.Length); * */ return; }
public static MemoryStream ConvertWavToMp3(Wave32To16Stream wavFile) { using (var retMs = new MemoryStream()) using (var wtr = new LameMP3FileWriter(retMs, wavFile.WaveFormat, 128)) { wavFile.CopyTo(wtr); return(retMs); } }
private byte[] RealMix(ReceivedRtp item1, ReceivedRtp item2) { if (item1 == null || item2 == null) { return(null); } if (item1.size == 0 || item2.size == 0) { return(null); } byte[] wavSrc1 = new byte[item1.size - headersize]; byte[] wavSrc2 = new byte[item2.size - headersize]; Array.Copy(item1.buff, headersize, wavSrc1, 0, (item1.size - headersize)); Array.Copy(item2.buff, headersize, wavSrc2, 0, (item2.size - headersize)); WaveMixerStream32 mixer = new WaveMixerStream32(); // mixer.AutoStop = true; MemoryStream memstrem = new MemoryStream(wavSrc1); RawSourceWaveStream rawsrcstream = new RawSourceWaveStream(memstrem, this.codec); WaveFormatConversionStream conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream); WaveChannel32 channelstream = new WaveChannel32(conversionstream); mixer.AddInputStream(channelstream); memstrem = new MemoryStream(wavSrc2); rawsrcstream = new RawSourceWaveStream(memstrem, this.codec); conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream); channelstream = new WaveChannel32(conversionstream); mixer.AddInputStream(channelstream); mixer.Position = 0; Wave32To16Stream to16 = new Wave32To16Stream(mixer); var convStm = new WaveFormatConversionStream(pcmFormat8, to16); byte[] mixedbytes = new byte[(int)convStm.Length]; int chk = convStm.Read(mixedbytes, 0, (int)convStm.Length); //Buffer.BlockCopy(tobyte, 0, writingBuffer, 0, tobyte.Length); memstrem.Close(); rawsrcstream.Close(); conversionstream.Close(); channelstream.Close(); convStm.Close(); convStm.Dispose(); convStm = null; to16.Close(); to16.Dispose(); to16 = null; mixer.Close(); mixer.Dispose(); mixer = null; return(mixedbytes); }
private void convertToMp3() { if (IsRecording) { return; } int i = 0; var outputFile = Path.Combine(SettingsFile.Instance.SavePath, buildFileName(i)); while (File.Exists(outputFile)) { outputFile = Path.Combine(SettingsFile.Instance.SavePath, buildFileName(++i)); } try { log.Debug($"Generating mp3: {outputFile}"); var tag = new ID3TagData(); tag.UserDefinedText.Add("CallId", Call.CallId); tag.UserDefinedText.Add("From", Call.From?.SkypeId); tag.UserDefinedText.Add("FromDisplayName", Call.From?.DisplayName); tag.UserDefinedText.Add("To", Call.To?.SkypeId); tag.UserDefinedText.Add("ToDisplayName", Call.To?.DisplayName); var mixer = new WaveMixerStream32 { AutoStop = true }; log.Debug($" adding wave input: {_micSourceFile}"); addMixerStream(mixer, _micSourceFile); log.Debug($" adding wave input: {_spkSourceFile}"); addMixerStream(mixer, _spkSourceFile); log.Debug($" encoding"); var wave32 = new Wave32To16Stream(mixer); var mp3Writer = new LameMP3FileWriter(outputFile, wave32.WaveFormat, LAMEPreset.VBR_90, tag); wave32.CopyTo(mp3Writer); // close all streams wave32.Close(); mp3Writer.Close(); log.Debug($" finished, removing temp files"); File.Delete(_micSourceFile); File.Delete(_spkSourceFile); } catch (Exception ex) { log.Error("Error generating mp3: " + ex.Message, ex); } }
public WasapiProvider() { // Init Pipes this.recordingStream = new PipeStream(); this.LoopbackMp3Stream = new PipeStream(); this.LoopbackL16Stream = new PipeStream(); // Init Wave Processor thread Thread waveProcessorThread = new Thread(new ThreadStart(this.waveProcessor)) { Priority = ThreadPriority.Highest }; // Init Wasapi Capture this.loopbackWaveIn = new WasapiLoopbackCapture(); this.loopbackWaveIn.DataAvailable += new EventHandler <WaveInEventArgs>(this.loopbackWaveIn_DataAvailable); // Init Raw Wav (16bit) WaveStream rawWave16b = new Wave32To16Stream(new RawSourceWaveStream(this.recordingStream, NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(this.loopbackWaveIn.WaveFormat.SampleRate, this.loopbackWaveIn.WaveFormat.Channels))); // Convert Raw Wav to PCM with audio format in settings var audioFormat = AudioSettings.GetAudioFormat(); if (rawWave16b.WaveFormat.SampleRate == audioFormat.SampleRate && rawWave16b.WaveFormat.BitsPerSample == audioFormat.BitsPerSample && rawWave16b.WaveFormat.Channels == audioFormat.Channels) { // No conversion ! this.rawConvertedStream = null; this.pcmStream = WaveFormatConversionStream.CreatePcmStream(rawWave16b); } else { // Resampler this.rawConvertedStream = new WaveProviderToWaveStream(new MediaFoundationResampler(rawWave16b, audioFormat)); this.pcmStream = WaveFormatConversionStream.CreatePcmStream(rawConvertedStream); } // Init MP3 Encoder this.mp3Writer = new LameMP3FileWriter(this.LoopbackMp3Stream, pcmStream.WaveFormat, AudioSettings.GetMP3Bitrate()); // Start Recording this.loopbackWaveIn.StartRecording(); // Start Wave Processor thread waveProcessorThread.Start(); }
public WaveStream GetMetronome(int tempo, int bars, Stream bufferStream) { Mp3FileReader stick = new Mp3FileReader(@"sounds\stick.mp3"); Mp3FileReader stick2 = new Mp3FileReader(@"sounds\stick.mp3"); //Wave WaveStream stickWave = WaveFormatConversionStream.CreatePcmStream(stick); WaveStream stick2Wave = WaveFormatConversionStream.CreatePcmStream(stick2); var stick32 = new WaveChannel32(stickWave); stick32.PadWithZeroes = false; stick32.Volume = 1.0f; double seconds = 60f / tempo; var stickOff = new WaveOffsetStream(stick2Wave, TimeSpan.FromSeconds(seconds), TimeSpan.Zero, stick2Wave.TotalTime); var stickOff32 = new WaveChannel32(stickOff); stickOff32.PadWithZeroes = false; stickOff32.Volume = 1.0f; // Add to the mixer. var mixer = new WaveMixerStream32(); mixer.AutoStop = true; mixer.AddInputStream(stick32); mixer.AddInputStream(stickOff32); var outputWav = new Wave32To16Stream(mixer); using (MemoryStream mem = new MemoryStream()) { WaveStream trimmed = TrimWaveStream(outputWav, TimeSpan.Zero, outputWav.TotalTime.Subtract(TimeSpan.FromSeconds(seconds * 2)), mem); var looped = LoopStream(trimmed, bars * 2, bufferStream); return(looped); } }
private bool Decode(string filePath) { if (!Directory.Exists("temp")) { Directory.CreateDirectory("temp"); } { string toOut = @"temp\" + Path.GetFileNameWithoutExtension(filePath) + ".wav"; try { using (var decoder = new MediaFoundationDecoder(filePath)) { decoder.WriteToFile(toOut); } } catch (MediaFoundationException e) { e.ToString(); try { using (var reader = new VorbisWaveReader(filePath)) { using (var converter = new Wave32To16Stream(reader)) { WaveFileWriter.CreateWaveFile(toOut, converter); } } } catch { return(false); } } } return(true); }
public static string Converter(string inPath) { using (WaveFileReader mpbacground = new WaveFileReader(inPath)) { using (WaveStream background = WaveFormatConversionStream.CreatePcmStream(mpbacground)) { using (var mixer = new WaveMixerStream32()) { mixer.AutoStop = true; var messageOffset = background.TotalTime; var background32 = new WaveChannel32(background); background32.PadWithZeroes = false; mixer.AddInputStream(background32); using (var wave32 = new Wave32To16Stream(mixer)) { var mp3Stream = ConvertWavToMp3(wave32); inPath = inPath.Split('.')[0] + ".mp3"; File.WriteAllBytes(inPath, mp3Stream.ToArray()); } } } } return(inPath); }
public WasapiProvider() { // Init Pipes this.recordingStream = new PipeStream(); this.LoopbackMp3Stream = new PipeStream(); this.LoopbackL16Stream = new PipeStream(); // Init Wave Processor thread Thread waveProcessorThread = new Thread(new ThreadStart(this.waveProcessor)) { Priority = ThreadPriority.Highest }; // Init capture audio device MMDevice captureDevice = null; var enumerator = new MMDeviceEnumerator(); string captureDeviceID = SWYH.Properties.Settings.Default.AudioDevice; if (captureDeviceID != "") { foreach (var wasapi in enumerator.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active)) { if (wasapi.ID == captureDeviceID) { captureDevice = wasapi; } } } if (captureDevice == null) { captureDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia); } // Init Wasapi Capture if (captureDevice.DataFlow == DataFlow.Render) { this.loopbackWaveIn = new WasapiLoopbackCapture(captureDevice); } else { this.loopbackWaveIn = new WasapiCapture(captureDevice); } this.loopbackWaveIn.DataAvailable += new EventHandler <WaveInEventArgs>(this.loopbackWaveIn_DataAvailable); // Init Raw Wav (16bit) WaveStream rawWave16b = new Wave32To16Stream(new RawSourceWaveStream(this.recordingStream, NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(this.loopbackWaveIn.WaveFormat.SampleRate, this.loopbackWaveIn.WaveFormat.Channels))); // Convert Raw Wav to PCM with audio format in settings var audioFormat = AudioSettings.GetAudioFormat(); if (rawWave16b.WaveFormat.SampleRate == audioFormat.SampleRate && rawWave16b.WaveFormat.BitsPerSample == audioFormat.BitsPerSample && rawWave16b.WaveFormat.Channels == audioFormat.Channels) { // No conversion ! this.rawConvertedStream = null; this.pcmStream = WaveFormatConversionStream.CreatePcmStream(rawWave16b); } else { // Resampler this.rawConvertedStream = new WaveProviderToWaveStream(new MediaFoundationResampler(rawWave16b, audioFormat)); this.pcmStream = WaveFormatConversionStream.CreatePcmStream(rawConvertedStream); } // Init MP3 Encoder this.mp3Writer = new LameMP3FileWriter(this.LoopbackMp3Stream, pcmStream.WaveFormat, AudioSettings.GetMP3Bitrate()); // Start Recording this.loopbackWaveIn.StartRecording(); // Start Wave Processor thread waveProcessorThread.Start(); }
/// <summary> /// Converts a group of raw PCMs to one, final completed MP3. /// </summary> /// <param name="args">args[0] = Subdirectory of the current directory containing raw PCM files; args[1] = html recordings/ directory</param> static void Main(string[] args) { string dir = Environment.CurrentDirectory; string html = ""; if (args.Length > 1) { #if DEBUG dir = args[0]; #else dir = Environment.CurrentDirectory + "\\" + args[0]; #endif html = args[1]; } if (!Directory.Exists(dir)) { Log("PCM directory '" + args[0] + "' invalid!", Environment.CurrentDirectory + "\\log"); Console.WriteLine("The PCM directory doesn't exist!"); Console.WriteLine("Correct syntax: convert.exe <PCM Directory> <HTML Directory>"); return; } if (!Directory.Exists(html)) { Log("HTML directory '" + args[0] + "' invalid!", Environment.CurrentDirectory + "\\log"); Console.WriteLine("The HTML directory doesn't exist!"); Console.WriteLine("Correct syntax: convert.exe <PCM Directory> <HTML Directory>"); return; } Converting = new List <string>(); Console.WriteLine("PCM Path: " + Path.GetFullPath(dir)); Log("PCM Path: " + Path.GetFullPath(dir), Path.GetFullPath(dir) + "\\log"); dir = Path.GetFullPath(dir); Console.WriteLine("HTML Path: " + Path.GetFullPath(html)); Log("HTML Path: " + Path.GetFullPath(html), Path.GetFullPath(dir) + "\\log"); html = Path.GetFullPath(html); pcmDir = dir; ProcessStartInfo info; List <string> files; Thread dirWatcher = new Thread(new ThreadStart(() => { Log("Thread started."); while (true) { long curSize = GetDirectorySize(); if (curSize > HighestDirSize) { HighestDirSize = curSize; } Thread.Sleep(100); } })); dirWatcher.Start(); bool quit = false; while (!quit) { if (DirectorySearcher.IsCompleted(dir)) { Log("Directory ready!"); quit = true; break; } files = Directory.EnumerateFiles(dir, "*.pcm", SearchOption.TopDirectoryOnly).ToList(); foreach (string s in files) { if (!Converting.Contains(s)) { FileChecker fc = new FileChecker(s); if (fc.Finished) { Console.WriteLine(s + " finished! converting..."); fc.Convert(); } } } Thread.Sleep(100); } if (File.Exists(dir + "\\done")) { File.Delete(dir + "\\done"); } Converting.Clear(); Log("Deleted done file."); // FIND LOWEST TICK string first = Directory.EnumerateFiles(dir, "*-*.mp3", SearchOption.TopDirectoryOnly).First(); double lowest = double.Parse(first.Split('-')[first.Split('-').Length - 1].Split('.')[0]); foreach (string file in Directory.EnumerateFiles(dir, "*-*.mp3", SearchOption.TopDirectoryOnly)) { if (double.Parse(file.Split('-')[file.Split('-').Length - 1].Split('.')[0]) < lowest) { lowest = double.Parse(file.Split('-')[file.Split('-').Length - 1].Split('.')[0]); } } Log("Lowest tick: " + lowest); List <WaveStream> streams = new List <WaveStream>(); files = Directory.EnumerateFiles(dir, "*-*.mp3", SearchOption.TopDirectoryOnly).ToList(); streams = new List <WaveStream>(); TryClear(); Log("Adding files to stream..."); for (int i = 0; i < files.Count; i++) { Console.WriteLine("Adding " + files[i] + "..."); double ticks = double.Parse(files[0].Split('-')[files[0].Split('-').Length - 1].Split('.')[0]); Mp3FileReader reader = new Mp3FileReader(files[0]); WaveOffsetStream stream = new WaveOffsetStream(reader, TimeSpan.FromMilliseconds(ticks - lowest), TimeSpan.Zero, reader.TotalTime); WaveChannel32 channel = new WaveChannel32(stream); channel.Volume = 1.5F; channel.PadWithZeroes = false; streams.Add(channel); files.RemoveAt(0); i--; } WriteLine("Creating final .mp3..."); Log("Creating final .mp3..."); using (WaveMixerStream32 mixer = new WaveMixerStream32(streams, true)) using (Wave32To16Stream stream = new Wave32To16Stream(mixer)) using (var writer = new LameMP3FileWriter(dir + "\\completed.mp3", stream.WaveFormat, 128)) stream.CopyTo(writer); WriteLine("Cleaning up..."); Log("Cleaning up..."); // Dispose of the streams foreach (WaveStream stream in streams) { try { stream.Dispose(); } catch (Exception ex) { } } streams.Clear(); streams = null; dirWatcher.Abort(); // Delete mp3 files DirectoryInfo idir = new DirectoryInfo(dir); foreach (FileInfo file in idir.GetFiles()) { if (file.Name.EndsWith(".mp3") && !file.Name.Contains("completed.mp3")) { file.Delete(); } } try { File.Move(dir + "\\completed.mp3", html + "\\" + lowest + ".mp3"); } catch (Exception ex) { Log("Unable to move completed.mp3! " + ex.Message + "\r\n" + ex.StackTrace); } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); WriteLine("Done!"); Log("Done!"); Log("Highest directory size: " + ToMegabytes(HighestDirSize).ToString("N0") + "MB"); }
/// <summary> /// Creates a mashup of two or more mp3 files by using naudio /// </summary> /// <param name="files">Name of files as an string array</param> /// These files should be existing in a temporay folder /// <returns>The path of mashed up mp3 file</returns> public static string CreateMashup(int projectId, string mp3Folder, string[] files) { // because there is no mash up with less than 2 files if (files.Count() < 2) { throw new Exception("Not enough files selected!"); } try { // Create a mixer object // This will be used for merging files together var mixer = new WaveMixerStream32 { AutoStop = true }; // Set the path to store the mashed up output file var outputFile = Path.Combine(mp3Folder, $"{projectId}.mp3"); foreach (var file in files) { // for each file - // check if it exists in the temp folder var filePath = Path.Combine(file); if (File.Exists(filePath)) { // create mp3 reader object var reader = new Mp3FileReader(filePath); // create a wave stream and a channel object var waveStream = WaveFormatConversionStream.CreatePcmStream(reader); var channel = new WaveChannel32(waveStream) { //Set the volume Volume = 0.5f }; // add channel as an input stream to the mixer mixer.AddInputStream(channel); } } CheckAddBinPath(); // convert wave stream from mixer to mp3 var wave32 = new Wave32To16Stream(mixer); var mp3Writer = new LameMP3FileWriter(outputFile, wave32.WaveFormat, 128); wave32.CopyTo(mp3Writer); // close all streams wave32.Close(); mp3Writer.Close(); // return the mashed up file path return(outputFile); } catch (Exception) { // TODO: handle exception throw; } }
public bool Merge(string nompartie) { if (nompartie != "") { XmlDocument doc = new XmlDocument(); doc.Load(Application.persistentDataPath + "/sauv.xml"); XmlElement root = doc.DocumentElement; if (root.HasChildNodes) { XmlNodeList ToutesLesParties = root.ChildNodes; int NombreParties = ToutesLesParties.Count; for (int i = 0; i < NombreParties; i++) { XmlElement Partie = ToutesLesParties[i] as XmlElement; String nom = Partie.GetAttribute("name"); if (nom == nompartie) { WaveFileReader[] batterie; WaveFileReader[] synthe; WaveFileReader[] melodie; WaveFileReader[] guitare; WaveFileReader[] basse; WaveFileReader[] piano; WaveChannel32[] batterieStream; WaveChannel32[] syntheStream; WaveChannel32[] melodieStream; WaveChannel32[] guitareStream; WaveChannel32[] basseStream; WaveChannel32[] pianoStream; WaveOffsetStream[] batterieDecalage; WaveOffsetStream[] syntheDecalage; WaveOffsetStream[] melodieDecalage; WaveOffsetStream[] guitareDecalage; WaveOffsetStream[] basseDecalage; WaveOffsetStream[] pianoDecalage; int decalage = 0; if (Partie.HasChildNodes) { var mixer = new WaveMixerStream32(); mixer.AutoStop = true; XmlNodeList ToutesLesSequences = Partie.ChildNodes; int NombreSequences = ToutesLesSequences.Count; batterie = new WaveFileReader[NombreSequences]; synthe = new WaveFileReader[NombreSequences]; melodie = new WaveFileReader[NombreSequences]; guitare = new WaveFileReader[NombreSequences]; basse = new WaveFileReader[NombreSequences]; piano = new WaveFileReader[NombreSequences]; piano[0] = null; batterie[0] = null; synthe[0] = null; melodie[0] = null; guitare[0] = null; basse[0] = null; batterieDecalage = new WaveOffsetStream[NombreSequences]; syntheDecalage = new WaveOffsetStream[NombreSequences]; melodieDecalage = new WaveOffsetStream[NombreSequences]; guitareDecalage = new WaveOffsetStream[NombreSequences]; basseDecalage = new WaveOffsetStream[NombreSequences]; pianoDecalage = new WaveOffsetStream[NombreSequences]; batterieStream = new WaveChannel32[NombreSequences]; syntheStream = new WaveChannel32[NombreSequences]; melodieStream = new WaveChannel32[NombreSequences]; guitareStream = new WaveChannel32[NombreSequences]; basseStream = new WaveChannel32[NombreSequences]; pianoStream = new WaveChannel32[NombreSequences]; string[] batterieSrc = new string[NombreSequences]; string[] syntheSrc = new string[NombreSequences]; string[] melodieSrc = new string[NombreSequences]; string[] guitareSrc = new string[NombreSequences]; string[] basseSrc = new string[NombreSequences]; string[] pianoSrc = new string[NombreSequences]; for (int k = 0; k < NombreSequences; k++) { batterieSrc[k] = ""; syntheSrc[k] = ""; melodieSrc[k] = ""; guitareSrc[k] = ""; basseSrc[k] = ""; pianoSrc[k] = ""; } for (int j = 0; j < NombreSequences; j++) { XmlElement Sequence = ToutesLesSequences[j] as XmlElement; decalage = j * 8; XmlElement Instru = Sequence.FirstChild as XmlElement; string type = Instru.GetAttribute("type"); string src = Instru.GetAttribute("src"); switch (type) { case "piano": if (src != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } pianoSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } } break; case "basse": if (src != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } basseSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "guitare": if (src != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } guitareSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "drum1": if (src != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } batterieSrc[j] = src; if (j > 0) { if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "synthe": if (src != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } syntheSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "melodie": if (src != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } melodieSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "none": if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; } if (piano[j] != null) { pianoDecalage[j] = new WaveOffsetStream(piano[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); pianoStream[j] = new WaveChannel32(pianoDecalage[j]); pianoStream[j].PadWithZeroes = false; mixer.AddInputStream(pianoStream[j]); } if (basse[j] != null) { basseDecalage[j] = new WaveOffsetStream(basse[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); basseStream[j] = new WaveChannel32(basseDecalage[j]); basseStream[j].PadWithZeroes = false; mixer.AddInputStream(basseStream[j]); } if (guitare[j] != null) { guitareDecalage[j] = new WaveOffsetStream(guitare[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); guitareStream[j] = new WaveChannel32(guitareDecalage[j]); guitareStream[j].PadWithZeroes = false; mixer.AddInputStream(guitareStream[j]); } if (batterie[j] != null) { batterieDecalage[j] = new WaveOffsetStream(batterie[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); batterieStream[j] = new WaveChannel32(batterieDecalage[j]); batterieStream[j].PadWithZeroes = false; mixer.AddInputStream(batterieStream[j]); } if (melodie[j] != null) { melodieDecalage[j] = new WaveOffsetStream(melodie[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); melodieStream[j] = new WaveChannel32(melodieDecalage[j]); melodieStream[j].PadWithZeroes = false; mixer.AddInputStream(melodieStream[j]); } if (synthe[j] != null) { syntheDecalage[j] = new WaveOffsetStream(synthe[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); syntheStream[j] = new WaveChannel32(syntheDecalage[j]); syntheStream[j].PadWithZeroes = false; mixer.AddInputStream(syntheStream[j]); } } var wave32 = new Wave32To16Stream(mixer); string nomSecure = nompartie; foreach (char c in System.IO.Path.GetInvalidFileNameChars()) { nomSecure = nompartie.Replace(c, '_'); } WaveFileWriter.CreateWaveFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "/" + nomSecure + ".wav", wave32); GameObject.Find("haut").GetComponent <Text>().text = "Le fichier " + nomSecure + ".wav"; return(true); } } } } } return(false); }
private void ProcessMixingFinal(RcvData data, int dataSize) { string processingFn = string.Format("e:\\{0}_{1}_{2}.wav", data.seqnum, data.extension, data.peernumber); List <RecInfos> ls0 = lExtension0.FindAll( delegate(RecInfos list) { return(list.rcvData.Equals(data) && list.isExtension == 0); }); List <RecInfos> ls1 = lExtension1.FindAll( delegate(RecInfos list) { return(list.rcvData.Equals(data) && list.isExtension == 1); }); IsExtensionComparer isExtensionCompare = new IsExtensionComparer(); ls0.Sort(isExtensionCompare); ls1.Sort(isExtensionCompare); int count = 0; int count0 = ls0.Count(); int count1 = ls1.Count(); if (count0 - count1 < 0) { count = count0; } else { count = count1; } for (int i = 0; i < count; i++) { if (ls0[i].seq == ls1[i].seq) { // 믹싱 byte[] wavSrc0 = new byte[160]; byte[] wavSrc1 = new byte[160]; Array.Copy(ls0[i].voice, 12, wavSrc0, 0, wavSrc0.Length); Array.Copy(ls1[i].voice, 12, wavSrc1, 0, wavSrc1.Length); WaveMixerStream32 mixer = new WaveMixerStream32(); //mixer.AutoStop = true; WaveChannel32 channelStm = null; for (int j = 0; j < 2; j++) { MemoryStream memStm = null; BufferedStream bufStm = null; RawSourceWaveStream rawSrcStm = null; WaveFormatConversionStream conversionStm = null; if (j == 0) { memStm = new MemoryStream(wavSrc0); } else { memStm = new MemoryStream(wavSrc1); } bufStm = new BufferedStream(memStm); rawSrcStm = new RawSourceWaveStream(bufStm, mulawFormat); conversionStm = new WaveFormatConversionStream(pcmFormat, rawSrcStm); channelStm = new WaveChannel32(conversionStm); mixer.AddInputStream(channelStm); } mixer.Position = 0; if (File.Exists(processingFn)) { var wavefilestream = new WaveFileReader(processingFn); byte[] wavefilebyte = new byte[(int)wavefilestream.Length]; int chk0 = wavefilestream.Read(wavefilebyte, 0, wavefilebyte.Length); Wave32To16Stream to16 = new Wave32To16Stream(mixer); var conversionStm = new WaveFormatConversionStream(pcmFormat, to16); byte[] tobyte = new byte[(int)conversionStm.Length]; int chk1 = conversionStm.Read(tobyte, 0, (int)conversionStm.Length); byte[] desByte = new byte[wavefilebyte.Length + tobyte.Length]; conversionStm.Close(); wavefilestream.Close(); Buffer.BlockCopy(wavefilebyte, 0, desByte, 0, wavefilebyte.Length); Buffer.BlockCopy(tobyte, 0, desByte, wavefilebyte.Length, tobyte.Length); using (MemoryStream memStm = new MemoryStream(desByte)) using (BufferedStream buffStm = new BufferedStream(memStm)) using (RawSourceWaveStream rawSrcStm = new RawSourceWaveStream(buffStm, pcmFormat)) { WaveFileWriter.CreateWaveFile(processingFn, rawSrcStm); } } else { var mixedStm = new Wave32To16Stream(mixer); var convStm = new WaveFormatConversionStream(pcmFormat, mixedStm); WaveFileWriter.CreateWaveFile(processingFn, convStm); convStm.Close(); mixedStm.Close(); } mixer.Close(); // 삭제 lExtension0.Remove(ls0[i]); lExtension1.Remove(ls1[i]); } else if (ls0[i].seq - ls1[i].seq < 0) { // ls0 만 믹싱 // ls0 원본에 byte[] 붙임 > 원본 byte[]를 wavesream 으로 변환 > wave 파일로 저장 if (File.Exists(processingFn)) { //wavefilestream = new WaveFileReader(processingFn); } else { } // 삭제 lExtension0.Remove(ls0[i]); ls1.Insert(i + 1, ls1[i]); } else if (ls0[i].seq - ls1[i].seq > 0) { // ls1 만 믹싱 // ls1 원본에 byte[] 붙임 > 원본 byte[]를 wavesream 으로 변환 > wave 파일로 저장 if (File.Exists(processingFn)) { //wavefilestream = new WaveFileReader(processingFn); } else { } // 삭제 lExtension1.Remove(ls1[i]); ls0.Insert(i + 1, ls0[i]); } } }
private void ProcessMixing2(RcvData data, int dataSize) { string processingFn = string.Format("d:\\{0}_{1}_{2}.wav", data.seqnum, data.extension, data.peernumber); List <RecInfos> ls0 = lExtension0.FindAll( delegate(RecInfos list) { return(list.rcvData.Equals(data) && list.isExtension == 0); }); List <RecInfos> ls1 = lExtension1.FindAll( delegate(RecInfos list) { return(list.rcvData.Equals(data) && list.isExtension == 1); }); IsExtensionComparer isExtensionCompare = new IsExtensionComparer(); ls0.Sort(isExtensionCompare); ls1.Sort(isExtensionCompare); int count = 0; int count0 = ls0.Count(); int count1 = ls1.Count(); if (count0 - count1 < 0) { count = count0; } else { count = count1; } byte[] buffWriting = new byte[320 * count]; for (int i = 0; i < count; i++) { if (ls0[i].seq == ls1[i].seq) { // 믹싱 // 코덱 종류에 따라서 바이트 길이는 달라질 수 있다. 실제로 만들 때 경우의 수 확인하고 만들어야 한다. byte[] wavSrc0 = new byte[160]; byte[] wavSrc1 = new byte[160]; Array.Copy(ls0[i].voice, 12, wavSrc0, 0, wavSrc0.Length); Array.Copy(ls1[i].voice, 12, wavSrc1, 0, wavSrc1.Length); WaveMixerStream32 mixer = new WaveMixerStream32(); //mixer.AutoStop = true; WaveChannel32 channelStm = null; MemoryStream memStm = null; BufferedStream bufStm = null; RawSourceWaveStream rawSrcStm = null; WaveFormatConversionStream conversionStm = null; for (int j = 0; j < 2; j++) { if (j == 0) { memStm = new MemoryStream(wavSrc0); } else { memStm = new MemoryStream(wavSrc1); } bufStm = new BufferedStream(memStm); rawSrcStm = new RawSourceWaveStream(bufStm, mulawFormat); conversionStm = new WaveFormatConversionStream(pcmFormat, rawSrcStm); channelStm = new WaveChannel32(conversionStm); mixer.AddInputStream(channelStm); } mixer.Position = 0; Wave32To16Stream to16 = new Wave32To16Stream(mixer); var convStm = new WaveFormatConversionStream(pcmFormat, to16); byte[] tobyte = new byte[(int)convStm.Length]; int chk = convStm.Read(tobyte, 0, (int)convStm.Length); Buffer.BlockCopy(tobyte, 0, buffWriting, i * tobyte.Length, tobyte.Length); conversionStm.Close(); rawSrcStm.Close(); bufStm.Close(); memStm.Close(); convStm.Close(); to16.Close(); channelStm.Close(); mixer.Close(); // 삭제 lExtension0.Remove(ls0[i]); lExtension1.Remove(ls1[i]); } else if (ls0[i].seq - ls1[i].seq < 0) { // ls0 만 믹싱 // ls0 원본에 byte[] 붙임 > 원본 byte[]를 wavesream 으로 변환 > wave 파일로 저장 // 믹싱 // 코덱 종류에 따라서 바이트 길이는 달라질 수 있다. 실제로 만들 때 경우의 수 확인하고 만들어야 한다. byte[] wavSrc0 = new byte[160]; byte[] wavSrc1 = new byte[160]; Array.Copy(ls0[i].voice, 12, wavSrc0, 0, wavSrc0.Length); Array.Copy(ls1[i].voice, 12, wavSrc1, 0, wavSrc1.Length); WaveMixerStream32 mixer = new WaveMixerStream32(); //mixer.AutoStop = true; WaveChannel32 channelStm = null; MemoryStream memStm = null; BufferedStream bufStm = null; RawSourceWaveStream rawSrcStm = null; WaveFormatConversionStream conversionStm = null; for (int j = 0; j < 2; j++) { if (j == 0) { memStm = new MemoryStream(wavSrc0); } else { memStm = new MemoryStream(wavSrc1); } bufStm = new BufferedStream(memStm); rawSrcStm = new RawSourceWaveStream(bufStm, mulawFormat); conversionStm = new WaveFormatConversionStream(pcmFormat, rawSrcStm); channelStm = new WaveChannel32(conversionStm); mixer.AddInputStream(channelStm); } mixer.Position = 0; Wave32To16Stream to16 = new Wave32To16Stream(mixer); var convStm = new WaveFormatConversionStream(pcmFormat, to16); byte[] tobyte = new byte[(int)convStm.Length]; int chk = convStm.Read(tobyte, 0, (int)convStm.Length); Buffer.BlockCopy(tobyte, 0, buffWriting, i * tobyte.Length, tobyte.Length); conversionStm.Close(); rawSrcStm.Close(); bufStm.Close(); memStm.Close(); convStm.Close(); to16.Close(); channelStm.Close(); mixer.Close(); // 삭제 lExtension0.Remove(ls0[i]); ls1.Insert(i + 1, ls1[i]); } else if (ls0[i].seq - ls1[i].seq > 0) { // ls1 만 믹싱 // ls1 원본에 byte[] 붙임 > 원본 byte[]를 wavesream 으로 변환 > wave 파일로 저장 // 믹싱 // 코덱 종류에 따라서 바이트 길이는 달라질 수 있다. 실제로 만들 때 경우의 수 확인하고 만들어야 한다. byte[] wavSrc0 = new byte[160]; byte[] wavSrc1 = new byte[160]; Array.Copy(ls0[i].voice, 12, wavSrc0, 0, wavSrc0.Length); Array.Copy(ls1[i].voice, 12, wavSrc1, 0, wavSrc1.Length); WaveMixerStream32 mixer = new WaveMixerStream32(); //mixer.AutoStop = true; WaveChannel32 channelStm = null; MemoryStream memStm = null; BufferedStream bufStm = null; RawSourceWaveStream rawSrcStm = null; WaveFormatConversionStream conversionStm = null; for (int j = 0; j < 2; j++) { if (j == 0) { memStm = new MemoryStream(wavSrc0); } else { memStm = new MemoryStream(wavSrc1); } bufStm = new BufferedStream(memStm); rawSrcStm = new RawSourceWaveStream(bufStm, mulawFormat); conversionStm = new WaveFormatConversionStream(pcmFormat, rawSrcStm); channelStm = new WaveChannel32(conversionStm); mixer.AddInputStream(channelStm); } mixer.Position = 0; Wave32To16Stream to16 = new Wave32To16Stream(mixer); var convStm = new WaveFormatConversionStream(pcmFormat, to16); byte[] tobyte = new byte[(int)convStm.Length]; int chk = convStm.Read(tobyte, 0, (int)convStm.Length); Buffer.BlockCopy(tobyte, 0, buffWriting, i * tobyte.Length, tobyte.Length); conversionStm.Close(); rawSrcStm.Close(); bufStm.Close(); memStm.Close(); convStm.Close(); to16.Close(); channelStm.Close(); mixer.Close(); // 삭제 lExtension1.Remove(ls1[i]); ls0.Insert(i + 1, ls0[i]); } } // 10개의 버프를 바이트로 만들어 WaveFileWrite WaveFileWriting(buffWriting, processingFn); }