Пример #1
0
        private void SetupSampleSource(ISampleSource aSampleSource)
        {
            const FftSize fftSize = FftSize.Fft64;
            //create a spectrum provider which provides fft data based on some input
            var spectrumProvider = new BasicSpectrumProvider(aSampleSource.WaveFormat.Channels,
                                                             aSampleSource.WaveFormat.SampleRate, fftSize);

            //
            ////linespectrum and voiceprint3dspectrum used for rendering some fft data
            ////in oder to get some fft data, set the previously created spectrumprovider
            _MusicSpectrum = new MusicSpectrum(fftSize)
            {
                SpectrumProvider = spectrumProvider,
                UseAverage       = true,
                Count            = 30,
                IsXLogScale      = true,
                ScalingStrategy  = ScalingStrategy.Sqrt
            };
            //_voicePrint3DSpectrum = new VoicePrint3DSpectrum(fftSize)
            //{
            //    SpectrumProvider = spectrumProvider,
            //    UseAverage = true,
            //    PointCount = 200,
            //    IsXLogScale = true,
            //    ScalingStrategy = ScalingStrategy.Sqrt
            //};
            //
            //the SingleBlockNotificationStream is used to intercept the played samples
            var notificationSource = new SingleBlockNotificationStream(aSampleSource);

            //pass the intercepted samples as input data to the spectrumprovider (which will calculate a fft based on them)
            notificationSource.SingleBlockRead += (s, a) => spectrumProvider.Add(a.Left, a.Right);

            _source = notificationSource.ToWaveSource(16);
        }
Пример #2
0
        private async Task <double> QueryAndHash(CancellationToken cancellationToken)
        {
            double queryLength = 0d;
            Dictionary <int, Dictionary <int, int> > tmpMap = new Dictionary <int, Dictionary <int, int> >();

            while (!realtimeCollection.IsAddingCompleted && !cancellationToken.IsCancellationRequested)
            {
                float[] audioSamples;

                try
                {
                    if (!realtimeCollection.TryTake(out audioSamples, MillisecondsDelay, cancellationToken))
                    {
                        continue;
                    }
                }
                catch (OperationCanceledException)
                {
                    return(queryLength);
                }
                MusicSpectrum musicSpectrum = new MusicSpectrum(dataStorage);
                int           totalSize     = audioSamples.Length;

                int amountPossible = totalSize / 4096;

                tmpMap = musicSpectrum.FFTAnalys(tmpMap, audioSamples, amountPossible);
                var q = musicSpectrum.Matching(tmpMap);
                Console.WriteLine(q.BestMath);
            }
            return(queryLength);
        }
Пример #3
0
 public IUsingFingerprintServices From(float[] audioSamples, Song song)
 {
     createFingerprintsMethod = () =>
     {
         MusicSpectrum music = new MusicSpectrum(dataStorageToUse);
         music.InsertSongToDB(audioSamples, song);
     };
     return(this);
 }
Пример #4
0
 public IUsingFingerprintServices From(string pathToAudioFile)
 {
     createFingerprintsMethod = () =>
     {
         MusicSpectrum music = new MusicSpectrum(dataStorageToUse);
         music.InsertSongToDB(audioServiceToUse, pathToAudioFile);
     };
     return(this);
 }
Пример #5
0
 public IUsingQueryModelService From(float[] audioSamples)
 {
     createQueryMethod = () =>
     {
         MusicSpectrum music = new MusicSpectrum(dataStorageToUse);
         return(music.SeekSong(audioSamples));
     };
     return(this);
 }
Пример #6
0
 public IUsingQueryServices From(string pathToAudioFile)
 {
     createQueryMethod = () =>
     {
         MusicSpectrum music = new MusicSpectrum(dataStorageToUse);
         return(music.SeekSong(audioServiceToUse, pathToAudioFile));
     };
     return(this);
 }