releases/tests/Paca.Tests/Core/MediaPlaybackSpeedPitchGateTests.cs

70 lines
2.2 KiB
C#

using System;
using Paca.Core;
using Xunit;
namespace Paca.Tests.Core;
public class MediaPlaybackSpeedPitchGateTests
{
[Fact]
public void Gate341_MediaPlaybackSpeedPitch_BuildsSingleAtempo_ForNormalRange()
{
var filter15 = MediaPlaybackSpeedPitchEngine.BuildAtempoFilterChain(1.5);
Assert.Equal("atempo=1.50", filter15);
var filter075 = MediaPlaybackSpeedPitchEngine.BuildAtempoFilterChain(0.75);
Assert.Equal("atempo=0.75", filter075);
}
[Fact]
public void Gate342_MediaPlaybackSpeedPitch_ChainsAtempo_ForSpeedsExceedingTwo()
{
// 3.0x -> atempo=2.0,atempo=1.5
var filter30 = MediaPlaybackSpeedPitchEngine.BuildAtempoFilterChain(3.0);
Assert.Equal("atempo=2.00,atempo=1.50", filter30);
// 4.0x -> atempo=2.0,atempo=2.0
var filter40 = MediaPlaybackSpeedPitchEngine.BuildAtempoFilterChain(4.0);
Assert.Equal("atempo=2.00,atempo=2.00", filter40);
}
[Fact]
public void Gate343_MediaPlaybackSpeedPitch_ClampsExtremeSpeeds()
{
// Min 0.25
var min = MediaPlaybackSpeedPitchEngine.ClampSpeed(0.1);
Assert.Equal(0.25, min);
// Max 4.0
var max = MediaPlaybackSpeedPitchEngine.ClampSpeed(10.0);
Assert.Equal(4.0, max);
}
[Fact]
public void Gate344_MediaPlaybackSpeedPitch_BuildsFullCommandLine_ForVideoAndAudio()
{
// Video 1.5x
var videoCmd = MediaPlaybackSpeedPitchEngine.BuildSpeedCommandLine(
inputPath: "C:\\lecture.mp4",
outputPath: "C:\\lecture_1.5x.mp4",
speed: 1.5,
isAudioOnly: false
);
Assert.Contains("-i \"C:\\lecture.mp4\"", videoCmd);
Assert.Contains("-filter:v \"setpts=0.6667*PTS\"", videoCmd);
Assert.Contains("-filter:a \"atempo=1.50\"", videoCmd);
Assert.EndsWith("\"C:\\lecture_1.5x.mp4\" -y", videoCmd);
// Audio only 2.0x
var audioCmd = MediaPlaybackSpeedPitchEngine.BuildSpeedCommandLine(
inputPath: "C:\\podcast.mp3",
outputPath: "C:\\podcast_2x.mp3",
speed: 2.0,
isAudioOnly: true
);
Assert.DoesNotContain("-filter:v", audioCmd);
Assert.Contains("-filter:a \"atempo=2.00\"", audioCmd);
}
}