From 44468fbd3d63ede16592829a321ec447ab9f97a5 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 4 Oct 2012 16:15:45 -0700 Subject: [PATCH] Add "audio/play/line" command --- aegisub/src/audio_timing.h | 7 +++++++ aegisub/src/audio_timing_dialogue.cpp | 6 ++++++ aegisub/src/audio_timing_karaoke.cpp | 7 ++++++- aegisub/src/command/audio.cpp | 16 ++++++++++++++++ aegisub/src/command/icon.cpp | 1 + 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/aegisub/src/audio_timing.h b/aegisub/src/audio_timing.h index 334271180..d2312c6b4 100644 --- a/aegisub/src/audio_timing.h +++ b/aegisub/src/audio_timing.h @@ -78,6 +78,13 @@ public: /// currently. virtual TimeRange GetPrimaryPlaybackRange() const = 0; + /// @brief Get the active line's time + /// @return A time range + /// + /// Get the time range which the active line would have if any pending + /// modifications were committed. + virtual TimeRange GetActiveLineRange() const = 0; + /// @brief Get all rendering style ranges /// @param[out] ranges Rendering ranges will be added to this virtual void GetRenderingStyles(AudioRenderingStyleRanges &ranges) const = 0; diff --git a/aegisub/src/audio_timing_dialogue.cpp b/aegisub/src/audio_timing_dialogue.cpp index d5d4d45db..2ceb2c1d2 100644 --- a/aegisub/src/audio_timing_dialogue.cpp +++ b/aegisub/src/audio_timing_dialogue.cpp @@ -390,6 +390,7 @@ public: wxString GetWarningMessage() const; TimeRange GetIdealVisibleTimeRange() const; TimeRange GetPrimaryPlaybackRange() const; + TimeRange GetActiveLineRange() const; void GetRenderingStyles(AudioRenderingStyleRanges &ranges) const; void GetLabels(TimeRange const& range, std::vector &out) const { } void Next(NextMode mode); @@ -499,6 +500,11 @@ TimeRange AudioTimingControllerDialogue::GetPrimaryPlaybackRange() const return active_line; } +TimeRange AudioTimingControllerDialogue::GetActiveLineRange() const +{ + return active_line; +} + void AudioTimingControllerDialogue::GetRenderingStyles(AudioRenderingStyleRanges &ranges) const { active_line.GetStyleRange(&ranges); diff --git a/aegisub/src/audio_timing_karaoke.cpp b/aegisub/src/audio_timing_karaoke.cpp index fdf873dd5..07cd16e17 100644 --- a/aegisub/src/audio_timing_karaoke.cpp +++ b/aegisub/src/audio_timing_karaoke.cpp @@ -124,6 +124,7 @@ public: TimeRange GetIdealVisibleTimeRange() const; void GetRenderingStyles(AudioRenderingStyleRanges &ranges) const; TimeRange GetPrimaryPlaybackRange() const; + TimeRange GetActiveLineRange() const; void GetLabels(const TimeRange &range, std::vector &out_labels) const; void Next(NextMode mode); void Prev(); @@ -227,10 +228,14 @@ TimeRange AudioTimingControllerKaraoke::GetPrimaryPlaybackRange() const { cur_syl < markers.size() ? markers[cur_syl] : end_marker); } -TimeRange AudioTimingControllerKaraoke::GetIdealVisibleTimeRange() const { +TimeRange AudioTimingControllerKaraoke::GetActiveLineRange() const { return TimeRange(start_marker, end_marker); } +TimeRange AudioTimingControllerKaraoke::GetIdealVisibleTimeRange() const { + return GetActiveLineRange(); +} + void AudioTimingControllerKaraoke::GetMarkers(TimeRange const& range, AudioMarkerVector &out) const { size_t i; for (i = 0; i < markers.size() && markers[i] < range.begin(); ++i) ; diff --git a/aegisub/src/command/audio.cpp b/aegisub/src/command/audio.cpp index d7b406208..8772ba0c5 100644 --- a/aegisub/src/command/audio.cpp +++ b/aegisub/src/command/audio.cpp @@ -241,6 +241,21 @@ struct audio_play_current_selection : public validate_audio_open { } }; +/// Play the current line +struct audio_play_current_line : public validate_audio_open { + CMD_NAME("audio/play/line") + STR_MENU("Play current line") + STR_DISP("Play current line") + STR_HELP("Play current line") + + void operator()(agi::Context *c) { + c->videoController->Stop(); + AudioTimingController *tc = c->audioController->GetTimingController(); + if (tc) + c->audioController->PlayRange(tc->GetActiveLineRange()); + } +}; + /// Play the current audio selection struct audio_play_selection : public validate_audio_open { CMD_NAME("audio/play/selection") @@ -593,6 +608,7 @@ namespace cmd { reg(new audio_play_begin); reg(new audio_play_end); reg(new audio_play_current_selection); + reg(new audio_play_current_line); reg(new audio_play_selection); reg(new audio_play_to_end); reg(new audio_play_toggle); diff --git a/aegisub/src/command/icon.cpp b/aegisub/src/command/icon.cpp index 3a99f894d..e837d39e2 100644 --- a/aegisub/src/command/icon.cpp +++ b/aegisub/src/command/icon.cpp @@ -92,6 +92,7 @@ INSERT_ICON("audio/opt/autoscroll", toggle_audio_autoscroll) INSERT_ICON("audio/opt/spectrum", toggle_audio_spectrum) INSERT_ICON("audio/opt/vertical_link", toggle_audio_link) INSERT_ICON("audio/play/selection", button_playsel) +INSERT_ICON("audio/play/line", button_playline) INSERT_ICON("audio/play/selection/after", button_playfivehafter) INSERT_ICON("audio/play/selection/before", button_playfivehbefore) INSERT_ICON("audio/play/selection/begin", button_playfirstfiveh)