/// <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); }
public AudioStream(string fileName) { var reader = new WaveFileReader(fileName); _offsetStream = new WaveOffsetStream(reader); _channelSteam = new WaveChannel32(_offsetStream); _muted = false; _volume = 1.0f; }
public MixDiffStream(string fileName) { WaveFileReader reader = new WaveFileReader(fileName); offsetStream = new WaveOffsetStream(reader); channelSteam = new WaveChannel32(offsetStream); muted = false; volume = 1.0f; }
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); }
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); } }
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); }
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); }
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); } }
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; }
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)); }
/// <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"); }
public bool Merge(string nompartie) { if (nompartie != "") { XmlDocument doc = new XmlDocument(); doc.Load(Application.persistentDataPath + "/sauv.xml"); XmlElement root = doc.DocumentElement; if (root.HasChildNodes) { XmlNodeList ToutesLesParties = root.ChildNodes; int NombreParties = ToutesLesParties.Count; for (int i = 0; i < NombreParties; i++) { XmlElement Partie = ToutesLesParties[i] as XmlElement; String nom = Partie.GetAttribute("name"); if (nom == nompartie) { WaveFileReader[] batterie; WaveFileReader[] synthe; WaveFileReader[] melodie; WaveFileReader[] guitare; WaveFileReader[] basse; WaveFileReader[] piano; WaveChannel32[] batterieStream; WaveChannel32[] syntheStream; WaveChannel32[] melodieStream; WaveChannel32[] guitareStream; WaveChannel32[] basseStream; WaveChannel32[] pianoStream; WaveOffsetStream[] batterieDecalage; WaveOffsetStream[] syntheDecalage; WaveOffsetStream[] melodieDecalage; WaveOffsetStream[] guitareDecalage; WaveOffsetStream[] basseDecalage; WaveOffsetStream[] pianoDecalage; int decalage = 0; if (Partie.HasChildNodes) { var mixer = new WaveMixerStream32(); mixer.AutoStop = true; XmlNodeList ToutesLesSequences = Partie.ChildNodes; int NombreSequences = ToutesLesSequences.Count; batterie = new WaveFileReader[NombreSequences]; synthe = new WaveFileReader[NombreSequences]; melodie = new WaveFileReader[NombreSequences]; guitare = new WaveFileReader[NombreSequences]; basse = new WaveFileReader[NombreSequences]; piano = new WaveFileReader[NombreSequences]; piano[0] = null; batterie[0] = null; synthe[0] = null; melodie[0] = null; guitare[0] = null; basse[0] = null; batterieDecalage = new WaveOffsetStream[NombreSequences]; syntheDecalage = new WaveOffsetStream[NombreSequences]; melodieDecalage = new WaveOffsetStream[NombreSequences]; guitareDecalage = new WaveOffsetStream[NombreSequences]; basseDecalage = new WaveOffsetStream[NombreSequences]; pianoDecalage = new WaveOffsetStream[NombreSequences]; batterieStream = new WaveChannel32[NombreSequences]; syntheStream = new WaveChannel32[NombreSequences]; melodieStream = new WaveChannel32[NombreSequences]; guitareStream = new WaveChannel32[NombreSequences]; basseStream = new WaveChannel32[NombreSequences]; pianoStream = new WaveChannel32[NombreSequences]; string[] batterieSrc = new string[NombreSequences]; string[] syntheSrc = new string[NombreSequences]; string[] melodieSrc = new string[NombreSequences]; string[] guitareSrc = new string[NombreSequences]; string[] basseSrc = new string[NombreSequences]; string[] pianoSrc = new string[NombreSequences]; for (int k = 0; k < NombreSequences; k++) { batterieSrc[k] = ""; syntheSrc[k] = ""; melodieSrc[k] = ""; guitareSrc[k] = ""; basseSrc[k] = ""; pianoSrc[k] = ""; } for (int j = 0; j < NombreSequences; j++) { XmlElement Sequence = ToutesLesSequences[j] as XmlElement; decalage = j * 8; XmlElement Instru = Sequence.FirstChild as XmlElement; string type = Instru.GetAttribute("type"); string src = Instru.GetAttribute("src"); switch (type) { case "piano": if (src != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } pianoSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } } break; case "basse": if (src != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } basseSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "guitare": if (src != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } guitareSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "drum1": if (src != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } batterieSrc[j] = src; if (j > 0) { if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "synthe": if (src != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } syntheSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "melodie": if (src != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + src); } melodieSrc[j] = src; if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; case "none": if (j > 0) { if (batterieSrc[j - 1] != "") { batterie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + batterieSrc[j - 1]); batterieSrc[j] = batterieSrc[j - 1]; } if (melodieSrc[j - 1] != "") { melodie[j] = new WaveFileReader(Application.dataPath + "/Resources/" + melodieSrc[j - 1]); melodieSrc[j] = melodieSrc[j - 1]; } if (syntheSrc[j - 1] != "") { synthe[j] = new WaveFileReader(Application.dataPath + "/Resources/" + syntheSrc[j - 1]); syntheSrc[j] = syntheSrc[j - 1]; } if (guitareSrc[j - 1] != "") { guitare[j] = new WaveFileReader(Application.dataPath + "/Resources/" + guitareSrc[j - 1]); guitareSrc[j] = guitareSrc[j - 1]; } if (basseSrc[j - 1] != "") { basse[j] = new WaveFileReader(Application.dataPath + "/Resources/" + basseSrc[j - 1]); basseSrc[j] = basseSrc[j - 1]; } if (pianoSrc[j - 1] != "") { piano[j] = new WaveFileReader(Application.dataPath + "/Resources/" + pianoSrc[j - 1]); pianoSrc[j] = pianoSrc[j - 1]; } } break; } if (piano[j] != null) { pianoDecalage[j] = new WaveOffsetStream(piano[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); pianoStream[j] = new WaveChannel32(pianoDecalage[j]); pianoStream[j].PadWithZeroes = false; mixer.AddInputStream(pianoStream[j]); } if (basse[j] != null) { basseDecalage[j] = new WaveOffsetStream(basse[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); basseStream[j] = new WaveChannel32(basseDecalage[j]); basseStream[j].PadWithZeroes = false; mixer.AddInputStream(basseStream[j]); } if (guitare[j] != null) { guitareDecalage[j] = new WaveOffsetStream(guitare[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); guitareStream[j] = new WaveChannel32(guitareDecalage[j]); guitareStream[j].PadWithZeroes = false; mixer.AddInputStream(guitareStream[j]); } if (batterie[j] != null) { batterieDecalage[j] = new WaveOffsetStream(batterie[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); batterieStream[j] = new WaveChannel32(batterieDecalage[j]); batterieStream[j].PadWithZeroes = false; mixer.AddInputStream(batterieStream[j]); } if (melodie[j] != null) { melodieDecalage[j] = new WaveOffsetStream(melodie[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); melodieStream[j] = new WaveChannel32(melodieDecalage[j]); melodieStream[j].PadWithZeroes = false; mixer.AddInputStream(melodieStream[j]); } if (synthe[j] != null) { syntheDecalage[j] = new WaveOffsetStream(synthe[j], TimeSpan.FromSeconds(decalage), TimeSpan.Zero, TimeSpan.FromSeconds(8)); syntheStream[j] = new WaveChannel32(syntheDecalage[j]); syntheStream[j].PadWithZeroes = false; mixer.AddInputStream(syntheStream[j]); } } var wave32 = new Wave32To16Stream(mixer); string nomSecure = nompartie; foreach (char c in System.IO.Path.GetInvalidFileNameChars()) { nomSecure = nompartie.Replace(c, '_'); } WaveFileWriter.CreateWaveFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "/" + nomSecure + ".wav", wave32); GameObject.Find("haut").GetComponent <Text>().text = "Le fichier " + nomSecure + ".wav"; return(true); } } } } } return(false); }
private 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)); }