コード例 #1
0
ファイル: Audio.cs プロジェクト: chubbyerror/Gibbo2D
        /// <summary>
        /// Creates a wave stream from a selected file
        /// </summary>
        /// <param name="fileName">The file path to the audio file (.mp3 or .wav)</param>
        /// <param name="volume">The default desired volume</param>
        /// <param name="addToBuffer">Determines if the audio file is added to the buffer</param>
        /// <returns></returns>
        public static WaveChannel32 CreateInputStream(string fileName, float volume, bool addToBuffer)
        {
            WaveStream       stream;
            WaveOffsetStream offset;
            WaveChannel32    channel;

            if (fileName.ToLower().EndsWith(".wav"))
            {
                stream = new WaveFileReader(fileName);
            }
            else if (fileName.ToLower().EndsWith(".mp3"))
            {
                stream = new Mp3FileReader(fileName);
            }
            else
            {
                Console.WriteLine("Audio format not supported");
                return(null);
            }

            stream         = new WaveFormatConversionStream(new WaveFormat(44100, 1), stream);
            offset         = new WaveOffsetStream(stream);
            channel        = new WaveChannel32(offset);
            channel.Volume = volume;

            if (addToBuffer)
            {
                mixer.AddInputStream(channel);
            }

            return(channel);
        }
コード例 #2
0
        public AudioStream(string fileName)
        {
            var reader = new WaveFileReader(fileName);

            _offsetStream = new WaveOffsetStream(reader);
            _channelSteam = new WaveChannel32(_offsetStream);
            _muted        = false;
            _volume       = 1.0f;
        }
コード例 #3
0
        public MixDiffStream(string fileName)
        {
            WaveFileReader reader = new WaveFileReader(fileName);

            offsetStream = new WaveOffsetStream(reader);
            channelSteam = new WaveChannel32(offsetStream);
            muted        = false;
            volume       = 1.0f;
        }
コード例 #4
0
ファイル: SfxManager.cs プロジェクト: statementreply/MilliSim
        public void Play([CanBeNull] string fileName, [NotNull] IAudioFormat format)
        {
            if (fileName == null)
            {
                return;
            }

            fileName = Path.GetFullPath(fileName);

            PreloadSfx(fileName, format);

            var key = Environment.OSVersion.Platform == PlatformID.Win32NT ? fileName.ToLowerInvariant() : fileName;

            var currentTime = _audioManager.MixerTime;

            var free = GetFreeStream(key);

            if (free.OffsetStream != null)
            {
                free.OffsetStream.StartTime   = currentTime;
                free.OffsetStream.CurrentTime = currentTime;
                _playingStates[free.Index]    = true;
                _audioManager.AddInputStream(free.OffsetStream, Volume);
                return;
            }

            var(data, waveFormat) = _preloaded[key];

            var source = new RawSourceWaveStream(data, 0, data.Length, waveFormat);

            // Offset requires 16-bit integer input.
            WaveStream toOffset;

            if (AudioHelper.NeedsFormatConversionFrom(waveFormat, RequiredFormat))
            {
                toOffset = new ResamplerDmoStream(source, RequiredFormat);
            }
            else
            {
                toOffset = source;
            }

            var offset = new WaveOffsetStream(toOffset, currentTime, TimeSpan.Zero, toOffset.TotalTime);

            _audioManager.AddInputStream(offset, Volume);

            lock (_queueLock) {
                _playingWaveStreams.Add((key, offset, toOffset, source));
            }

            _playingStates.Add(true);
        }
コード例 #5
0
ファイル: SfxManager.cs プロジェクト: statementreply/MilliSim
        public void PlayLooped([CanBeNull] string fileName, [NotNull] IAudioFormat format, [NotNull] object state)
        {
            if (fileName == null)
            {
                return;
            }

            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }

            if (_loopedStreams.ContainsKey(state))
            {
                return;
            }

            fileName = Path.GetFullPath(fileName);

            PreloadSfx(fileName, format);

            var key = Environment.OSVersion.Platform == PlatformID.Win32NT ? fileName.ToLowerInvariant() : fileName;

            var currentTime = _audioManager.MixerTime;

            var(data, waveFormat) = _preloaded[key];

            var source = new RawSourceWaveStream(data, 0, data.Length, waveFormat);

            var looped = new LoopedWaveStream(source, LoopedWaveStream.DefaultMaxLoops);

            // Offset requires 16-bit integer input.
            WaveStream toOffset;

            if (AudioHelper.NeedsFormatConversionFrom(waveFormat, RequiredFormat))
            {
                toOffset = new ResamplerDmoStream(looped, RequiredFormat);
            }
            else
            {
                toOffset = looped;
            }

            var offset = new WaveOffsetStream(toOffset, currentTime, TimeSpan.Zero, toOffset.TotalTime);

            _audioManager.AddInputStream(offset, Volume);

            lock (_queueLock) {
                _loopedStreams[state] = (offset, toOffset, looped, source);
            }
        }
コード例 #6
0
        private WaveOffsetStream CreateStream(Stream dataStream, string fileName, TimeSpan startTime, out int index)
        {
            var          fileNames      = _fileNames;
            var          soundStreams   = _soundStreams;
            MemoryStream templateMemory = null;

            if (fileNames.Contains(fileName))
            {
                for (var i = 0; i < fileNames.Count; ++i)
                {
                    if (fileNames[i] == fileName)
                    {
                        templateMemory = soundStreams[i];
                        break;
                    }
                }
            }

            fileNames.Add(fileName);
            MemoryStream memory;

            if (templateMemory != null)
            {
                memory = new MemoryStream(templateMemory.Capacity);
                templateMemory.WriteTo(memory);
            }
            else
            {
                if (dataStream == null)
                {
                    throw new ArgumentNullException(nameof(dataStream), "When not using a cache, the data stream must not be null.");
                }
                memory = new MemoryStream((int)dataStream.Length);
                dataStream.CopyTo(memory);
            }
            memory.Seek(0, SeekOrigin.Begin);
            memory.Capacity = (int)memory.Length;
            soundStreams.Add(memory);

            // The SFX files were provided so just keep it the 44.1kHz/16bits/stereo.
            var waveProvider = new RawSourceWaveStream(memory, DefaultWaveFormat);

            _waveStreams.Add(waveProvider);
            _playingList.Add(false);
            var waveOffsetStream = new WaveOffsetStream(waveProvider, startTime, TimeSpan.Zero, waveProvider.TotalTime);

            _waveOffsetStreams.Add(waveOffsetStream);
            _mixerInputWaveStreams.Add(null);
            index = _waveOffsetStreams.Count - 1;
            return(waveOffsetStream);
        }
コード例 #7
0
        private SfxItem LoadSfx(string fileName)
        {
            if (!_fileNames.Contains(fileName))
            {
                _fileNames.Add(fileName);
            }

            var sfx = new SfxItem();

            byte[]   data;
            int      sampleRate;
            TimeSpan totalTime;

            using (var waveReader = new WaveFileReader(fileName)) {
                sampleRate = waveReader.WaveFormat.SampleRate;
                totalTime  = waveReader.TotalTime;

                WaveStream waveStream;

                if (AudioManager.NeedsConversion(waveReader.WaveFormat, AudioManager.StandardFormat))
                {
                    waveStream = new WaveFormatConversionStream(AudioManager.StandardFormat, waveReader);
                }
                else
                {
                    waveStream = waveReader;
                }

                using (var offsetStream = new WaveOffsetStream(waveStream)) {
                    offsetStream.StartTime = PreviewingSettings.SfxOffset;
                    data = offsetStream.ReadToEnd();
                }
            }

            sfx.AudioBuffer = new AudioBuffer(_audioManager.AudioContext);
            sfx.AudioSource = new AudioSource(_audioManager.AudioContext);
            sfx.AudioBuffer.BufferData(data, sampleRate);
            sfx.AudioSource.Bind(sfx.AudioBuffer);
            sfx.Data       = data;
            sfx.FileName   = fileName;
            sfx.SampleRate = sampleRate;
            sfx.TotalTime  = totalTime;

            return(sfx);
        }
コード例 #8
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);
            }
        }
コード例 #9
0
ファイル: Music.cs プロジェクト: statementreply/MilliSim
        internal Music(AudioManager audioManager, [NotNull] WaveStream waveStream, float volume, bool externalWaveStream)
        {
            _audioManager         = audioManager;
            _baseWaveStream       = waveStream;
            _isExternalWaveStream = externalWaveStream;

            if (AudioHelper.NeedsFormatConversionFrom(waveStream.WaveFormat, RequiredFormat))
            {
                _formatConvertedStream = new ResamplerDmoStream(waveStream, RequiredFormat);
            }
            else
            {
                _formatConvertedStream = waveStream;
            }

            OffsetStream = new WaveOffsetStream(_formatConvertedStream);

            IsStopped = true;

            CachedVolume = volume;
        }
コード例 #10
0
ファイル: TestMix.cs プロジェクト: miktemk/AudioBooker
        public TestMix()
        {
            //WaveStream str1 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\guitar1.mp3");
            //WaveStream str2 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\molecules.mp3");
            //WaveMixerStream32 mix = new WaveMixerStream32(new [] {str1, str2}, false);

            var background = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\ferriss.mp3");
            var message    = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\guitar1.mp3");

            var mixer = new WaveMixerStream32();

            mixer.AutoStop = true;

            var messageOffset    = background.TotalTime;
            var messageOffsetted = new WaveOffsetStream(message, TimeSpan.FromSeconds(1.5), TimeSpan.Zero, message.TotalTime.Subtract(TimeSpan.FromSeconds(1)));

            var background32 = new WaveChannel32(background);

            background32.PadWithZeroes = false;
            background32.Volume        = 0.9f;

            var message32 = new WaveChannel32(messageOffsetted);

            message32.PadWithZeroes = false;
            message32.Volume        = 0.7f;

            var        s1           = new RawSourceWaveStream(background32, new WaveFormat(8000, 16, 1));
            var        s2           = new RawSourceWaveStream(message32, new WaveFormat(8000, 16, 1));
            WaveFormat targetFormat = WaveFormat.CreateIeeeFloatWaveFormat(128, 2);
            var        ss1          = new WaveFormatConversionStream(targetFormat, background32);

            //var c = new WaveFormatConversionStream(WaveFormat.CreateALawFormat(8000, 1), background32);
            //var stream_background32 = new WaveFormatConversionStream(new WaveFormat(256, 32, 2), background32);
            //var stream_message32 = new WaveFormatConversionStream(new WaveFormat(256, 32, 2), message32);
            mixer.AddInputStream(s1);
            mixer.AddInputStream(s2);

            WaveFileWriter.CreateWaveFile("mycomposed.wav", new Wave32To16Stream(mixer));
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: bnylund/AudioConverter
        /// <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");
        }
コード例 #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);
    }
コード例 #13
0
ファイル: Program.cs プロジェクト: jakelly/SermonProcessor
        private static void AddIntroOutro(string SermonFileName  = "",
                                          string IntroFileName   = "",
                                          string OutroFileName   = "",
                                          double StartSermonTime = 0,
                                          double StartOutroTime  = 0,
                                          string ResultingFile   = "")
        {
            if (String.IsNullOrWhiteSpace(SermonFileName))
            {
                throw new ArgumentException("SermonFileName must reference a valid file.");
            }

            if (String.IsNullOrWhiteSpace(IntroFileName))
            {
                throw new ArgumentException("IntroFileName must reference a valid file.");
            }

            if (String.IsNullOrWhiteSpace(OutroFileName))
            {
                throw new ArgumentException("OutroFileName must reference a valid file.");
            }

            if (String.IsNullOrWhiteSpace(ResultingFile))
            {
                ResultingFile = Settings.Default.IntroOutroDirectory;
            }


            WaveFileReader intro = new WaveFileReader(IntroFileName);
            WaveFileReader outro = new WaveFileReader(OutroFileName);
            WaveFileReader audio = new WaveFileReader(SermonFileName);

            WaveMixerStream32 mixer = new WaveMixerStream32();
            //mixer.AutoStop;

            WaveOffsetStream audioOffsetted = new WaveOffsetStream(
                audio,
                TimeSpan.FromSeconds(StartSermonTime), //N seconds after start of intro.
                TimeSpan.Zero,
                audio.TotalTime);

            TimeSpan outroOffset = TimeSpan.FromSeconds(StartSermonTime) + audio.TotalTime - TimeSpan.FromSeconds(StartOutroTime);

            WaveOffsetStream outroOffsetted = new WaveOffsetStream(
                outro,
                outroOffset,
                TimeSpan.Zero,
                outro.TotalTime);

            WaveChannel32 intro32 = new WaveChannel32(intro);

            intro32.PadWithZeroes = false;
            mixer.AddInputStream(intro32);

            WaveChannel32 outro32 = new WaveChannel32(outroOffsetted);

            outro32.PadWithZeroes = false;
            mixer.AddInputStream(outro32);

            WaveChannel32 audio32 = new WaveChannel32(audioOffsetted);

            audio32.PadWithZeroes = false;
            mixer.AddInputStream(audio32);


            FileInfo file = new FileInfo(SermonFileName);

            if (!Directory.Exists(ResultingFile))
            {
                Directory.CreateDirectory(ResultingFile);
            }

            string FileOut = String.Format(@"{0}\{1}", ResultingFile, file.Name);

            WaveFileWriter.CreateWaveFile(FileOut, new Wave32To16Stream(mixer));
        }