/// <summary> /// Finalises the wav writing and returns a list of all the files created /// </summary> /// <returns>System.String.</returns> public async Task <string> Finalise() { //drain the un-processed buffers on this object while (Buffer.Count > 0) { await Task.Delay(200); } var archiveFile = Path.Combine(Path.GetTempPath(), BotConstants.DefaultOutputFolder, _settings.MediaFolder, _processorId, $"{Guid.NewGuid()}.zip"); try { using (var stream = File.OpenWrite(archiveFile)) { using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create)) { // drain all the writers foreach (var writer in _writers.Values) { var localFiles = new List <string>(); var localArchive = archive; //protect the closure below var localFileName = writer.Filename; localFiles.Add(writer.Filename); await writer.FlushAsync(); writer.Dispose(); // Is Resampling and/or mono to stereo conversion required? if (_settings.AudioSettings.WavSettings != null) { // The resampling is required localFiles.Add(AudioFileUtils.ResampleAudio(localFileName, _settings.AudioSettings.WavSettings, _settings.IsStereo)); } else if (_settings.IsStereo) // Is Stereo audio required? { // Convert mono WAV to stereo localFiles.Add(AudioFileUtils.ConvertToStereo(localFileName)); } // Remove temporary saved local WAV file from the disk foreach (var localFile in localFiles) { await Task.Run(() => { var fInfo = new FileInfo(localFile); localArchive.CreateEntryFromFile(localFile, fInfo.Name, CompressionLevel.Optimal); File.Delete(localFile); }).ConfigureAwait(false); } } } } } finally { await End(); } return(archiveFile); }
/// <summary> /// Initialises the wav file writer. /// </summary> /// <param name="rootFolder">The root folder.</param> /// <param name="id">The identifier.</param> /// <returns>WavFileWriter.</returns> private WaveFileWriter InitialiseWavFileWriter(string rootFolder, string id) { var path = AudioFileUtils.CreateFilePath(rootFolder, $"{id}.wav"); // Initialize the Wave Format using the default PCM 16bit 16K supported by Teams audio settings var writer = new WaveFileWriter(path, new WaveFormat( rate: AudioConstants.DefaultSampleRate, bits: AudioConstants.DefaultBits, channels: AudioConstants.DefaultChannels)); _writers.Add(id, writer); return(writer); }