72 lines
No EOL
2.6 KiB
C#
72 lines
No EOL
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Paca.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class AudioAlbumTrackSplitterGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate409_AudioAlbumTrackSplitter_BuildsSilenceDetectArgs_Properly()
|
|
{
|
|
var args = AudioAlbumTrackSplitter.BuildSilenceDetectArgs("album.mp3", noiseDb: -35.0, durationSec: 2.0);
|
|
|
|
Assert.Contains("-i \"album.mp3\"", args);
|
|
Assert.Contains("silencedetect=noise=-35dB:d=2.0", args);
|
|
Assert.Contains("-f null -", args);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate410_AudioAlbumTrackSplitter_ParsesSilenceSegments_IntoTracks_WithMinDurationFilter()
|
|
{
|
|
var log = "[silence_detect @ 0x1234] silence_start: 177.5\n[silence_detect @ 0x1234] silence_end: 180.0 | silence_duration: 2.5\n[silence_detect @ 0x1234] silence_start: 357.0\n[silence_detect @ 0x1234] silence_end: 360.0 | silence_duration: 3.0";
|
|
|
|
var tracks = AudioAlbumTrackSplitter.ParseSilenceToTracks(log, totalDurationSec: 600.0, minTrackDurationSec: 30.0);
|
|
|
|
Assert.Equal(3, tracks.Count);
|
|
|
|
Assert.Equal(1, tracks[0].Index);
|
|
Assert.Equal(0.0, tracks[0].StartSec, 1);
|
|
Assert.Equal(177.5, tracks[0].EndSec, 1);
|
|
|
|
Assert.Equal(2, tracks[1].Index);
|
|
Assert.Equal(180.0, tracks[1].StartSec, 1);
|
|
Assert.Equal(357.0, tracks[1].EndSec, 1);
|
|
|
|
Assert.Equal(3, tracks[2].Index);
|
|
Assert.Equal(360.0, tracks[2].StartSec, 1);
|
|
Assert.Equal(600.0, tracks[2].EndSec, 1);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate411_AudioAlbumTrackSplitter_BuildsLosslessSplitCommand_PerTrack()
|
|
{
|
|
var track = new AlbumTrackSegment(1, 0.0, 177.5, "Track 01");
|
|
var cmd = AudioAlbumTrackSplitter.BuildSplitCommand("album.mp3", track, "out_01.mp3");
|
|
|
|
Assert.Contains("-ss 0.000", cmd);
|
|
Assert.Contains("-to 177.500", cmd);
|
|
Assert.Contains("-i \"album.mp3\"", cmd);
|
|
Assert.Contains("-c copy", cmd);
|
|
Assert.Contains("\"out_01.mp3\"", cmd);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate412_AudioAlbumTrackSplitter_GeneratesM3uPlaylist_Accurately()
|
|
{
|
|
var tracks = new List<AlbumTrackSegment>
|
|
{
|
|
new(1, 0.0, 180.0, "Intro Jam"),
|
|
new(2, 180.0, 420.0, "Main Song")
|
|
};
|
|
|
|
var m3u = AudioAlbumTrackSplitter.GenerateM3uPlaylist("My Album", tracks, "track_{0:D2}.mp3");
|
|
|
|
Assert.StartsWith("#EXTM3U", m3u.TrimStart());
|
|
Assert.Contains("#EXTINF:180,My Album - Intro Jam", m3u);
|
|
Assert.Contains("track_01.mp3", m3u);
|
|
Assert.Contains("#EXTINF:240,My Album - Main Song", m3u);
|
|
Assert.Contains("track_02.mp3", m3u);
|
|
}
|
|
} |