feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
72
tests/Paca.Tests/Core/AudioAlbumTrackSplitterGateTests.cs
Normal file
72
tests/Paca.Tests/Core/AudioAlbumTrackSplitterGateTests.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue