diff --git a/src/uMainForm.pas b/src/uMainForm.pas index bbaeb20..973c250 100644 --- a/src/uMainForm.pas +++ b/src/uMainForm.pas @@ -80,6 +80,7 @@ type FLastLoadedEdl: string; FLastLoadedAudioEdl: string; FLastHwdec: string; + FLastAudioNote: string; FLogFilePath: string; FLogFileStarted: Boolean; FLogFileBroken: Boolean; @@ -2018,6 +2019,15 @@ begin end else Log('Декодирование видео: ' + Hw); + + { Откуда взялся звук. Строка меняется редко, поэтому пишется только при + изменении — иначе журнал забился бы повторами. } + if FPlayer.AudioTrackNote <> FLastAudioNote then + begin + FLastAudioNote := FPlayer.AudioTrackNote; + if FLastAudioNote <> '' then + Log(FLastAudioNote); + end; end; procedure TMainForm.PlayerPauseChange(Sender: TObject); diff --git a/src/uMpvPlayer.pas b/src/uMpvPlayer.pas index 3ab76e5..c49fa53 100644 --- a/src/uMpvPlayer.pas +++ b/src/uMpvPlayer.pas @@ -58,6 +58,9 @@ type FVideoFilter: string; FHwdec: string; FAudioSource: string; + { Что произошло с выбором звуковой дорожки. Читается окном для + журнала: без этого понять, откуда взялся звук, нечем. } + FAudioTrackNote: string; { Работаем ли под Wine. Там свои правила вывода картинки, и узнать об этом надо до создания плеера. } FUnderWine: Boolean; @@ -163,6 +166,7 @@ type property HasTimePos: Boolean read FHasTimePos; property Initialized: Boolean read FInitialized; property UnderWine: Boolean read FUnderWine; + property AudioTrackNote: string read FAudioTrackNote; property TimePos: Double read FTimePos; property Duration: Double read FDuration; property Paused: Boolean read FPaused; @@ -767,13 +771,24 @@ begin Continue; Id := GetPropString(Format('track-list/%d/id', [I])); if Id <> '' then + begin mpv_set_property_string(FHandle, 'aid', PAnsiChar(Id)); + FAudioTrackNote := 'Звук: отдельная дорожка монтажа (' + Id + ').'; + end; Exit; end; - { Внешней дорожки не нашлось — значит наш список кусков не открылся. - Играть вместо него звук из картинки нельзя: на монтаже его там нет. } - mpv_set_property_string(FHandle, 'aid', 'no'); + { Внешней дорожки не нашлось. + + Глушить звук здесь нельзя, и это проверено дорого: такая попытка + привела к тому, что звука не стало вовсе. Перебор дорожек может не + сработать по причинам, до которых отсюда не дознаться, а mpv и сам + предпочитает внешний список, когда тот открылся. + + Поэтому оставляем выбор ему, но записываем в журнал: если звук вдруг + окажется не тот, будет с чего начинать. } + FAudioTrackNote := 'Звук: внешняя дорожка не найдена среди ' + + IntToStr(Count) + ', выбор оставлен плееру.'; end; procedure TMpvPlayer.HandleLogMessage(AMsg: Pmpv_event_log_message);