Fix: Quality range definitions in kbps (#157)

* Quality range uses kbits per second. Quality ranges updated for each format

* Changed vorbis q10 weight

* Fixed element name

* Added migration to keep existing MB/min quality constraints valid

* Fixed migration SQL

* Slider step now 1

* Fix: using kbps for min size as well

* Added tooltip for quality-size

* Updated AcceptableSizeSpecification test

* Small magic number fix
pull/6/head
Tynan CR 7 years ago committed by Qstick
parent aa734bdc25
commit 1368dd6a53

@ -53,7 +53,7 @@
justify-content: space-between;
}
.megabytesPerMinute {
.kilobitsPerSecond {
display: flex;
justify-content: space-between;
flex: 0 0 250px;

@ -10,8 +10,8 @@ import styles from './QualityDefinition.css';
const slider = {
min: 0,
max: 200,
step: 0.1
max: 1500,
step: 1
};
function getValue(value) {
@ -69,13 +69,16 @@ class QualityDefinition extends Component {
onTitleChange
} = this.props;
const minBytes = minSize * 1024 * 1024;
const minThirty = formatBytes(minBytes * 30, 2);
const minSixty = formatBytes(minBytes * 60, 2);
const minBytes = minSize * 128;
const maxBytes = maxSize && maxSize * 128;
const maxBytes = maxSize && maxSize * 1024 * 1024;
const maxThirty = maxBytes ? formatBytes(maxBytes * 30, 2) : 'Unlimited';
const maxSixty = maxBytes ? formatBytes(maxBytes * 60, 2) : 'Unlimited';
// Calculates the bytes used by a twenty minute EP
const minTwenty = formatBytes(minBytes * 20 * 60, 2);
const maxTwenty = maxBytes ? formatBytes(maxBytes * 20 * 60, 2) : 'Unlimited';
// Calculates the bytes used by a forty-five minute LP
const minFortyFive = formatBytes(minBytes * 45 * 60, 2);
const maxFortyFive = maxBytes ? formatBytes(maxBytes * 45 * 60, 2) : 'Unlimited';
return (
<div className={styles.qualityDefinition}>
@ -108,20 +111,20 @@ class QualityDefinition extends Component {
<div className={styles.sizes}>
<div>
<Label kind={kinds.WARNING}>{minThirty}</Label>
<Label kind={kinds.INFO}>{minSixty}</Label>
<Label title={"Minimum size for a 20 minute EP"} kind={kinds.WARNING}>{minTwenty}</Label>
<Label title={"Minimum size for a 45 minute LP"} kind={kinds.INFO}>{minFortyFive}</Label>
</div>
<div>
<Label kind={kinds.WARNING}>{maxThirty}</Label>
<Label kind={kinds.INFO}>{maxSixty}</Label>
<Label title={"Maximum size for a 20 minute EP"} kind={kinds.WARNING}>{maxTwenty}</Label>
<Label title={"Maximum size for a 45 minute LP"} kind={kinds.INFO}>{maxFortyFive}</Label>
</div>
</div>
</div>
{
advancedSettings &&
<div className={styles.megabytesPerMinute}>
<div className={styles.kilobitsPerSecond}>
<div>
Min
@ -139,7 +142,7 @@ class QualityDefinition extends Component {
<NumberInput
className={styles.sizeInput}
name={`${id}.min`}
name={`${id}.max`}
value={maxSize || slider.max}
isFloat={true}
onChange={this.onMaxSizeChange}

@ -12,7 +12,7 @@
flex: 0 1 500px;
}
.megabytesPerMinute {
.kilobitsPerSecond {
flex: 0 0 250px;
}

@ -28,7 +28,7 @@ class QualityDefinitions extends Component {
<div className={styles.quality}>Quality</div>
<div className={styles.title}>Title</div>
<div className={styles.sizeLimit}>Size Limit</div>
<div className={styles.megabytesPerMinute}>Megabytes Per Minute</div>
<div className={styles.kilobitsPerSecond}>Kilobits Per Second</div>
</div>
<div className={styles.definitions}>

@ -16,6 +16,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public class AcceptableSizeSpecificationFixture : CoreTest<AcceptableSizeSpecification>
{
private const int HIGH_KBPS_BITRATE = 1600;
private const int TWENTY_MINUTE_EP_MILLIS = 20 * 60 * 1000;
private const int FORTY_FIVE_MINUTE_LP_MILLIS = 45 * 60 * 1000;
private RemoteAlbum parseResultMultiSet;
private RemoteAlbum parseResultMulti;
private RemoteAlbum parseResultSingle;
@ -58,8 +61,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Returns<Quality>(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v));
qualityType = Builder<QualityDefinition>.CreateNew()
.With(q => q.MinSize = 2)
.With(q => q.MaxSize = 6)
.With(q => q.MinSize = 150)
.With(q => q.MaxSize = 210)
.With(q => q.Quality = Quality.MP3_192)
.Build();
@ -81,12 +84,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
new Album(), new Album(), new Album(), new Album(), new Album { Id = 2 } });
}
[TestCase(1800000, 50, false)]
[TestCase(1800000, 150, true)]
[TestCase(1800000, 300, false)]
[TestCase(3600000, 100, false)]
[TestCase(3600000, 300, true)]
[TestCase(3600000, 600, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 20, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 25, true)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 35, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55, true)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75, false)]
public void single_album(int runtime, int sizeInMegaBytes, bool expectedResult)
{
parseResultSingle.Albums.Select(c => { c.Duration = runtime; return c; }).ToList();
@ -96,12 +99,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().Be(expectedResult);
}
[TestCase(1800000, 50 * 2, false)]
[TestCase(1800000, 150 * 2, true)]
[TestCase(1800000, 300 * 2, false)]
[TestCase(3600000, 100 * 2, false)]
[TestCase(3600000, 300 * 2, true)]
[TestCase(3600000, 600 * 2, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 20 * 2, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 25 * 2, true)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 35 * 2, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45 * 2, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55 * 2, true)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75 * 2, false)]
public void multi_album(int runtime, int sizeInMegaBytes, bool expectedResult)
{
parseResultMulti.Albums.Select(c => { c.Duration = runtime; return c; }).ToList();
@ -111,12 +114,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Subject.IsSatisfiedBy(parseResultMulti, null).Accepted.Should().Be(expectedResult);
}
[TestCase(1800000, 50 * 6, false)]
[TestCase(1800000, 150 * 6, true)]
[TestCase(1800000, 300 * 6, false)]
[TestCase(3600000, 100 * 6, false)]
[TestCase(3600000, 300 * 6, true)]
[TestCase(3600000, 600 * 6, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 20 * 6, false)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 25 * 6, true)]
[TestCase(TWENTY_MINUTE_EP_MILLIS, 35 * 6, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45 * 6, false)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55 * 6, true)]
[TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75 * 6, false)]
public void multiset_album(int runtime, int sizeInMegaBytes, bool expectedResult)
{
parseResultMultiSet.Albums.Select(c => { c.Duration = runtime; return c; }).ToList();
@ -130,34 +133,34 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public void should_return_true_if_size_is_zero()
{
GivenLastAlbum();
parseResultSingle.Albums.Select(c => { c.Duration = 1800000; return c; }).ToList();
parseResultSingle.Albums.Select(c => { c.Duration = TWENTY_MINUTE_EP_MILLIS; return c; }).ToList();
parseResultSingle.Artist = artist;
parseResultSingle.Release.Size = 0;
qualityType.MinSize = 10;
qualityType.MaxSize = 20;
qualityType.MinSize = 150;
qualityType.MaxSize = 210;
Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue();
}
[Test]
public void should_return_true_if_unlimited_30_minute()
public void should_return_true_if_unlimited_20_minute()
{
GivenLastAlbum();
parseResultSingle.Albums.Select(c => { c.Duration = 1800000; return c; }).ToList();
parseResultSingle.Albums.Select(c => { c.Duration = TWENTY_MINUTE_EP_MILLIS; return c; }).ToList();
parseResultSingle.Artist = artist;
parseResultSingle.Release.Size = 18457280000;
parseResultSingle.Release.Size = (HIGH_KBPS_BITRATE * 128) * (TWENTY_MINUTE_EP_MILLIS / 1000);
qualityType.MaxSize = null;
Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue();
}
[Test]
public void should_return_true_if_unlimited_60_minute()
public void should_return_true_if_unlimited_45_minute()
{
GivenLastAlbum();
parseResultSingle.Albums.Select(c => { c.Duration = 3600000; return c; }).ToList();
parseResultSingle.Albums.Select(c => { c.Duration = FORTY_FIVE_MINUTE_LP_MILLIS; return c; }).ToList();
parseResultSingle.Artist = artist;
parseResultSingle.Release.Size = 36857280000;
parseResultSingle.Release.Size = (HIGH_KBPS_BITRATE * 128) * (FORTY_FIVE_MINUTE_LP_MILLIS / 1000);
qualityType.MaxSize = null;
Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue();

@ -0,0 +1,18 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(8)]
public class change_quality_size_mb_to_kb : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.Sql("UPDATE QualityDefinitions SET MaxSize = CASE " +
"WHEN (CAST(MaxSize AS FLOAT) / 60) * 8 * 1024 < 1500 THEN " +
"ROUND((CAST(MaxSize AS FLOAT) / 60) * 8 * 1024, 0) " +
"ELSE NULL " +
"END");
}
}
}

@ -35,11 +35,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
}
var qualityDefinition = _qualityDefinitionService.Get(quality);
var albumsDuration = subject.Albums.Sum(album => album.Duration) / 60000;
var albumsDuration = subject.Albums.Sum(album => album.Duration) / 1000;
if (qualityDefinition.MinSize.HasValue)
{
var minSize = qualityDefinition.MinSize.Value.Megabytes();
var minSize = qualityDefinition.MinSize.Value.Kilobits();
//Multiply minSize by Album.Duration
minSize = minSize * albumsDuration;
@ -47,9 +47,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
//If the parsed size is smaller than minSize we don't want it
if (subject.Release.Size < minSize)
{
var runtimeMessage = $"{albumsDuration}min";
var runtimeMessage = $"{albumsDuration}sec";
_logger.Debug("Item: {0}, Size: {1} is smaller than minimum allowed size ({2} bytes), rejecting.", subject, subject.Release.Size, minSize);
_logger.Debug("Item: {0}, Size: {1} is smaller than minimum allowed size ({2} bytes for {3}), rejecting.", subject, subject.Release.Size, minSize, runtimeMessage);
return Decision.Reject("{0} is smaller than minimum allowed {1}", subject.Release.Size.SizeSuffix(), minSize.SizeSuffix());
}
}
@ -59,7 +59,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
}
else
{
var maxSize = qualityDefinition.MaxSize.Value.Megabytes();
var maxSize = qualityDefinition.MaxSize.Value.Kilobits();
//Multiply maxSize by Album.Duration
maxSize = maxSize * albumsDuration;
@ -67,9 +67,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
//If the parsed size is greater than maxSize we don't want it
if (subject.Release.Size > maxSize)
{
var runtimeMessage = $"{albumsDuration}min";
var runtimeMessage = $"{albumsDuration}sec";
_logger.Debug("Item: {0}, Size: {1} is greater than maximum allowed size ({2}), rejecting.", subject, subject.Release.Size, maxSize);
_logger.Debug("Item: {0}, Size: {1} is greater than maximum allowed size ({2} bytes for {3}), rejecting.", subject, subject.Release.Size, maxSize, runtimeMessage);
return Decision.Reject("{0} is larger than maximum allowed {1}", subject.Release.Size.SizeSuffix(), maxSize.SizeSuffix());
}
}

@ -20,6 +20,11 @@ namespace NzbDrone.Core
return actual;
}
public static long Kilobits(this int kilobits)
{
return Convert.ToInt64(kilobits * 128L);
}
public static long Megabytes(this int megabytes)
{
return Convert.ToInt64(megabytes * 1024L * 1024L);
@ -30,6 +35,11 @@ namespace NzbDrone.Core
return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L);
}
public static long Kilobits(this double kilobits)
{
return Convert.ToInt64(kilobits * 128L);
}
public static long Megabytes(this double megabytes)
{
return Convert.ToInt64(megabytes * 1024L * 1024L);

@ -1096,6 +1096,7 @@
<Compile Include="Validation\ProfileExistsValidator.cs" />
<Compile Include="Validation\RuleBuilderExtensions.cs" />
<Compile Include="Validation\UrlValidator.cs" />
<Compile Include="Datastore\Migration\008_change_quality_size_mb_to_kb.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">

@ -140,37 +140,37 @@ namespace NzbDrone.Core.Qualities
DefaultQualityDefinitions = new HashSet<QualityDefinition>
{
new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 100, GroupWeight = 1},
new QualityDefinition(Quality.MP3_008) { Weight = 2, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_016) { Weight = 3, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_024) { Weight = 4, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_032) { Weight = 5, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_040) { Weight = 6, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_048) { Weight = 7, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_056) { Weight = 8, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_064) { Weight = 9, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_080) { Weight = 10, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_096) { Weight = 11, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_112) { Weight = 12, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_128) { Weight = 13, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.VORBIS_Q5) { Weight = 14, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_160) { Weight = 14, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_192) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.VORBIS_Q6) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.AAC_192) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.WMA) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.MP3_224) { Weight = 16, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.VORBIS_Q7) { Weight = 17, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_VBR_V2) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_256) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.VORBIS_Q8) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.AAC_256) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_VBR) { Weight = 19, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.AAC_VBR) { Weight = 19, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.MP3_320) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.VORBIS_Q9) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.AAC_320) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.VORBIS_Q10) { Weight = 12, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 350, GroupWeight = 1},
new QualityDefinition(Quality.MP3_008) { Weight = 2, MinSize = 0, MaxSize = 10, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_016) { Weight = 3, MinSize = 0, MaxSize = 20, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_024) { Weight = 4, MinSize = 0, MaxSize = 30, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_032) { Weight = 5, MinSize = 0, MaxSize = 40, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_040) { Weight = 6, MinSize = 0, MaxSize = 45, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_048) { Weight = 7, MinSize = 0, MaxSize = 55, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_056) { Weight = 8, MinSize = 0, MaxSize = 65, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_064) { Weight = 9, MinSize = 0, MaxSize = 75, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_080) { Weight = 10, MinSize = 0, MaxSize = 95, GroupName = "Trash Quality Lossy", GroupWeight = 2 },
new QualityDefinition(Quality.MP3_096) { Weight = 11, MinSize = 0, MaxSize = 110, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_112) { Weight = 12, MinSize = 0, MaxSize = 125, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_128) { Weight = 13, MinSize = 0, MaxSize = 140, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.VORBIS_Q5) { Weight = 14, MinSize = 0, MaxSize = 175, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_160) { Weight = 14, MinSize = 0, MaxSize = 175, GroupName = "Poor Quality Lossy", GroupWeight = 3 },
new QualityDefinition(Quality.MP3_192) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.VORBIS_Q6) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.AAC_192) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.WMA) { Weight = 15, MinSize = 0, MaxSize = 350, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.MP3_224) { Weight = 16, MinSize = 0, MaxSize = 245, GroupName = "Low Quality Lossy", GroupWeight = 4 },
new QualityDefinition(Quality.VORBIS_Q7) { Weight = 17, MinSize = 0, MaxSize = 245, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_VBR_V2) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_256) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.VORBIS_Q8) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.AAC_256) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 },
new QualityDefinition(Quality.MP3_VBR) { Weight = 19, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.AAC_VBR) { Weight = 19, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.MP3_320) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.VORBIS_Q9) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.AAC_320) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.VORBIS_Q10) { Weight = 21, MinSize = 0, MaxSize = 550, GroupName = "High Quality Lossy", GroupWeight = 6 },
new QualityDefinition(Quality.ALAC) { Weight = 22, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 },
new QualityDefinition(Quality.FLAC) { Weight = 22, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 },
new QualityDefinition(Quality.FLAC_24) { Weight = 23, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 },

Loading…
Cancel
Save