Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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);
         }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
 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);
 }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
        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();
        }
Exemplo n.º 10
0
        /// <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");
        }
Exemplo n.º 11
0
        /// <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;
            }
        }
Exemplo n.º 12
0
    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);
    }
Exemplo n.º 13
0
        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]);
                }
            }
        }
Exemplo n.º 14
0
        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);
        }