mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2026-01-14 08:35:48 +01:00
2021-03-20 Fred Gleason <fredg@paravelsystems.com>
* Implemented loop mode in 'RDMarkerDialog'. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
@@ -21304,3 +21304,5 @@
|
|||||||
2021-03-20 Fred Gleason <fredg@paravelsystems.com>
|
2021-03-20 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Refactored the 'RDMarkerDialog' dialog to select markers by pairs
|
* Refactored the 'RDMarkerDialog' dialog to select markers by pairs
|
||||||
rather than singly.
|
rather than singly.
|
||||||
|
2021-03-20 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Implemented loop mode in 'RDMarkerDialog'.
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ RDMarkerDialog::RDMarkerDialog(const QString &caption,int card,int port,
|
|||||||
d_player,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole,
|
d_player,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole,
|
||||||
RDMarkerHandle::PointerRole)));
|
RDMarkerHandle::PointerRole)));
|
||||||
connect(d_marker_view,SIGNAL(positionClicked(int)),
|
connect(d_marker_view,SIGNAL(positionClicked(int)),
|
||||||
d_player,SLOT(setPlayPosition(int)));
|
d_player,SLOT(setCursorPosition(int)));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Marker Readouts
|
// Marker Readouts
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ RDMarkerPlayer::RDMarkerPlayer(int card,int port,QWidget *parent)
|
|||||||
d_cae_stream=-1;
|
d_cae_stream=-1;
|
||||||
d_cae_handle=-1;
|
d_cae_handle=-1;
|
||||||
d_is_playing=false;
|
d_is_playing=false;
|
||||||
|
d_looping=false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// CAE
|
// CAE
|
||||||
@@ -167,10 +168,18 @@ void RDMarkerPlayer::clearCut()
|
|||||||
for(int i=0;i<RDMarkerHandle::LastRole;i++) {
|
for(int i=0;i<RDMarkerHandle::LastRole;i++) {
|
||||||
d_pointers[i]=-1;
|
d_pointers[i]=-1;
|
||||||
}
|
}
|
||||||
|
d_looping=false;
|
||||||
|
d_stopping=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RDMarkerPlayer::setPlayPosition(int msec)
|
int RDMarkerPlayer::cursorPosition() const
|
||||||
|
{
|
||||||
|
return d_cursor_position;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RDMarkerPlayer::setCursorPosition(int msec)
|
||||||
{
|
{
|
||||||
rda->cae()->positionPlay(d_cae_handle,msec);
|
rda->cae()->positionPlay(d_cae_handle,msec);
|
||||||
}
|
}
|
||||||
@@ -215,9 +224,9 @@ void RDMarkerPlayer::buttonPlayData()
|
|||||||
rda->cae()->stopPlay(d_cae_handle);
|
rda->cae()->stopPlay(d_cae_handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rda->cae()->play(d_cae_handle,
|
d_loop_start_msec=d_cursor_position;
|
||||||
d_pointers[RDMarkerHandle::CutEnd]-
|
d_loop_start_length=0;
|
||||||
d_pointers[RDMarkerHandle::CutStart],100000,false);
|
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
|
||||||
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
||||||
// FIXME: Implement variable gain here!
|
// FIXME: Implement variable gain here!
|
||||||
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
||||||
@@ -236,8 +245,10 @@ void RDMarkerPlayer::buttonPlayFromData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(d_selected_markers[RDMarkerHandle::Start]!=RDMarkerHandle::LastRole) {
|
if(d_selected_markers[RDMarkerHandle::Start]!=RDMarkerHandle::LastRole) {
|
||||||
rda->cae()->positionPlay(d_cae_handle,d_pointers[d_selected_markers[0]]);
|
d_loop_start_msec=d_pointers[d_selected_markers[0]];
|
||||||
rda->cae()->play(d_cae_handle,0,100000,false);
|
rda->cae()->positionPlay(d_cae_handle,d_loop_start_msec);
|
||||||
|
d_loop_start_length=0;
|
||||||
|
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
|
||||||
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
||||||
// FIXME: Implement variable gain here!
|
// FIXME: Implement variable gain here!
|
||||||
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
||||||
@@ -257,14 +268,14 @@ void RDMarkerPlayer::buttonPlayToData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(d_selected_markers[RDMarkerHandle::End]!=RDMarkerHandle::LastRole) {
|
if(d_selected_markers[RDMarkerHandle::End]!=RDMarkerHandle::LastRole) {
|
||||||
int start=d_pointers[d_selected_markers[1]]-2000;
|
d_loop_start_msec=d_pointers[d_selected_markers[1]]-2000;
|
||||||
int len=2000;
|
d_loop_start_length=2000;
|
||||||
if(start<0) {
|
if(d_loop_start_msec<0) {
|
||||||
start=0;
|
d_loop_start_msec=0;
|
||||||
len=d_selected_markers[1];
|
d_loop_start_length=d_selected_markers[1];
|
||||||
}
|
}
|
||||||
rda->cae()->positionPlay(d_cae_handle,start);
|
rda->cae()->positionPlay(d_cae_handle,d_loop_start_msec);
|
||||||
rda->cae()->play(d_cae_handle,len,100000,false);
|
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
|
||||||
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
|
||||||
// FIXME: Implement variable gain here!
|
// FIXME: Implement variable gain here!
|
||||||
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0);
|
||||||
@@ -279,6 +290,7 @@ void RDMarkerPlayer::buttonStopData()
|
|||||||
{
|
{
|
||||||
if(d_cae_handle>=0) {
|
if(d_cae_handle>=0) {
|
||||||
if(d_is_playing) {
|
if(d_is_playing) {
|
||||||
|
d_stopping=true;
|
||||||
rda->cae()->stopPlay(d_cae_handle);
|
rda->cae()->stopPlay(d_cae_handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -287,6 +299,13 @@ void RDMarkerPlayer::buttonStopData()
|
|||||||
|
|
||||||
void RDMarkerPlayer::buttonLoopData()
|
void RDMarkerPlayer::buttonLoopData()
|
||||||
{
|
{
|
||||||
|
d_looping=!d_looping;
|
||||||
|
if(d_looping) {
|
||||||
|
d_loop_button->setState(RDTransportButton::On);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
d_loop_button->setState(RDTransportButton::Off);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -316,16 +335,23 @@ void RDMarkerPlayer::caePausedData(int handle)
|
|||||||
{
|
{
|
||||||
if(handle==d_cae_handle) {
|
if(handle==d_cae_handle) {
|
||||||
if(d_is_playing) {
|
if(d_is_playing) {
|
||||||
if(d_meter_timer->isActive()) {
|
if(d_looping&&(!d_stopping)) {
|
||||||
d_meter_timer->stop();
|
rda->cae()->positionPlay(d_cae_handle,d_loop_start_msec);
|
||||||
d_meter->setLeftPeakBar(-10000);
|
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
|
||||||
d_meter->setRightPeakBar(-10000);
|
}
|
||||||
|
else {
|
||||||
|
d_stopping=false;
|
||||||
|
if(d_meter_timer->isActive()) {
|
||||||
|
d_meter_timer->stop();
|
||||||
|
d_meter->setLeftPeakBar(-10000);
|
||||||
|
d_meter->setRightPeakBar(-10000);
|
||||||
|
}
|
||||||
|
d_play_from_button->setState(RDTransportButton::Off);
|
||||||
|
d_play_button->setState(RDTransportButton::Off);
|
||||||
|
d_play_to_button->setState(RDTransportButton::Off);
|
||||||
|
d_stop_button->setState(RDTransportButton::On);
|
||||||
|
d_is_playing=false;
|
||||||
}
|
}
|
||||||
d_play_from_button->setState(RDTransportButton::Off);
|
|
||||||
d_play_button->setState(RDTransportButton::Off);
|
|
||||||
d_play_to_button->setState(RDTransportButton::Off);
|
|
||||||
d_stop_button->setState(RDTransportButton::On);
|
|
||||||
d_is_playing=false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -335,6 +361,7 @@ void RDMarkerPlayer::caePositionData(int handle,unsigned msec)
|
|||||||
{
|
{
|
||||||
if(handle==d_cae_handle) {
|
if(handle==d_cae_handle) {
|
||||||
d_position_edit->setText(RDGetTimeLength(msec-d_pointers[RDMarkerHandle::CutStart],true,true));
|
d_position_edit->setText(RDGetTimeLength(msec-d_pointers[RDMarkerHandle::CutStart],true,true));
|
||||||
|
d_cursor_position=msec;
|
||||||
emit cursorPositionChanged(msec);
|
emit cursorPositionChanged(msec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,9 +42,10 @@ class RDMarkerPlayer : public RDWidget
|
|||||||
QSizePolicy sizePolicy() const;
|
QSizePolicy sizePolicy() const;
|
||||||
bool setCut(unsigned cartnum,int cutnum);
|
bool setCut(unsigned cartnum,int cutnum);
|
||||||
void clearCut();
|
void clearCut();
|
||||||
|
int cursorPosition() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setPlayPosition(int msec);
|
void setCursorPosition(int msec);
|
||||||
void setPointerValue(RDMarkerHandle::PointerRole role,int ptr);
|
void setPointerValue(RDMarkerHandle::PointerRole role,int ptr);
|
||||||
void setSelectedMarkers(RDMarkerHandle::PointerRole start_role,
|
void setSelectedMarkers(RDMarkerHandle::PointerRole start_role,
|
||||||
RDMarkerHandle::PointerRole end_role);
|
RDMarkerHandle::PointerRole end_role);
|
||||||
@@ -92,6 +93,11 @@ class RDMarkerPlayer : public RDWidget
|
|||||||
bool d_is_playing;
|
bool d_is_playing;
|
||||||
RDMarkerHandle::PointerRole d_selected_markers[2];
|
RDMarkerHandle::PointerRole d_selected_markers[2];
|
||||||
int d_pointers[RDMarkerHandle::LastRole];
|
int d_pointers[RDMarkerHandle::LastRole];
|
||||||
|
bool d_looping;
|
||||||
|
bool d_stopping;
|
||||||
|
int d_loop_start_msec;
|
||||||
|
int d_loop_start_length;
|
||||||
|
int d_cursor_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user