using System; using Paca.Core; using Xunit; namespace Paca.Tests.Core; public class AudioVocalStemExtractorGateTests { [Fact] public void Gate317_AudioVocalStemExtractor_BuildsKaraokeVocalRemovalFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.VocalRemovalKaraoke); Assert.Contains("pan=stereo|c0=0.5*c0-0.5*c1|c1=0.5*c1-0.5*c0", filter); } [Fact] public void Gate318_AudioVocalStemExtractor_BuildsSpeechVoiceEnhanceFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.VoiceEnhanceSpeechOnly); Assert.Contains("highpass=f=200", filter); Assert.Contains("lowpass=f=3400", filter); Assert.Contains("afftdn=nf=-25", filter); } [Fact] public void Gate319_AudioVocalStemExtractor_BuildsBassBoostFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.BassBoost); Assert.Contains("bass=g=8:f=110:w=0.6", filter); } [Fact] public void Gate320_AudioVocalStemExtractor_BuildsFullCommandLine_Correctly() { var cmd = AudioVocalStemExtractor.BuildStemCommandLine( inputPath: "C:\\music\\song.mp3", outputPath: "C:\\music\\song_karaoke.mp3", mode: AudioStemMode.VocalRemovalKaraoke, audioCodec: "libmp3lame" ); Assert.Contains("-i \"C:\\music\\song.mp3\"", cmd); Assert.Contains("-filter:a \"pan=stereo|c0=0.5*c0-0.5*c1|c1=0.5*c1-0.5*c0\"", cmd); Assert.Contains("-c:a libmp3lame -b:a 320k", cmd); Assert.EndsWith("\"C:\\music\\song_karaoke.mp3\" -y", cmd); } [Fact] public void Gate321_AudioVocalStemExtractor_BuildsIsolatedVocalsAcapellaFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.IsolatedVocalsAcapella); Assert.Contains("0.5*c0+0.5*c1", filter); Assert.Contains("bandpass=f=1200", filter); } [Fact] public void Gate322_AudioVocalStemExtractor_BuildsNightModeDialogueNormalizationFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.NightModeDialogueNormalization); Assert.Contains("dynaudnorm=f=150", filter); } [Fact] public void Gate323_AudioVocalStemExtractor_BuildsPodcastBroadcastSpeechFilter() { var filter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.PodcastBroadcastSpeech); Assert.Contains("highpass=f=80", filter); Assert.Contains("afftdn=nf=-20", filter); } }