Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
38 changes: 35 additions & 3 deletions Quaver.API.Tests/AutoMods/TestCaseAutoMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,16 +244,48 @@ public void DetectAudioBitrateTooHigh()
var autoMod = new AutoMod(Qua.Parse("./AutoMods/Resources/high-bitrate.qua", false));
autoMod.Run();

Assert.Contains(autoMod.Issues, x => x is AutoModIssueAudioBitrate);
Assert.Contains(autoMod.Issues, x => x is AutoModIssueAudioBitrate issue
&& issue.AudioFormat == "MP3"
&& issue.MaxBitrate == AutoMod.MaxMp3AudioBitrate);
}

[Fact]
public void DetectWrongAudioFormat()
public void AllowSupportedOggAudio()
{
var autoMod = new AutoMod(Qua.Parse("./AutoMods/Resources/wrong-audio-format.qua", false));
autoMod.Run();

Assert.NotNull(autoMod.AudioTrackInfo);
Assert.DoesNotContain(autoMod.Issues, x => x is AutoModIssueAudioFormat);
Assert.DoesNotContain(autoMod.Issues, x => x is AutoModIssueAudioBitrate);
}

[Fact]
public void DetectOggAudioBitrateTooHigh()
{
var qua = Qua.Parse("./AutoMods/Resources/wrong-audio-format.qua", false);
qua.AudioFile = "high-bitrate.ogg";

var autoMod = new AutoMod(qua);
autoMod.Run();

Assert.DoesNotContain(autoMod.Issues, x => x is AutoModIssueAudioFormat);
Assert.Contains(autoMod.Issues, x => x is AutoModIssueAudioBitrate issue
&& issue.AudioFormat == "OGG"
&& issue.MaxBitrate == AutoMod.MaxOggAudioBitrate);
}

[Fact]
public void DetectUnsupportedAudioFormat()
{
var qua = Qua.Parse("./AutoMods/Resources/wrong-audio-format.qua", false);
qua.AudioFile = "unsupported.wav";

var autoMod = new AutoMod(qua);
autoMod.Run();

Assert.Contains(autoMod.Issues, x => x is AutoModIssueAudioFormat);
Assert.DoesNotContain(autoMod.Issues, x => x is AutoModIssueAudioBitrate);
}

[Fact]
Expand Down Expand Up @@ -298,4 +330,4 @@ public void DetectMultiModeDiffNameIssues()
issue.Map.Mode == GameMode.Keys7);
}
}
}
}
25 changes: 21 additions & 4 deletions Quaver.API/Maps/AutoMod/AutoMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,16 @@ public class AutoMod
/// </summary>
public const int MaxBannerFileSize = 2000000;

/// <summary>
/// The maximum allowed bitrate for MP3 audio files.
/// </summary>
public const int MaxMp3AudioBitrate = 192;

/// <summary>
/// The maximum allowed bitrate for OGG audio files.
/// </summary>
public const int MaxOggAudioBitrate = 208;

/// <summary>
/// </summary>
/// <param name="qua"></param>
Expand Down Expand Up @@ -462,14 +472,21 @@ private void DetectImageFileIssues(string item, string path, int maxSize, int mi
/// </summary>
private void DetectAudioFileIssues()
{
var extension = Path.GetExtension(Qua.AudioFile)?.ToLowerInvariant();

if (extension != ".mp3" && extension != ".ogg")
{
Issues.Add(new AutoModIssueAudioFormat());
return;
}

if (AudioTrackInfo == null)
return;

if (Path.GetExtension(AudioTrackInfo.Path).ToLower() != ".mp3")
Issues.Add(new AutoModIssueAudioFormat());
var maxBitrate = extension == ".ogg" ? MaxOggAudioBitrate : MaxMp3AudioBitrate;

if (AudioTrackInfo.Bitrate > 192)
Issues.Add(new AutoModIssueAudioBitrate());
if (AudioTrackInfo.Bitrate > maxBitrate)
Issues.Add(new AutoModIssueAudioBitrate(extension.Substring(1).ToUpperInvariant(), maxBitrate));
}
}
}
19 changes: 16 additions & 3 deletions Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioBitrate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,20 @@ public class AutoModIssueAudioBitrate : AutoModIssue
{
public override AutoModIssueCategory Category { get; protected set; } = AutoModIssueCategory.Files;

public AutoModIssueAudioBitrate() : base(AutoModIssueLevel.Ranking)
=> Text = $"The mp3's bitrate must be 192kbps or lower.";
public string AudioFormat { get; }

public int MaxBitrate { get; }

public AutoModIssueAudioBitrate()
: this("MP3", global::Quaver.API.Maps.AutoMod.AutoMod.MaxMp3AudioBitrate)
{
}

public AutoModIssueAudioBitrate(string audioFormat, int maxBitrate) : base(AutoModIssueLevel.Ranking)
{
AudioFormat = audioFormat;
MaxBitrate = maxBitrate;
Text = $"The {audioFormat} audio bitrate must be {maxBitrate}kbps or lower.";
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public class AutoModIssueAudioFormat : AutoModIssue
public override AutoModIssueCategory Category { get; protected set; } = AutoModIssueCategory.Files;

public AutoModIssueAudioFormat() : base(AutoModIssueLevel.Ranking)
=> Text = $"The audio file format must be mp3.";
=> Text = "The audio file format must be MP3 or OGG.";
}
}
}
Loading