public List <bool[]> CreateFingerprintsFromAudioSamples(float[] samples, WorkUnitParameterObject param, out double[][] logSpectrogram)
        {
            IFingerprintingConfiguration configuration             = param.FingerprintingConfiguration;
            AudioServiceConfiguration    audioServiceConfiguration = new AudioServiceConfiguration
            {
                LogBins           = configuration.LogBins,
                LogBase           = configuration.LogBase,
                MaxFrequency      = configuration.MaxFrequency,
                MinFrequency      = configuration.MinFrequency,
                Overlap           = configuration.Overlap,
                SampleRate        = configuration.SampleRate,
                WindowSize        = configuration.WindowSize,
                NormalizeSignal   = configuration.NormalizeSignal,
                UseDynamicLogBase = configuration.UseDynamicLogBase
            };

            // store the log spectrogram in the out variable
            logSpectrogram = AudioService.CreateLogSpectrogram(
                samples, configuration.WindowFunction, audioServiceConfiguration);

            return(this.CreateFingerprintsFromLogSpectrum(
                       logSpectrogram,
                       configuration.Stride,
                       configuration.FingerprintLength,
                       configuration.Overlap,
                       configuration.TopWavelets));
        }
 public List<bool[]> CreateFingerprints(float[] samples, IFingerprintingConfiguration fingerprintingConfiguration)
 {
     float[][] spectrum = spectrumService.CreateLogSpectrogram(samples, fingerprintingConfiguration);
     return CreateFingerprintsFromLogSpectrum(
         spectrum,
         fingerprintingConfiguration.Stride,
         fingerprintingConfiguration.FingerprintLength,
         fingerprintingConfiguration.Overlap,
         fingerprintingConfiguration.TopWavelets);
 }
        public WinDrawningTool(IFingerprintService fingerprintService, IAudioService audioService, ITagService tagService, IWorkUnitBuilder workUnitBuilder, IFingerprintingConfiguration fingerprintingConfiguration)
        {
            this.fingerprintService = fingerprintService;
            this.audioService = audioService;
            this.tagService = tagService;
            this.workUnitBuilder = workUnitBuilder;
            this.fingerprintingConfiguration = fingerprintingConfiguration;

            InitializeComponent();
            Icon = Resources.Sound;

            _lbImageTypes.Items.Add("Single file");
            _lbImageTypes.Items.Add("Separated images");
        }
        public float[][] CreateLogSpectrogram(float[] samples, IFingerprintingConfiguration configuration)
        {
            if (configuration.NormalizeSignal)
            {
                NormalizeInPlace(samples);
            }

            int width = (samples.Length - configuration.WdftSize) / configuration.Overlap; /*width of the image*/
            float[][] frames = new float[width][];
            int[] logFrequenciesIndexes = GenerateLogFrequencies(configuration);
            for (int i = 0; i < width; i++)
            {
                float[] complexSignal = fftService.FFTForward(samples, i * configuration.Overlap, configuration.WdftSize);
                frames[i] = ExtractLogBins(complexSignal, logFrequenciesIndexes, configuration.LogBins);
            }

            return frames;
        }
Exemplo n.º 5
0
        public WinDrawningTool(
            IAudioService audioService,
            ITagService tagService,
            IFingerprintUnitBuilder fingerprintUnitBuilder,
            IFingerprintingConfiguration fingerprintingConfiguration,
            IImageService imageService,
            ISpectrumService spectrumService)
        {
            this.audioService = audioService;
            this.tagService = tagService;
            this.fingerprintUnitBuilder = fingerprintUnitBuilder;
            this.fingerprintingConfiguration = fingerprintingConfiguration;
            this.imageService = imageService;
            this.spectrumService = spectrumService;

            InitializeComponent();
            Icon = Resources.Sound;

            _lbImageTypes.Items.Add("Single file");
            _lbImageTypes.Items.Add("Separated images");
        }
Exemplo n.º 6
0
        /// <summary>
        /// Gets the spectrum of the wavelet decomposition before extracting top wavelets and binary transformation
        /// </summary>
        /// <param name="spectrum">
        /// The spectrum.
        /// </param>
        /// <param name="configuration">
        /// The configuration.
        /// </param>
        /// <returns>
        /// Image to be saved
        /// </returns>
        public static Image GetWaveletSpectralImage(float[][] spectrum, IFingerprintingConfiguration configuration)
        {
            List<float[][]> wavelets = new List<float[][]>();
            int specLen = spectrum.GetLength(0);
            int start = configuration.Stride.FirstStrideSize / configuration.Overlap;
            int logbins = configuration.LogBins;
            int fingerprintLength = configuration.FingerprintLength;
            int overlap = configuration.Overlap;
            while (start + fingerprintLength < specLen)
            {
                float[][] frames = new float[fingerprintLength][];
                for (int i = 0; i < fingerprintLength; i++)
                {
                    frames[i] = new float[logbins];
                    Array.Copy(spectrum[start + i], frames[i], logbins);
                }

                start += fingerprintLength + (configuration.Stride.StrideSize / overlap);
                wavelets.Add(frames);
            }

            const int ImagesPerRow = 5; /*5 bitmap images per line*/
            const int SpaceBetweenImages = 10; /*10 pixel space between images*/
            int width = wavelets[0].GetLength(0);
            int height = wavelets[0][0].Length;
            int fingersCount = wavelets.Count;
            int rowCount = (int)Math.Ceiling((float)fingersCount / ImagesPerRow);

            int imageWidth = (ImagesPerRow * (width + SpaceBetweenImages)) + SpaceBetweenImages;
            int imageHeight = (rowCount * (height + SpaceBetweenImages)) + SpaceBetweenImages;

            Bitmap image = new Bitmap(imageWidth, imageHeight, PixelFormat.Format16bppRgb565);
            /*Change the background of the bitmap*/
            for (int i = 0; i < imageWidth; i++)
            {
                for (int j = 0; j < imageHeight; j++)
                {
                    image.SetPixel(i, j, Color.White);
                }
            }

            double maxValue = wavelets.Max((wavelet) => wavelet.Max((column) => column.Max()));
            int verticalOffset = SpaceBetweenImages;
            int horizontalOffset = SpaceBetweenImages;
            int count = 0;
            double max = wavelets.Max(wav => wav.Max(w => w.Max(v => Math.Abs(v))));
            foreach (float[][] wavelet in wavelets)
            {
                for (int i = 0; i < width /*128*/; i++)
                {
                    for (int j = 0; j < height /*32*/; j++)
                    {
                        Color color = ValueToBlackWhiteColor(wavelet[i][j], max / 4);
                        image.SetPixel(i + horizontalOffset, j + verticalOffset, color);
                    }
                }
                count++;
                if (count % ImagesPerRow == 0)
                {
                    verticalOffset += height + SpaceBetweenImages;
                    horizontalOffset = SpaceBetweenImages;
                }
                else
                {
                    horizontalOffset += width + SpaceBetweenImages;
                }
            }

            return image;
        }
        private int[] GenerateStaticLogFrequencies(IFingerprintingConfiguration configuration)
        {
            double logMin = Math.Log(configuration.MinFrequency, configuration.LogBase);
            double logMax = Math.Log(configuration.MaxFrequency, configuration.LogBase);

            double delta = (logMax - logMin) / configuration.LogBins;

            int[] indexes = new int[configuration.LogBins + 1];
            double accDelta = 0;
            for (int i = 0; i <= configuration.LogBins /*32 octaves*/; ++i)
            {
                float freq = (float)Math.Pow(configuration.LogBase, logMin + accDelta);
                accDelta += delta; // accDelta = delta * i
                /*Find the start index in array from which to start the summation*/
                indexes[i] = FreqToIndex(freq, configuration.SampleRate, configuration.WdftSize);
            }

            return indexes;
        }
        private int[] GenerateLogFrequenciesDynamicBase(IFingerprintingConfiguration configuration)
        {
            double logBase =
                Math.Exp(
                    Math.Log((float)configuration.MaxFrequency / configuration.MinFrequency) / configuration.LogBins);
            double mincoef = (float)configuration.WdftSize / configuration.SampleRate * configuration.MinFrequency;
            int[] indexes = new int[configuration.LogBins + 1];
            for (int j = 0; j < configuration.LogBins + 1; j++)
            {
                int start = (int)((Math.Pow(logBase, j) - 1.0) * mincoef);
                indexes[j] = start + (int)mincoef;
            }

            return indexes;
        }
        /// <summary>
        /// Get logarithmically spaced indices
        /// </summary>
        /// <param name="configuration">
        /// The configuration for log frequencies
        /// </param>
        /// <returns>
        /// Log indexes
        /// </returns>
        private int[] GenerateLogFrequencies(IFingerprintingConfiguration configuration)
        {
            if (configuration.UseDynamicLogBase)
            {
                return GenerateLogFrequenciesDynamicBase(configuration);
            }

            return GenerateStaticLogFrequencies(configuration);
        }
Exemplo n.º 10
0
		public static void SaveFingerprintingDebugImages(string fileName, double[][] logSpectrogram, List<bool[]> fingerprints, FingerprintService fingerprintService, IFingerprintingConfiguration fingerprintConfig) {
			
			ImageService imageService = new ImageService(fingerprintService.SpectrumService, fingerprintService.WaveletService);
			
			int fingerprintsPerRow = 2;
			imageService.GetSpectrogramImage(logSpectrogram, logSpectrogram.Length, logSpectrogram[0].Length).Save(fileName + "_spectrogram.png");
			imageService.GetWaveletsImages(logSpectrogram, fingerprintConfig.Stride, fingerprintConfig.FingerprintLength, fingerprintConfig.Overlap, fingerprintsPerRow).Save(fileName + "_wavelets.png");
			imageService.GetLogSpectralImages(logSpectrogram, fingerprintConfig.Stride, fingerprintConfig.FingerprintLength, fingerprintConfig.Overlap, fingerprintsPerRow).Save(fileName + "_spectrograms.png");
			imageService.GetImageForFingerprints(fingerprints, fingerprintConfig.FingerprintLength, fingerprintConfig.LogBins, fingerprintsPerRow).Save(fileName + "_fingerprints.png");
		}
 public void SetUp()
 {
     modelService = new ModelService(new MsSqlDatabaseProviderFactory(new DefaultConnectionStringFactory()), new ModelBinderFactory());
     fingerprintService = new FingerprintService(new FingerprintDescriptor(), new SpectrumService(new CachedFFTWService(new FFTWService86())), new WaveletService(new StandardHaarWaveletDecomposition()));
     defaultConfiguration = new DefaultFingerprintingConfiguration();
     var mockedPermutations = new Mock<IPermutations>();
     mockedPermutations.Setup(perms => perms.GetPermutations()).Returns(new int[1][]);
     permutations = mockedPermutations.Object;
     fingerprintUnitBuilderWithBass = new FingerprintUnitBuilder(fingerprintService, new BassAudioService(), new MinHashService(permutations));
     #pragma warning disable 612,618
     fingerprintUnitBuilderWithDirectSound = new FingerprintUnitBuilder(fingerprintService, new DirectSoundAudioService(), new MinHashService(permutations));
     #pragma warning restore 612,618
 }
        public void SetUp()
        {
            connectionstring = ConnectionString;
            dalManager = new DaoGateway(connectionstring);
            fingerprintingServiceWithBass = new FingerprintService(
                new BassAudioService(), new FingerprintDescriptor(), new HaarWavelet());

            fingerprintingServiceWithDirectSound = new FingerprintService(
                new DirectSoundAudioService(), new FingerprintDescriptor(), new HaarWavelet());

            fingerprintingConfiguration = new DefaultFingerprintingConfiguration();
            workUnitBuilder = new WorkUnitBuilder();
        }