Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 4
0
        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);
        }