public static void Main(string[] args) { var audioPath = @"vaiueo2d.wav"; var audioOutPath = @"vaiueo2d-out.wav"; var(x, fs, nbit) = AudioIO.WavRead(audioPath); var(f0, t) = Dio.Compute(x, fs); f0 = StoneMask.Compute(x, fs, t, f0); var fftSize = CheapTrick.GetFftSize(fs); var sp = CheapTrick.Compute(x, fs, t, f0, fftSize: fftSize); var ap = D4C.Compute(x, fs, t, f0, fftSize: fftSize); var ndim = 60; var mgc = Codec.CodeSpectralEnvelope(sp, fs, ndim); var bap = Codec.CodeAperiodicity(ap, fs); Console.WriteLine($"{audioPath}:"); Console.WriteLine($" input samples count: {x.Length}"); Console.WriteLine($" sampling rate: {fs}"); Console.WriteLine($" bit rate: {nbit}"); Console.WriteLine(); Console.WriteLine($" frame count: {f0.Length}"); Console.WriteLine($" fft size: {fftSize}"); Console.WriteLine($" sp width: {sp.GetLength(1)}"); Console.WriteLine(); Console.WriteLine($" mgc width: {ndim}"); Console.WriteLine($" bap width: {bap.GetLength(1)}"); Console.WriteLine(); for (int i = 0; i < f0.Length; i++) { f0[i] *= 1.6789; } sp = Codec.DecodeSpectralEnvelope(mgc, fs, fftSize); ap = Codec.DecodeAperiodicity(bap, fs, fftSize); var y = Synthesis.Compute(f0, sp, ap, fs); Console.WriteLine($"--> {audioOutPath}"); AudioIO.WavWrite(y, fs, nbit, audioOutPath); }
public Track(string path, string checksum) : this() { Path = path; Name = Utils.NameFromPath(path); Checksum = checksum ?? AudioIO.Mp3Md5Hash(path); }
public void ExportToText(string outputFile) { AudioIO.TextExport(this, outputFile); }
public void ExportMix(BackgroundWorker bw, TrackCollection collection, string outputFile) { _savedOverlay = null; _tempWavPath = _tempDirPath + "automix_1.wav"; _waveFileWriter = new WaveFileWriter(_tempWavPath, AudioIO.TempWaveFormat); var count = 1; var tempFileDuration = 0; _currentMixDuration = 0; Track firstTrack = collection[0]; int fadeInDurationPreviousTrack = CalculateFadeInDuration(firstTrack); int nbTracks = collection.Count; for (int i = 0; i < nbTracks && MixDuration != 0; i++) { Track track = collection[i]; if (bw.CancellationPending) { _waveFileWriter.Close(); break; } //TO DO : change this after transition start tempFileDuration += track.Duration; if (tempFileDuration > 2700000) //45 minutes { tempFileDuration = track.Duration; CreateNewTempFile(); } if (i == 0) { _currentMixDuration += CalculateFadeInDuration(firstTrack); } if (track != collection[nbTracks - 1]) { if (_currentMixDuration < MixDuration) { Track nextTrack = collection[i + 1]; fadeInDurationPreviousTrack = FadeInOut(track, nextTrack, fadeInDurationPreviousTrack, collection); } } else { if (_currentMixDuration < MixDuration) { FadeInOut(track, track, fadeInDurationPreviousTrack, collection); } } bw.ReportProgress(1000 * count++ / (collection.Count + 2)); } if (!bw.CancellationPending) { FinalizeLastTempFile(); bw.ReportProgress(1000 * count++ / (collection.Count + 2)); AudioIO.WavToMp3(_tempFileList, outputFile, AudioIO.CreateId3TagData(outputFile)); bw.ReportProgress(1000 * count++ / (collection.Count + 2)); } DeleteTempFiles(); Console.WriteLine(_currentMixDuration); }