Skip to content

Commit

Permalink
Lets stick with default configuration, no need to specify it every ti…
Browse files Browse the repository at this point in the history
…me a fingerprint/query command is created. This is easier to follow approach.
  • Loading branch information
AddictedCS committed Mar 8, 2015
1 parent 1ceaf65 commit 145055e
Show file tree
Hide file tree
Showing 18 changed files with 73 additions and 127 deletions.
6 changes: 2 additions & 4 deletions README.md
Expand Up @@ -18,16 +18,15 @@ public void StoreAudioFileFingerprintsInDatabaseForLaterRetrieval(string pathToA
var trackReference = modelService.InsertTrack(track);

// create sub-fingerprints and its hash representation
var hashDatas = fingerprintCommandBuilder
var hashedFingerprints = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(pathToAudioFile)
.WithDefaultFingerprintConfig()
.UsingServices(audioService)
.Hash()
.Result;

// store sub-fingerprints and its hash representation in the database
modelService.InsertHashDataForTrack(hashDatas, trackReference);
modelService.InsertHashedFingerprintsForTrack(hashedFingerprints, trackReference);
}
```
The default storage, which comes bundled with SoundFingerprinting package, is a plain in memory storage, managed by <code>InMemoryModelService</code>. In case you would like to store fingerprints in a perstistent database you can take advantage of MSSQL integration available in [SoundFingerprinting.SQL](https://www.nuget.org/packages/SoundFingerprinting.SQL) package via <code>SqlModelService</code> class. The MSSQL database initialization script can be find [here](src/Scripts/DBScript.sql). Do not forget to add connection string <code>FingerprintConnectionString</code> in your app.config file.
Expand All @@ -44,7 +43,6 @@ public TrackData GetBestMatchForSong(string queryAudioFile)
// query the underlying database for similar audio sub-fingerprints
var queryResult = queryCommandBuilder.BuildQueryCommand()
.From(queryAudioFile, secondsToAnalyze, startAtSecond)
.WithDefaultConfigs()
.UsingServices(modelService, audioService)
.Query()
.Result;
Expand Down
Expand Up @@ -76,14 +76,12 @@ public void CreateFingerprintsFromDefaultFileAndAssertNumberOfFingerprintsAndSub
{
var fingerprinter = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToMp3)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Fingerprint();

var fingerprints = fingerprinter.Result;
var hashDatas = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(fingerprints)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Hash()
.Result;
Expand All @@ -105,7 +103,6 @@ public void CreateFingerprintsInsertThenQueryAndGetTheRightResult()
var hashDatas = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(PathToMp3, SecondsToProcess, StartAtSecond)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Hash()
.Result;
Expand All @@ -131,15 +128,13 @@ public void CreateFingerprintsFromFileAndFromAudioSamplesAndGetTheSameResultTest
var hashDatasFromFile = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(PathToMp3, SecondsToProcess, StartAtSecond)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Hash()
.Result;

var hashDatasFromSamples = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(samples)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Hash()
.Result;
Expand All @@ -152,14 +147,12 @@ public void CompareFingerprintsCreatedByDifferentProxiesTest()
{
var naudioFingerprints = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToMp3)
.WithDefaultFingerprintConfig()
.UsingServices(naudioAudioService)
.Fingerprint()
.Result;

var bassFingerprints = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToMp3)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Fingerprint()
.Result;
Expand Down Expand Up @@ -218,7 +211,6 @@ public void CreateFingerprintsWithTheSameFingerprintCommandTest()
var fingerprintCommand = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(PathToMp3, SecondsToProcess, StartAtSecond)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService);

var firstHashDatas = fingerprintCommand.Hash().Result;
Expand All @@ -236,7 +228,6 @@ public void CreateFingerprintFromSamplesWhichAreExactlyEqualToMinimumLength()

var hash = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(samples)
.WithDefaultFingerprintConfig()
.UsingServices(bassAudioService)
.Hash()
.Result;
Expand Down
Expand Up @@ -133,7 +133,6 @@ public void ReadHashDataByTrackTest()
var firstHashData = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(PathToMp3, 10, 0)
.WithDefaultFingerprintConfig()
.UsingServices(audioService)
.Hash()
.Result;
Expand All @@ -147,7 +146,6 @@ public void ReadHashDataByTrackTest()
var secondHashData = fingerprintCommandBuilder
.BuildFingerprintCommand()
.From(PathToMp3, 20, 10)
.WithDefaultFingerprintConfig()
.UsingServices(audioService)
.Hash()
.Result;
Expand Down
Expand Up @@ -58,7 +58,6 @@ public void FingerprintsAreBuiltCorrectlyFromFile()

var fingerprints = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToAudioFile)
.WithDefaultFingerprintConfig()
.UsingServices(audioService.Object)
.Fingerprint()
.Result;
Expand All @@ -83,7 +82,6 @@ public void SubFingerprintsAreBuiltCorrectlyFromFileForTrack()

var hashDatas = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToAudioFile)
.WithDefaultFingerprintConfig()
.UsingServices(audioService.Object)
.Hash()
.Result;
Expand All @@ -108,7 +106,6 @@ public void SubFingerprintsAreBuiltCorrectlyFromAudioSamplesForTrack()

var hashDatas = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(samples)
.WithDefaultFingerprintConfig()
.UsingServices(audioService.Object)
.Hash()
.Result;
Expand Down Expand Up @@ -139,7 +136,6 @@ public void SubFingerprintsAreBuiltCorrectlyFromFileForTrackStartingAtSpecificSe

var hashDatas = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(PathToAudioFile, SecondsToProcess, StartSecond)
.WithDefaultFingerprintConfig()
.UsingServices(audioService.Object)
.Hash()
.Result;
Expand All @@ -164,7 +160,6 @@ public void SubFingerprintsAreBuiltCorrectlyFromFingerprintsTest()

var hashDatas = fingerprintCommandBuilder.BuildFingerprintCommand()
.From(rawFingerprints)
.WithDefaultFingerprintConfig()
.UsingServices(audioService.Object)
.Hash()
.Result;
Expand Down
Expand Up @@ -77,7 +77,6 @@ public void QueryIsBuiltFromFileCorrectly()

QueryResult queryResult = queryCommandBuilder.BuildQueryCommand()
.From(PathToFile)
.WithDefaultConfigs()
.UsingServices(modelService.Object, audioService.Object)
.Query()
.Result;
Expand Down Expand Up @@ -136,7 +135,6 @@ public void QueryCommandIsBuiltWithDefaultConfigsCorrectly()
{
var command = queryCommandBuilder.BuildQueryCommand()
.From("path-to-file", 10, 0)
.WithDefaultConfigs()
.UsingServices(modelService.Object, audioService.Object);

Assert.IsInstanceOfType(command.FingerprintConfiguration, typeof(DefaultFingerprintConfiguration));
Expand Down
9 changes: 2 additions & 7 deletions src/SoundFingerprinting/Command/FingerprintCommand.cs
Expand Up @@ -11,7 +11,7 @@ namespace SoundFingerprinting.Command
using SoundFingerprinting.Data;
using SoundFingerprinting.LSH;

internal sealed class FingerprintCommand : ISourceFrom, IWithFingerprintConfiguration, IUsingFingerprintServices, IFingerprintCommand
internal sealed class FingerprintCommand : ISourceFrom, IWithFingerprintConfiguration, IFingerprintCommand
{
private readonly ILocalitySensitiveHashingAlgorithm lshAlgorithm;
private readonly IFingerprintService fingerprintService;
Expand All @@ -24,6 +24,7 @@ public FingerprintCommand(IFingerprintService fingerprintService, ILocalitySensi
{
this.fingerprintService = fingerprintService;
this.lshAlgorithm = lshAlgorithm;
FingerprintConfiguration = FingerprintConfiguration.Default;
}

public FingerprintConfiguration FingerprintConfiguration { get; private set; }
Expand Down Expand Up @@ -94,12 +95,6 @@ public IUsingFingerprintServices WithFingerprintConfig(Action<CustomFingerprintC
return this;
}

public IUsingFingerprintServices WithDefaultFingerprintConfig()
{
FingerprintConfiguration = new DefaultFingerprintConfiguration();
return this;
}

public IFingerprintCommand UsingServices(IAudioService audioService)
{
this.audioService = audioService;
Expand Down
2 changes: 1 addition & 1 deletion src/SoundFingerprinting/Command/IQueryCommand.cs
Expand Up @@ -9,7 +9,7 @@ public interface IQueryCommand
{
FingerprintConfiguration FingerprintConfiguration { get; }

IQueryConfiguration QueryConfiguration { get; }
QueryConfiguration QueryConfiguration { get; }

Task<QueryResult> Query();
}
Expand Down
Expand Up @@ -4,14 +4,12 @@ namespace SoundFingerprinting.Command

using SoundFingerprinting.Configuration;

public interface IWithFingerprintConfiguration
public interface IWithFingerprintConfiguration : IUsingFingerprintServices
{
IUsingFingerprintServices WithFingerprintConfig(FingerprintConfiguration configuration);

IUsingFingerprintServices WithFingerprintConfig<T>() where T : FingerprintConfiguration, new();

IUsingFingerprintServices WithFingerprintConfig(Action<CustomFingerprintConfiguration> functor);

IUsingFingerprintServices WithDefaultFingerprintConfig();
}
}
Expand Up @@ -4,14 +4,12 @@

using SoundFingerprinting.Configuration;

public interface IWithQueryAndFingerprintConfiguration
public interface IWithQueryAndFingerprintConfiguration : IUsingQueryServices
{
IUsingQueryServices WithConfigs(FingerprintConfiguration fingerprintConfiguration, IQueryConfiguration queryConfiguration);
IUsingQueryServices WithConfigs(FingerprintConfiguration fingerprintConfiguration, QueryConfiguration queryConfiguration);

IUsingQueryServices WithConfigs<T1, T2>() where T1 : FingerprintConfiguration, new() where T2 : IQueryConfiguration, new();
IUsingQueryServices WithConfigs<T1, T2>() where T1 : FingerprintConfiguration, new() where T2 : QueryConfiguration, new();

IUsingQueryServices WithConfigs(Action<CustomFingerprintConfiguration> fingerprintConfiguration, Action<CustomQueryConfiguration> queryConfiguration);

IUsingQueryServices WithDefaultConfigs();
}
}
18 changes: 6 additions & 12 deletions src/SoundFingerprinting/Command/QueryCommand.cs
Expand Up @@ -8,7 +8,7 @@
using SoundFingerprinting.Configuration;
using SoundFingerprinting.Query;

internal sealed class QueryCommand : IQuerySource, IWithQueryAndFingerprintConfiguration, IUsingQueryServices, IQueryCommand
internal sealed class QueryCommand : IQuerySource, IWithQueryAndFingerprintConfiguration, IQueryCommand
{
private readonly IFingerprintCommandBuilder fingerprintCommandBuilder;
private readonly IQueryFingerprintService queryFingerprintService;
Expand All @@ -22,11 +22,13 @@ public QueryCommand(IFingerprintCommandBuilder fingerprintCommandBuilder, IQuery
{
this.fingerprintCommandBuilder = fingerprintCommandBuilder;
this.queryFingerprintService = queryFingerprintService;
FingerprintConfiguration = FingerprintConfiguration.Default;
QueryConfiguration = QueryConfiguration.Default;
}

public FingerprintConfiguration FingerprintConfiguration { get; private set; }

public IQueryConfiguration QueryConfiguration { get; private set; }
public QueryConfiguration QueryConfiguration { get; private set; }

public IWithQueryAndFingerprintConfiguration From(string pathToAudioFile)
{
Expand All @@ -46,14 +48,14 @@ public IWithQueryAndFingerprintConfiguration From(AudioSamples audioSamples)
return this;
}

public IUsingQueryServices WithConfigs(FingerprintConfiguration fingerprintConfiguration, IQueryConfiguration configuration)
public IUsingQueryServices WithConfigs(FingerprintConfiguration fingerprintConfiguration, QueryConfiguration configuration)
{
QueryConfiguration = configuration;
FingerprintConfiguration = fingerprintConfiguration;
return this;
}

public IUsingQueryServices WithConfigs<T1, T2>() where T1 : FingerprintConfiguration, new() where T2 : IQueryConfiguration, new()
public IUsingQueryServices WithConfigs<T1, T2>() where T1 : FingerprintConfiguration, new() where T2 : QueryConfiguration, new()
{
QueryConfiguration = new T2();
FingerprintConfiguration = new T1();
Expand All @@ -69,13 +71,6 @@ public IUsingQueryServices WithConfigs(Action<CustomFingerprintConfiguration> fi
return this;
}

public IUsingQueryServices WithDefaultConfigs()
{
QueryConfiguration = new DefaultQueryConfiguration();
FingerprintConfiguration = new DefaultFingerprintConfiguration();
return this;
}

public IQueryCommand UsingServices(IModelService modelService, IAudioService audioService)
{
this.modelService = modelService;
Expand All @@ -97,6 +92,5 @@ public Task<QueryResult> Query()
},
TaskContinuationOptions.ExecuteSynchronously);
}

}
}
@@ -1,56 +1,7 @@
namespace SoundFingerprinting.Configuration
{
using System;

public class CustomQueryConfiguration : DefaultQueryConfiguration
{
public new int ThresholdVotes
{
get
{
return base.ThresholdVotes;
}

set
{
if (value < 0)
{
throw new ArgumentException("ThresholdVotes cannot be less than 0", "value");
}

base.ThresholdVotes = value;
}
}

public new int MaximumNumberOfTracksToReturnAsResult
{
get
{
return base.MaximumNumberOfTracksToReturnAsResult;
}

set
{
if (value <= 0)
{
throw new ArgumentException("MaximumNumberOfTracksToReturnAsResult cannot be less or equal to 0", "value");
}

base.MaximumNumberOfTracksToReturnAsResult = value;
}
}

public new string TrackGroupId
{
get
{
return base.TrackGroupId;
}

set
{
base.TrackGroupId = value;
}
}
// marker class
}
}
@@ -1,18 +1,12 @@
namespace SoundFingerprinting.Configuration
{
public class DefaultQueryConfiguration : IQueryConfiguration
public class DefaultQueryConfiguration : QueryConfiguration
{
public DefaultQueryConfiguration()
{
ThresholdVotes = 5;
MaximumNumberOfTracksToReturnAsResult = 25;
TrackGroupId = string.Empty;
}

public int ThresholdVotes { get; protected set; }

public int MaximumNumberOfTracksToReturnAsResult { get; protected set; }

public string TrackGroupId { get; protected set; }
}
}
Expand Up @@ -2,8 +2,6 @@ namespace SoundFingerprinting.Configuration
{
using System;

using SoundFingerprinting.Strides;

public class FingerprintConfiguration
{
public static readonly FingerprintConfiguration Default = new DefaultFingerprintConfiguration();
Expand Down

0 comments on commit 145055e

Please sign in to comment.