diff --git a/Quaver.API.Tests/AutoMods/Resources/high-bitrate.ogg b/Quaver.API.Tests/AutoMods/Resources/high-bitrate.ogg
new file mode 100644
index 000000000..408e35866
Binary files /dev/null and b/Quaver.API.Tests/AutoMods/Resources/high-bitrate.ogg differ
diff --git a/Quaver.API.Tests/AutoMods/TestCaseAutoMod.cs b/Quaver.API.Tests/AutoMods/TestCaseAutoMod.cs
index 7538269b9..951ffd7ff 100644
--- a/Quaver.API.Tests/AutoMods/TestCaseAutoMod.cs
+++ b/Quaver.API.Tests/AutoMods/TestCaseAutoMod.cs
@@ -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]
@@ -298,4 +330,4 @@ public void DetectMultiModeDiffNameIssues()
issue.Map.Mode == GameMode.Keys7);
}
}
-}
\ No newline at end of file
+}
diff --git a/Quaver.API/Maps/AutoMod/AutoMod.cs b/Quaver.API/Maps/AutoMod/AutoMod.cs
index ff418224e..e1a9711c5 100644
--- a/Quaver.API/Maps/AutoMod/AutoMod.cs
+++ b/Quaver.API/Maps/AutoMod/AutoMod.cs
@@ -73,6 +73,16 @@ public class AutoMod
///
public const int MaxBannerFileSize = 2000000;
+ ///
+ /// The maximum allowed bitrate for MP3 audio files.
+ ///
+ public const int MaxMp3AudioBitrate = 192;
+
+ ///
+ /// The maximum allowed bitrate for OGG audio files.
+ ///
+ public const int MaxOggAudioBitrate = 208;
+
///
///
///
@@ -462,14 +472,21 @@ private void DetectImageFileIssues(string item, string path, int maxSize, int mi
///
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));
}
}
}
diff --git a/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioBitrate.cs b/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioBitrate.cs
index b1d1c1090..245212b6e 100644
--- a/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioBitrate.cs
+++ b/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioBitrate.cs
@@ -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.";
+ }
}
-}
\ No newline at end of file
+}
diff --git a/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioFormat.cs b/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioFormat.cs
index 0dce03338..e0ad84d21 100644
--- a/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioFormat.cs
+++ b/Quaver.API/Maps/AutoMod/Issues/Audio/AutoModIssueAudioFormat.cs
@@ -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.";
}
-}
\ No newline at end of file
+}