forked from mia/Aegisub
Don't get the duration from the audio controller on audio open
The audio controller's provider may not have been updated yet.
This commit is contained in:
parent
cca97a58f6
commit
960dc3723b
3 changed files with 14 additions and 7 deletions
|
@ -115,6 +115,10 @@ class AudioController final : public wxEvtHandler {
|
||||||
/// @return The index of the first sample that is wholly inside the millisecond
|
/// @return The index of the first sample that is wholly inside the millisecond
|
||||||
int64_t SamplesFromMilliseconds(int64_t ms) const;
|
int64_t SamplesFromMilliseconds(int64_t ms) const;
|
||||||
|
|
||||||
|
/// Get the duration of the currently open audio in milliseconds, or 0 if none
|
||||||
|
/// @return Duration in milliseconds
|
||||||
|
int GetDuration() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AudioController(agi::Context *context);
|
AudioController(agi::Context *context);
|
||||||
~AudioController();
|
~AudioController();
|
||||||
|
@ -161,10 +165,6 @@ public:
|
||||||
/// Returns 0 if playback is stopped. The return value is only approximate.
|
/// Returns 0 if playback is stopped. The return value is only approximate.
|
||||||
int GetPlaybackPosition();
|
int GetPlaybackPosition();
|
||||||
|
|
||||||
/// Get the duration of the currently open audio in milliseconds, or 0 if none
|
|
||||||
/// @return Duration in milliseconds
|
|
||||||
int GetDuration() const;
|
|
||||||
|
|
||||||
/// @brief Get the primary playback range
|
/// @brief Get the primary playback range
|
||||||
/// @return An immutable TimeRange object
|
/// @return An immutable TimeRange object
|
||||||
TimeRange GetPrimaryPlaybackRange() const;
|
TimeRange GetPrimaryPlaybackRange() const;
|
||||||
|
|
|
@ -655,7 +655,7 @@ void AudioDisplay::SetZoomLevel(int new_zoom_level)
|
||||||
double cursor_time = (scroll_left + cursor_pos) * ms_per_pixel;
|
double cursor_time = (scroll_left + cursor_pos) * ms_per_pixel;
|
||||||
|
|
||||||
ms_per_pixel = new_ms_per_pixel;
|
ms_per_pixel = new_ms_per_pixel;
|
||||||
pixel_audio_width = std::max(1, int(controller->GetDuration() / ms_per_pixel));
|
pixel_audio_width = std::max(1, int(GetDuration() / ms_per_pixel));
|
||||||
|
|
||||||
audio_renderer->SetMillisecondsPerPixel(ms_per_pixel);
|
audio_renderer->SetMillisecondsPerPixel(ms_per_pixel);
|
||||||
scrollbar->ChangeLengths(pixel_audio_width, client_width);
|
scrollbar->ChangeLengths(pixel_audio_width, client_width);
|
||||||
|
@ -1164,6 +1164,12 @@ void AudioDisplay::OnFocus(wxFocusEvent &)
|
||||||
RefreshRect(scrollbar->GetBounds(), false);
|
RefreshRect(scrollbar->GetBounds(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AudioDisplay::GetDuration() const
|
||||||
|
{
|
||||||
|
if (!provider) return 0;
|
||||||
|
return (provider->GetNumSamples() * 1000 + provider->GetSampleRate() - 1) / provider->GetSampleRate();
|
||||||
|
}
|
||||||
|
|
||||||
void AudioDisplay::OnAudioOpen(AudioProvider *provider)
|
void AudioDisplay::OnAudioOpen(AudioProvider *provider)
|
||||||
{
|
{
|
||||||
this->provider = provider;
|
this->provider = provider;
|
||||||
|
@ -1174,7 +1180,7 @@ void AudioDisplay::OnAudioOpen(AudioProvider *provider)
|
||||||
audio_renderer->SetAudioProvider(provider);
|
audio_renderer->SetAudioProvider(provider);
|
||||||
audio_renderer->SetCacheMaxSize(OPT_GET("Audio/Renderer/Spectrum/Memory Max")->GetInt() * 1024 * 1024);
|
audio_renderer->SetCacheMaxSize(OPT_GET("Audio/Renderer/Spectrum/Memory Max")->GetInt() * 1024 * 1024);
|
||||||
|
|
||||||
timeline->ChangeAudio(controller->GetDuration());
|
timeline->ChangeAudio(GetDuration());
|
||||||
|
|
||||||
ms_per_pixel = 0;
|
ms_per_pixel = 0;
|
||||||
SetZoomLevel(zoom_level);
|
SetZoomLevel(zoom_level);
|
||||||
|
|
|
@ -228,7 +228,8 @@ class AudioDisplay: public wxWindow {
|
||||||
void OnMouseEnter(wxMouseEvent&);
|
void OnMouseEnter(wxMouseEvent&);
|
||||||
void OnMouseLeave(wxMouseEvent&);
|
void OnMouseLeave(wxMouseEvent&);
|
||||||
|
|
||||||
// AudioControllerAudioEventListener implementation
|
int GetDuration() const;
|
||||||
|
|
||||||
void OnAudioOpen(AudioProvider *provider);
|
void OnAudioOpen(AudioProvider *provider);
|
||||||
void OnPlaybackPosition(int ms_position);
|
void OnPlaybackPosition(int ms_position);
|
||||||
void OnSelectionChanged();
|
void OnSelectionChanged();
|
||||||
|
|
Loading…
Reference in a new issue