Отмена генерации не ошибка, длинная тишина набирается повторами

Отмену вставок просили мы сами, когда правка сделала работу ненужной, а
журнал сообщал «Не удалось подготовить вставки: Отменено» — неправда там,
где всё шло по плану. Теперь отмена докладывается как отмена и сразу
планирует пересборку предпросмотра, а не ждёт таймера.

Вчерашнее дробление дыр не дошло до звуковых дорожек: они уплощаются
отдельной функцией. Кусок тишины в три минуты ссылался на минутный файл, и
плеер жаловался «uses 192.5 seconds, but file has only 60». Теперь длинная
тишина набирается повторами, а одинаковые файлы не заказываются дважды.

Проверено живьём на материале 2688x1512: отмена ловится, обе строки в
журнале верные, предупреждений о коротких файлах ноль. Проверка 15 в
flattest следит за дроблением тишины.
This commit is contained in:
4aiman 2026-09-12 00:51:19 +03:00
commit 00af5e1eec
4 changed files with 88 additions and 26 deletions

View file

@ -971,6 +971,39 @@ begin
end;
WriteLn;
{ --- 15. Длинная тишина тоже набирается повторами --- }
WriteLn(' 15. Дыра на звуковой дорожке');
Proj := MakeProject(1, Media);
try
Proj.Master := Media.Info;
Proj.EnsureAudioTracks;
{ Два звуковых клипа с промежутком в семьдесят секунд: он разложится
на минуту и десять секунд, то есть на два разных файла. }
Clip := Proj.AddClip(Proj.Tracks[1], Media, 0, 5, 0);
Clip.Kind := ckAudio;
Clip := Proj.AddClip(Proj.Tracks[1], Media, 10, 5, 75);
Clip.Kind := ckAudio;
FlattenAudioTrack(Proj, Proj.Tracks[1], 80, Segs, Missing);
DumpSegments(Segs);
N := 0;
for I := 0 to High(Segs) do
if Segs[I].Kind = skBlack then
begin
Inc(N);
Check(Segs[I].Duration <= 60.0005,
'кусок тишины не длиннее минуты: ' + SecondsToStr(Segs[I].Duration));
end;
Check(N = 2, 'тишина разложена на два куска: ' + IntToStr(N));
Check(Length(Missing) = 2,
'заказаны две длины, минутная и пятнадцатисекундная: ' +
IntToStr(Length(Missing)));
finally
Proj.Free;
end;
WriteLn;
WriteLn;
if FailCount = 0 then
begin