2023-09-20 Fred Gleason <fredg@paravelsystems.com>

* Modified 'RDMarkerPlayer' to work with revised 'RDCae'.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2023-09-20 16:32:43 -04:00
parent 6bcd445650
commit 62f9e7ba86
23 changed files with 405 additions and 147 deletions

View File

@ -24429,3 +24429,5 @@
* Added definition of RD_CAED_PORT to 'lib/rd.h'.
* Added definition of RD_CAED_TIMEOUT_INTERVAL to 'lib/rd.h'.
* Fixed a bug in caed(8) that broke metering CAE commands.
2023-09-20 Fred Gleason <fredg@paravelsystems.com>
* Modified 'RDMarkerPlayer' to work with revised 'RDCae'.

View File

@ -2,7 +2,7 @@
//
// System-Wide Values for Rivendell
//
// (C) Copyright 2002-2022 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -106,9 +106,10 @@
#define RIPCD_TCP_PORT 5006
/*
* CAED TCP Port
* CAED Control Port
*/
#define CAED_TCP_PORT 5005
#define RD_CAED_PORT 5005
#define RD_CAED_TIMEOUT_INTERVAL 1000
/*
* RdCatchd TCP Port

View File

@ -41,14 +41,25 @@
RDCae::RDCae(RDStation *station,RDConfig *config,QObject *parent)
: QObject(parent)
{
int flags=-1;
// int flags=-1;
cae_station=station;
cae_config=config;
cae_connected=false;
cae_next_serial_number=1;
argnum=0;
argptr=0;
//
// Control Connection
//
cae_socket=new QUdpSocket(this);
connect(cae_socket,SIGNAL(readyRead()),this,SLOT(readyReadData()));
cae_keepalive_timer=new QTimer(this);
cae_keepalive_timer->setSingleShot(false);
connect(cae_keepalive_timer,SIGNAL(timeout()),this,SLOT(keepaliveData()));
/*
//
// TCP Connection
//
@ -63,6 +74,7 @@ RDCae::RDCae(RDStation *station,RDConfig *config,QObject *parent)
strerror(errno));
}
}
*/
//
// Meter Connection
@ -111,10 +123,23 @@ RDCae::RDCae(RDStation *station,RDConfig *config,QObject *parent)
RDCae::~RDCae() {
close(cae_socket);
delete cae_socket;
// close(cae_socket);
}
void RDCae::connectToHost(int timeout_msecs)
{
if(timeout_msecs<0) {
timeout_msecs=RD_CAED_TIMEOUT_INTERVAL;
}
if(timeout_msecs>0) {
SendCommand(QString::asprintf("TO %d",timeout_msecs));
cae_keepalive_timer->start(timeout_msecs/3);
}
}
/*
void RDCae::connectHost()
{
int count=10;
@ -142,6 +167,7 @@ void RDCae::connectHost()
}
}
}
*/
void RDCae::enableMetering(QList<int> *cards)
@ -164,6 +190,46 @@ void RDCae::enableMetering(QList<int> *cards)
}
int RDCae::startPlayback(const QString &cutname,int cardnum,int portnum,
int start_pos,int end_pos,int speed)
{
int serial=cae_next_serial_number++;
SendCommand(QString::asprintf("PY %d %s %d %d %d %d %d",
serial,cutname.toUtf8().constData(),
cardnum,portnum,start_pos,end_pos,100000));
emit playStarted(serial);
return serial;
}
void RDCae::positionPlay(int serial,int pos)
{
SendCommand(QString::asprintf("PP %d %d",serial,pos));
emit playPositioned(serial,pos);
}
void RDCae::pausePlayback(int serial)
{
SendCommand(QString::asprintf("PE %d",serial));
}
void RDCae::resumePlayback(int serial)
{
SendCommand(QString::asprintf("PR %d",serial));
}
void RDCae::stopPlayback(int serial)
{
SendCommand(QString::asprintf("SP %d",serial));
emit playbackStopped(serial);
}
/*
bool RDCae::loadPlay(int card,QString name,int *stream,int *handle)
{
#ifdef DEBUG_LATENCY
@ -248,7 +314,7 @@ void RDCae::stopPlay(int handle)
#endif // DEBUG_LATENCY
SendCommand(QString::asprintf("SP %d!",handle));
}
*/
void RDCae::loadRecord(int card,int stream,QString name,
AudioCoding coding,int chan,int samp_rate,
@ -353,7 +419,7 @@ unsigned RDCae::playPosition(int handle)
void RDCae::requestTimescale(int card)
{
SendCommand(QString::asprintf("TS %d!",card));
// SendCommand(QString::asprintf("TS %d!",card));
}
@ -374,6 +440,17 @@ void RDCae::setPlayPortActive(int card,int port,int stream)
}
void RDCae::readyReadData()
{
char data[1501];
int n;
while((n=cae_socket->readDatagram(data,1500))>0) {
ProcessCommand(QString::fromUtf8(QByteArray(data,n)));
}
}
/*
void RDCae::readyData()
{
readyData(0,0,"");
@ -412,15 +489,15 @@ void RDCae::readyData(int *stream,int *handle,QString name)
args[argnum++][argptr]=0;
if(stream==NULL) {
cmd.load(args,argnum,argptr);
/*
//
// ************************************
printf("DISPATCHING: ");
for(int z=0;z<cmd.argNum();z++) {
printf(" %s",cmd.arg(z));
}
// printf("DISPATCHING: ");
//for(int z=0;z<cmd.argNum();z++) {
// printf(" %s",cmd.arg(z));
// }
printf("\n");
// ************************************
*/
//
DispatchCommand(&cmd);
}
else {
@ -455,7 +532,7 @@ void RDCae::readyData(int *stream,int *handle,QString name)
}
}
}
*/
void RDCae::clockData()
{
@ -473,6 +550,19 @@ void RDCae::clockData()
}
void RDCae::keepaliveData()
{
SendCommand("TH");
}
void RDCae::SendCommand(const QString &cmd)
{
cae_socket->writeDatagram(cmd.toUtf8(),
rda->station()->caeAddress(rda->config()),RD_CAED_PORT);
}
/*
void RDCae::SendCommand(QString cmd)
{
int len=cmd.toUtf8().length();
@ -482,8 +572,23 @@ void RDCae::SendCommand(QString cmd)
len-n,cmd.toUtf8().constData());
}
}
*/
void RDCae::ProcessCommand(const QString &cmd)
{
QStringList f0=cmd.split(" ",QString::SkipEmptyParts);
bool ok=false;
int serial;
if((f0.at(0)=="SP")&&(f0.size()==2)) { // Playback Stopped
serial=f0.at(1).toInt(&ok);
if(ok&&(serial>0)) {
emit playbackStopped(serial);
}
}
}
/*
void RDCae::DispatchCommand(RDCmdCache *cmd)
{
int pos;
@ -621,7 +726,7 @@ void RDCae::DispatchCommand(RDCmdCache *cmd)
}
}
}
*/
int RDCae::CardNumber(const char *arg)
{

View File

@ -23,6 +23,7 @@
#include <QList>
#include <QObject>
#include <QTimer>
#include <QUdpSocket>
#include <rd.h>
@ -40,13 +41,22 @@ class RDCae : public QObject
enum AudioCoding {Pcm16=0,MpegL1=1,MpegL2=2,MpegL3=3,Pcm24=4};
RDCae(RDStation *station,RDConfig *config,QObject *parent=0);
~RDCae();
void connectHost();
void connectToHost(int timeout_msecs=-1);
void enableMetering(QList<int> *cards);
int startPlayback(const QString &cutname,int cardnum,int portnum,
int start_pos,int end_pos,int speed);
void positionPlay(int serial,int pos);
void pausePlayback(int serial);
void resumePlayback(int serial);
void stopPlayback(int serial);
/*
bool loadPlay(int card,QString name,int *stream,int *handle);
void unloadPlay(int handle);
void positionPlay(int handle,int msec);
void play(int handle,unsigned length,int speed,bool pitch);
void stopPlay(int handle);
*/
void loadRecord(int card,int stream,QString name,AudioCoding coding,
int chan,int samp_rate,int bit_rate);
void unloadRecord(int card,int stream);
@ -66,11 +76,13 @@ class RDCae : public QObject
void setPlayPortActive(int card,int port,int stream);
signals:
void isConnected(bool state);
void playLoaded(int handle);
// void isConnected(bool state);
// void playLoaded(int handle);
void playPositioned(int handle,unsigned msec);
void playing(int handle);
void playStopped(int handle);
// void playing(int handle);
void playStarted(int serial);
void playbackStopped(int serial);
// void playStopped(int handle);
void playUnloaded(int handle);
void recordLoaded(int card,int stream);
void recording(int card,int stream);
@ -83,18 +95,22 @@ class RDCae : public QObject
void timescalingSupported(int card,bool state);
private slots:
void readyData();
void readyData(int *stream,int *handle,QString name);
void readyReadData();
// void readyData();
// void readyData(int *stream,int *handle,QString name);
void clockData();
void keepaliveData();
private:
void SendCommand(QString cmd);
void DispatchCommand(RDCmdCache *cmd);
void SendCommand(const QString &cmd);
// void SendCommand(QString cmd);
// void DispatchCommand(RDCmdCache *cmd);
void ProcessCommand(const QString &cmd);
int CardNumber(const char *arg);
int StreamNumber(const char *arg);
int GetHandle(const char *arg);
void UpdateMeters();
int cae_socket;
// int cae_socket;
bool debug;
char args[CAE_MAX_ARGS][CAE_MAX_LENGTH];
int argnum;
@ -114,6 +130,10 @@ class RDCae : public QObject
std::vector<RDCmdCache> delayed_cmds;
RDStation *cae_station;
RDConfig *cae_config;
QUdpSocket *cae_socket;
QTimer *cae_keepalive_timer;
int cae_next_serial_number;
};

View File

@ -83,7 +83,7 @@ RDLogPlay::RDLogPlay(int id,RDEventPlayer *player,bool enable_cue,QObject *paren
// CAE Connection
//
play_cae=new RDCae(rda->station(),rda->config(),parent);
play_cae->connectHost();
play_cae->connectToHost();
for(int i=0;i<2;i++) {
play_card[i]=0;

View File

@ -28,18 +28,19 @@ RDMarkerPlayer::RDMarkerPlayer(int card,int port,QWidget *parent)
d_cards.push_back(card);
d_port=port;
d_cae_stream=-1;
d_cae_handle=-1;
d_cae_serial=-1;
d_is_playing=false;
d_looping=false;
d_cursor_position=0;
//
// CAE
//
rda->cae()->enableMetering(&d_cards);
connect(rda->cae(),SIGNAL(playing(int)),this,SLOT(caePlayedData(int)));
connect(rda->cae(),SIGNAL(playStopped(int)),this,SLOT(caePausedData(int)));
connect(rda->cae(),SIGNAL(playPositionChanged(int,unsigned)),
this,SLOT(caePositionData(int,unsigned)));
connect(rda->cae(),SIGNAL(playbackStopped(int)),
this,SLOT(playbackStoppedData(int)));
// connect(rda->cae(),SIGNAL(playPositionChanged(int,unsigned)),
// this,SLOT(caePositionData(int,unsigned)));
//
// Marker Readouts
@ -101,6 +102,20 @@ RDMarkerPlayer::RDMarkerPlayer(int card,int port,QWidget *parent)
d_position_edit->
setStyleSheet("background-color: "+palette().color(QPalette::Base).name());
//
// Position Timer
//
d_position_timer=new QTimer(this);
d_position_timer->setSingleShot(false);
connect(d_position_timer,SIGNAL(timeout()),this,SLOT(positionTimeoutData()));
//
// Stop Timer
//
d_stop_timer=new QTimer(this);
d_stop_timer->setSingleShot(true);
connect(d_stop_timer,SIGNAL(timeout()),this,SLOT(buttonStopData()));
//
// Goto Buttons
//
@ -230,13 +245,8 @@ QSizePolicy RDMarkerPlayer::sizePolicy() const
bool RDMarkerPlayer::setCut(unsigned cartnum,int cutnum)
{
clearCut();
if(!rda->cae()->loadPlay(d_cards.first(),RDCut::cutName(cartnum,cutnum),
&d_cae_stream,&d_cae_handle)) {
return false;
}
rda->cae()->positionPlay(d_cae_handle,0);
rda->cae()->setOutputPort(d_cards.first(),d_cae_stream,d_port);
d_cart_number=cartnum;
d_cut_number=cutnum;
QString sql=QString("select ")+
"`START_POINT`,"+ // 00
@ -247,10 +257,11 @@ bool RDMarkerPlayer::setCut(unsigned cartnum,int cutnum)
"`SEGUE_END_POINT`,"+ // 05
"`HOOK_START_POINT`,"+ // 06
"`HOOK_END_POINT`,"+ // 07
"`FADEDOWN_POINT`,"+ // 08
"`FADEUP_POINT`,"+ // 09
"`FADEDOWN_POINT`,"+ // 08
"`FADEUP_POINT`,"+ // 09
"`SEGUE_GAIN`,"+ // 10
"`PLAY_GAIN` "+ // 11
"`PLAY_GAIN`,"+ // 11
"`LENGTH` "+ // 12
"from `CUTS` where "+
"`CUT_NAME`='"+RDEscapeString(RDCut::cutName(cartnum,cutnum))+"'";
RDSqlQuery *q=new RDSqlQuery(sql);
@ -265,6 +276,7 @@ bool RDMarkerPlayer::setCut(unsigned cartnum,int cutnum)
d_fadedown_readout->setValue(role,q->value(i).toInt());
setPointerValue(role,q->value(i).toInt());
setSelectedMarkers(RDMarkerHandle::LastRole,RDMarkerHandle::LastRole);
d_cut_length=q->value(12).toInt();
}
d_no_segue_fade_check->setChecked(q->value(10).toInt()==0);
d_play_gain_spin->setValue(q->value(11).toInt()/100);
@ -277,18 +289,18 @@ bool RDMarkerPlayer::setCut(unsigned cartnum,int cutnum)
void RDMarkerPlayer::clearCut()
{
if(d_cae_handle>=0) {
rda->cae()->stopPlay(d_cae_handle);
rda->cae()->unloadPlay(d_cae_handle);
if(d_cae_serial>=0) {
rda->cae()->stopPlayback(d_cae_serial);
d_cae_stream=-1;
d_cae_handle=-1;
d_cut_length=0;
d_is_playing=false;
d_position_timer->stop();
}
for(int i=0;i<RDMarkerHandle::LastRole;i++) {
d_pointers[i]=-1;
}
d_looping=false;
d_stopping=false;
// d_stopping=false;
}
@ -300,7 +312,10 @@ int RDMarkerPlayer::cursorPosition() const
void RDMarkerPlayer::setCursorPosition(int msec)
{
rda->cae()->positionPlay(d_cae_handle,msec);
rda->cae()->positionPlay(d_cae_serial,msec);
d_cursor_position=msec;
positionTimeoutData();
d_stop_timer->stop();
}
@ -370,42 +385,39 @@ void RDMarkerPlayer::buttonPlayData()
{
d_active_play_button=d_play_button;
if(d_cae_handle>=0) {
if(d_cae_serial>=0) {
if(d_is_playing) {
rda->cae()->stopPlay(d_cae_handle);
rda->cae()->stopPlayback(d_cae_serial);
}
}
d_loop_start_msec=d_cursor_position;
d_loop_start_length=0;
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
d_cae_serial=rda->cae()->
startPlayback(RDCut::cutName(d_cart_number,d_cut_number),
d_cards.first(),d_port,
d_cursor_position,d_cut_length,RD_TIMESCALE_DIVISOR);
Play();
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
// 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+edit_gain_control->value());
d_meter_timer->start(RD_METER_UPDATE_INTERVAL);
}
void RDMarkerPlayer::buttonPlayFromData()
{
d_active_play_button=d_play_from_button;
if(d_cae_handle>=0) {
if(d_is_playing) {
rda->cae()->stopPlay(d_cae_handle);
}
}
Stop();
if(d_selected_markers[RDMarkerHandle::Start]!=RDMarkerHandle::LastRole) {
d_loop_start_msec=d_pointers[d_selected_markers[0]];
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);
d_cursor_position=d_loop_start_msec;
d_cae_serial=rda->cae()->
startPlayback(RDCut::cutName(d_cart_number,d_cut_number),
d_cards.first(),d_port,
d_loop_start_msec,d_cut_length,
RD_TIMESCALE_DIVISOR);
Play();
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
// 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+edit_gain_control->value());
d_meter_timer->start(RD_METER_UPDATE_INTERVAL);
}
}
@ -413,11 +425,7 @@ void RDMarkerPlayer::buttonPlayFromData()
void RDMarkerPlayer::buttonPlayToData()
{
d_active_play_button=d_play_to_button;
if(d_cae_handle>=0) {
if(d_is_playing) {
rda->cae()->stopPlay(d_cae_handle);
}
}
Stop();
if(d_selected_markers[RDMarkerHandle::End]!=RDMarkerHandle::LastRole) {
d_loop_start_msec=d_pointers[d_selected_markers[1]]-2000;
d_loop_start_length=2000;
@ -425,26 +433,23 @@ void RDMarkerPlayer::buttonPlayToData()
d_loop_start_msec=0;
d_loop_start_length=d_pointers[d_selected_markers[1]];
}
rda->cae()->positionPlay(d_cae_handle,d_loop_start_msec);
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
d_cursor_position=d_loop_start_msec;
d_cae_serial=rda->cae()->
startPlayback(RDCut::cutName(d_cart_number,d_cut_number),
d_cards.first(),d_port,
d_loop_start_msec,d_loop_start_msec+d_loop_start_length,
RD_TIMESCALE_DIVISOR);
d_stop_timer->start(d_loop_start_length);
Play();
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
// 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+edit_gain_control->value());
d_meter_timer->start(RD_METER_UPDATE_INTERVAL);
}
}
void RDMarkerPlayer::buttonStopData()
{
if(d_cae_handle>=0) {
if(d_is_playing) {
d_stopping=true;
rda->cae()->stopPlay(d_cae_handle);
}
}
Stop();
}
@ -531,29 +536,41 @@ void RDMarkerPlayer::meterData()
d_meter->setRightPeakBar(lvls[1]);
}
void RDMarkerPlayer::caePlayedData(int handle)
/*
void RDMarkerPlayer::caePlayedData(int serial)
{
if(handle==d_cae_handle) {
printf("d_cae_serial2: %d serial: %d\n",d_cae_serial,serial);
printf("HERE10\n");
if(serial==d_cae_serial) {
printf("HERE11\n");
if(!d_is_playing) {
printf("HERE12\n");
d_active_play_button->setState(RDTransportButton::On);
d_stop_button->setState(RDTransportButton::Off);
d_is_playing=true;
if(!d_position_timer->isActive()) {
printf("HERE13\n");
d_position_timer->start(RDMARKERPLAYER_POSITION_INTERVAL);
}
}
}
}
*/
void RDMarkerPlayer::caePausedData(int handle)
void RDMarkerPlayer::playbackStoppedData(int serial)
{
if(handle==d_cae_handle) {
if(serial==d_cae_serial) {
if(d_is_playing) {
if(d_looping&&(!d_stopping)) {
rda->cae()->positionPlay(d_cae_handle,d_loop_start_msec);
rda->cae()->play(d_cae_handle,d_loop_start_length,100000,false);
if(d_looping) {
rda->cae()->startPlayback(RDCut::cutName(d_cart_number,d_cut_number),
d_cards.first(),d_port,
d_loop_start_msec,
d_loop_start_msec+d_loop_start_length,
RD_TIMESCALE_DIVISOR);
Play();
rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream);
}
else {
d_stopping=false;
if(d_meter_timer->isActive()) {
d_meter_timer->stop();
d_meter->setLeftPeakBar(-10000);
@ -564,19 +581,22 @@ void RDMarkerPlayer::caePausedData(int handle)
d_play_to_button->setState(RDTransportButton::Off);
d_stop_button->setState(RDTransportButton::On);
d_is_playing=false;
d_position_timer->stop();
}
}
}
}
void RDMarkerPlayer::caePositionData(int handle,unsigned msec)
void RDMarkerPlayer::caePositionData(int serial,unsigned msec)
{
if(handle==d_cae_handle) {
/*
if(serial==d_cae_serial) {
d_position_edit->setText(RDGetTimeLength(msec-d_pointers[RDMarkerHandle::CutStart],true,true));
d_cursor_position=msec;
emit cursorPositionChanged(msec);
}
*/
}
@ -587,6 +607,49 @@ void RDMarkerPlayer::trimThresholdChanged(int dbfs)
}
void RDMarkerPlayer::positionTimeoutData()
{
d_cursor_position+=RDMARKERPLAYER_POSITION_INTERVAL;
d_position_edit->setText(RDGetTimeLength(d_cursor_position-d_pointers[RDMarkerHandle::CutStart],true,true));
emit cursorPositionChanged(d_cursor_position);
printf("d_cursor_position: %d\n",d_cursor_position);
}
void RDMarkerPlayer::Play()
{
if(!d_is_playing) {
d_active_play_button->setState(RDTransportButton::On);
d_stop_button->setState(RDTransportButton::Off);
d_is_playing=true;
if(!d_position_timer->isActive()) {
d_position_timer->start(RDMARKERPLAYER_POSITION_INTERVAL);
}
}
d_meter_timer->start(RD_METER_UPDATE_INTERVAL);
}
void RDMarkerPlayer::Stop()
{
if(d_cae_serial>=0) {
if(d_is_playing) {
rda->cae()->stopPlayback(d_cae_serial);
d_stop_timer->stop();
d_position_timer->stop();
d_cae_serial=-1;
d_is_playing=false;
d_play_button->setState(RDTransportButton::Off);
d_play_from_button->setState(RDTransportButton::Off);
d_play_to_button->setState(RDTransportButton::Off);
d_stop_button->setState(RDTransportButton::On);
d_meter->setLeftPeakBar(RD_MUTE_DEPTH);
d_meter->setRightPeakBar(RD_MUTE_DEPTH);
}
}
}
void RDMarkerPlayer::resizeEvent(QResizeEvent *)
{
for(int i=0;i<4;i++) {

View File

@ -34,6 +34,7 @@
#include <rdwidget.h>
#define RDMARKERPLAYER_READOUT_QUAN 7
#define RDMARKERPLAYER_POSITION_INTERVAL 100
class RDMarkerPlayer : public RDWidget
{
@ -80,16 +81,18 @@ class RDMarkerPlayer : public RDWidget
void buttonTrimEndData();
void readoutClickedData(int role);
void meterData();
void caePlayedData(int handle);
void caePausedData(int handle);
void playbackStoppedData(int serial);
void caePositionData(int handle,unsigned pos);
void trimThresholdChanged(int dbfs);
void positionTimeoutData();
protected:
void resizeEvent(QResizeEvent *);
void paintEvent(QPaintEvent *e);
private:
void Play();
void Stop();
QLabel *d_readout_labels[RDMARKERPLAYER_READOUT_QUAN];
QSignalMapper *d_readout_mapper;
RDMarkerReadout *d_cut_readout;
@ -123,15 +126,22 @@ class RDMarkerPlayer : public RDWidget
QList<int> d_cards;
int d_port;
int d_cae_stream;
int d_cae_handle;
// int d_cae_handle;
int d_cae_serial;
unsigned d_cart_number;
int d_cut_number;
bool d_is_playing;
RDMarkerHandle::PointerRole d_selected_markers[2];
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;
int d_cut_length;
QTimer *d_position_timer;
QTimer *d_stop_timer;
};

View File

@ -86,8 +86,8 @@ RDPlayDeck::RDPlayDeck(RDCae *cae,int id,QObject *parent)
RDPlayDeck::~RDPlayDeck()
{
if(play_state!=RDPlayDeck::Stopped) {
play_cae->stopPlay(play_handle);
play_cae->unloadPlay(play_handle);
play_cae->stopPlayback(play_handle);
// play_cae->unloadPlay(play_handle);
}
}
@ -236,12 +236,14 @@ bool RDPlayDeck::setCart(RDLogLine *logline,bool rotate)
}
play_duck_gain[0]=logline->duckUpGain();
play_duck_gain[1]=logline->duckDownGain();
/*
if(play_state!=RDPlayDeck::Paused) {
if(!play_cae->loadPlay(play_card,play_cut->cutName(),
&play_stream,&play_handle)) {
return false;
}
}
*/
play_state=RDPlayDeck::Stopped;
return true;
}
@ -349,7 +351,7 @@ void RDPlayDeck::clear()
break;
case RDPlayDeck::Paused:
play_cae->unloadPlay(play_handle);
// play_cae->unloadPlay(play_handle);
emit stateChanged(play_id,RDPlayDeck::Stopped);
break;
@ -366,10 +368,10 @@ void RDPlayDeck::reset()
switch(play_state) {
case RDPlayDeck::Playing:
case RDPlayDeck::Stopping:
play_cae->stopPlay(play_handle);
play_cae->stopPlayback(play_handle);
case RDPlayDeck::Paused:
play_cae->unloadPlay(play_handle);
// play_cae->unloadPlay(play_handle);
break;
default:
@ -509,11 +511,13 @@ void RDPlayDeck::play(unsigned pos,int segue_start,int segue_end,
fadeup);
}
}
/*
play_cae->
play(play_handle,
(int)(100000.0*(double)(play_audio_point[1]-play_audio_point[0]-pos)/
(double)play_timescale_speed),
play_timescale_speed,false);
*/
play_start_time=QTime::currentTime();
StartTimers(pos);
play_state=RDPlayDeck::Playing;
@ -531,7 +535,7 @@ void RDPlayDeck::pause()
{
pause_called=true;
play_state=RDPlayDeck::Paused;
play_cae->stopPlay(play_handle);
// play_cae->stopPlay(play_handle);
}
@ -546,7 +550,7 @@ void RDPlayDeck::stop()
else {
stop_called=true;
play_state=RDPlayDeck::Stopping;
play_cae->stopPlay(play_handle);
// play_cae->stopPlay(play_handle);
}
}
@ -646,7 +650,7 @@ void RDPlayDeck::playStoppedData(int handle)
emit stateChanged(play_id,RDPlayDeck::Paused);
}
else {
play_cae->unloadPlay(play_handle);
// play_cae->unloadPlay(play_handle);
play_handle=-1;
play_state=RDPlayDeck::Stopped;

View File

@ -145,8 +145,8 @@ void RDSimplePlayer::play(int start_pos)
delete cart;
}
if(!play_cut.isEmpty()) {
play_cae->
loadPlay(play_card,play_cut,&play_stream,&handle);
// play_cae->
// loadPlay(play_card,play_cut,&play_stream,&handle);
if(play_stream<0) {
return;
@ -167,9 +167,11 @@ void RDSimplePlayer::play(int start_pos)
}
play_cae->setOutputVolume(play_card,play_stream,play_port,0+play_cut_gain);
play_cae->positionPlay(play_handles.back(),q->value(0).toUInt()+start_pos);
/*
play_cae->play(play_handles.back(),
q->value(1).toUInt()-(q->value(0).toUInt()+start_pos),
RD_TIMESCALE_DIVISOR,false);
*/
play_cae->setPlayPortActive(play_card,play_port,play_stream);
}
delete q;
@ -182,7 +184,7 @@ void RDSimplePlayer::stop()
if(!play_is_playing) {
return;
}
play_cae->stopPlay(play_handles.back());
// play_cae->stopPlay(play_handles.back());
}
@ -210,7 +212,7 @@ void RDSimplePlayer::playStoppedData(int handle)
if(handle!=play_handles.front()) {
return;
}
play_cae->unloadPlay(play_handles.front());
// play_cae->unloadPlay(play_handles.front());
play_event_player->exec(play_end_cart);
play_start_button->off();
play_stop_button->on();

View File

@ -238,7 +238,7 @@ MainWidget::MainWidget(RDConfig *config,QWidget *parent)
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// Set Audio Assignments

View File

@ -63,7 +63,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// RIPC Connection

View File

@ -149,7 +149,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
connect(rda->cae(),SIGNAL(playing(int)),this,SLOT(playedData(int)));
connect(rda->cae(),SIGNAL(playStopped(int)),
this,SLOT(playStoppedData(int)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// Deck Monitors
@ -697,6 +697,7 @@ void MainWidget::reportsButtonData()
void MainWidget::headButtonData()
{
/*
QModelIndexList rows=catch_recordings_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
@ -723,11 +724,13 @@ void MainWidget::headButtonData()
head_playing=true;
delete cut;
}
*/
}
void MainWidget::tailButtonData()
{
/*
QModelIndexList rows=catch_recordings_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
@ -758,15 +761,18 @@ void MainWidget::tailButtonData()
tail_playing=true;
delete cut;
}
*/
}
void MainWidget::stopButtonData()
{
/*
if(head_playing||tail_playing) { // Stop Play
rda->cae()->stopPlay(catch_play_handle);
rda->cae()->unloadPlay(catch_play_handle);
}
*/
}
@ -804,7 +810,7 @@ void MainWidget::playStoppedData(int handle)
catch_head_button->off();
catch_tail_button->off();
catch_stop_button->on();
rda->cae()->unloadPlay(catch_play_handle);
// rda->cae()->unloadPlay(catch_play_handle);
}

View File

@ -225,7 +225,8 @@ MainObject::MainObject(QObject *parent)
this,SLOT(playStoppedData(int)));
connect(rda->cae(),SIGNAL(playUnloaded(int)),
this,SLOT(playUnloadedData(int)));
rda->cae()->connectHost();
rda->syslog(LOG_DEBUG,"starting CAE connection");
rda->cae()->connectToHost();
//
// Sound Initialization
@ -394,7 +395,7 @@ void MainObject::catchEventReceivedData(RDCatchEvent *evt)
if((evt->deckChannel()>128)&&(evt->deckChannel()<(MAX_DECKS+129))) {
switch(catch_playout_deck_status[evt->deckChannel()-129]) {
case RDDeck::Recording:
rda->cae()->stopPlay(catch_playout_handle[evt->deckChannel()-129]);
// rda->cae()->stopPlay(catch_playout_handle[evt->deckChannel()-129]);
break;
default:
@ -985,7 +986,7 @@ void MainObject::playStoppedData(int handle)
catch_playout_card[deck-129],
catch_playout_stream[deck-129]);
}
rda->cae()->unloadPlay(handle);
// rda->cae()->unloadPlay(handle);
}
@ -1304,6 +1305,7 @@ bool MainObject::StartRecording(int event)
void MainObject::StartPlayout(int event)
{
/*
unsigned deck=catch_events[event].channel();
if((catch_playout_card[deck-129]<0)) {
rda->syslog(LOG_WARNING, "invalid audio device for deck: %d, event: %d",
@ -1359,6 +1361,7 @@ void MainObject::StartPlayout(int event)
//
catch_playout_name[deck-129]=catch_events[event].cutName();
catch_playout_event_id[deck-129]=event;
*/
}
@ -1775,7 +1778,7 @@ void MainObject::LoadDeckList()
catch_playout_deck_status[i]=RDDeck::Recording;
}
else {
rda->cae()->stopPlay(catch_playout_handle[i]);
// rda->cae()->stopPlay(catch_playout_handle[i]);
catch_playout_deck_status[i]=RDDeck::Offline;
}
}

View File

@ -130,9 +130,13 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
// CAE Connection
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
// connect(rda->cae(),SIGNAL(isConnected(bool)),
// this,SLOT(caeConnectedData(bool)));
rda->cae()->connectToHost();
QList<int> cards;
cards.push_back(rda->libraryConf()->inputCard());
cards.push_back(rda->libraryConf()->outputCard());
rda->cae()->enableMetering(&cards);
//
// Filter
@ -285,7 +289,7 @@ void MainWidget::selectedGroupChangedData(const QString &grpname)
lib_default_group=grpname;
}
/*
void MainWidget::caeConnectedData(bool state)
{
if(state) {
@ -295,7 +299,7 @@ void MainWidget::caeConnectedData(bool state)
rda->cae()->enableMetering(&cards);
}
}
*/
void MainWidget::userData()
{

View File

@ -63,7 +63,6 @@ class MainWidget : public MainWindow
private slots:
void selectedGroupChangedData(const QString &grpname);
void caeConnectedData(bool state);
void userData();
void addData();
void editData();

View File

@ -56,14 +56,16 @@ RecordCut::RecordCut(RDCart *cart,QString cut,bool use_weight,QWidget *parent)
rec_port_no[0]=rda->libraryConf()->inputPort();
rec_card_no[1]=rda->libraryConf()->outputCard();
rec_port_no[1]=rda->libraryConf()->outputPort();
rec_play_handle=-1;
rec_play_serial=-1;
//
// CAE Connection
//
connect(rda->cae(),SIGNAL(isConnected(bool)),this,SLOT(initData(bool)));
connect(rda->cae(),SIGNAL(playing(int)),this,SLOT(playedData(int)));
connect(rda->cae(),SIGNAL(playStarted(int)),this,SLOT(playStartedData(int)));
connect(rda->cae(),SIGNAL(playStopped(int)),this,SLOT(playStoppedData(int)));
// connect(rda->cae(),SIGNAL(playing(int)),this,SLOT(playedData(int)));
// connect(rda->cae(),SIGNAL(playStopped(int)),this,SLOT(playStoppedData(int)));
connect(rda->cae(),SIGNAL(recordLoaded(int,int)),
this,SLOT(recordLoadedData(int,int)));
connect(rda->cae(),SIGNAL(recordUnloaded(int,int,unsigned)),
@ -653,14 +655,19 @@ void RecordCut::playData()
int end=rec_cut->endPoint(true);
if((!is_recording)&&(!is_playing)&&(!is_ready)) { // Start Play
rda->cae()->loadPlay(rec_card_no[1],rec_cut->cutName(),
&rec_stream_no[1],&rec_play_handle);
rda->cae()->setOutputPort(rec_card_no[1],rec_stream_no[1],rec_port_no[1]);
rda->cae()->positionPlay(rec_play_handle,start);
rda->cae()->setPlayPortActive(rec_card_no[1],rec_port_no[1],rec_stream_no[1]);
rda->cae()->setOutputVolume(rec_card_no[1],rec_stream_no[1],rec_port_no[1],
0+rec_cut->playGain());
rda->cae()->play(rec_play_handle,end-start,RD_TIMESCALE_DIVISOR,false);
// rda->cae()->loadPlay(rec_card_no[1],rec_cut->cutName(),
// &rec_stream_no[1],&rec_play_handle);
// rda->cae()->setOutputPort(rec_card_no[1],rec_stream_no[1],rec_port_no[1]);
// rda->cae()->positionPlay(rec_play_handle,start);
// rda->cae()->setPlayPortActive(rec_card_no[1],rec_port_no[1],rec_stream_no[1]);
// rda->cae()->setOutputVolume(rec_card_no[1],rec_stream_no[1],rec_port_no[1],
// 0+rec_cut->playGain());
rec_play_serial=
rda->cae()->startPlayback(rec_cut->cutName(),
rec_card_no[1],rec_port_no[1],
start,end,RD_TIMESCALE_DIVISOR);
// rda->cae()->play(rec_play_handle,end-start,RD_TIMESCALE_DIVISOR,false);
}
if(is_ready&&(!is_recording)) {
if(rec_mode_box->currentIndex()==1) {
@ -679,7 +686,7 @@ void RecordCut::playData()
void RecordCut::stopData()
{
if(is_playing) {
rda->cae()->stopPlay(rec_play_handle);
rda->cae()->stopPlayback(rec_play_serial);
return;
}
if(is_recording) {
@ -717,7 +724,7 @@ void RecordCut::recordedData(int card,int stream)
}
void RecordCut::playedData(int handle)
void RecordCut::playStartedData(int serial)
{
rec_play_button->on();
rec_stop_button->off();
@ -729,9 +736,8 @@ void RecordCut::playedData(int handle)
}
void RecordCut::playStoppedData(int handle)
void RecordCut::playStoppedData(int serial)
{
rda->cae()->unloadPlay(rec_play_handle);
rec_timer->stop();
rec_play_button->off();
rec_stop_button->on();
@ -746,6 +752,36 @@ void RecordCut::playStoppedData(int handle)
}
}
/*
void RecordCut::playedData(int handle)
{
rec_play_button->on();
rec_stop_button->off();
rec_timer_value=-1;
recTimerData();
rec_timer->start(RECORD_CUT_TIMER_INTERVAL);
is_playing=true;
is_recording=false;
}
void RecordCut::playStoppedData(int handle)
{
// rda->cae()->unloadPlay(rec_play_handle);
rec_timer->stop();
rec_play_button->off();
rec_stop_button->on();
rec_meter->resetClipLight();
is_playing=false;
is_recording=false;
rec_meter->setLeftSolidBar(-10000);
rec_meter->setRightSolidBar(-10000);
if(is_closing) {
is_closing=false;
closeData();
}
}
*/
void RecordCut::recordStoppedData(int card,int stream)
{

View File

@ -62,8 +62,10 @@ class RecordCut : public RDDialog
void recordedData(int,int);
void recordStoppedData(int,int);
void recordUnloadedData(int,int,unsigned);
void playedData(int);
void playStoppedData(int);
void playStartedData(int serial);
void playStoppedData(int serial);
// void playedData(int);
// void playStoppedData(int);
void closeData();
void initData(bool);
void recTimerData();
@ -145,7 +147,8 @@ class RecordCut : public RDDialog
int rec_card_no[2];
int rec_stream_no[2];
int rec_port_no[2];
int rec_play_handle;
// int rec_play_handle;
int rec_play_serial;
RDCae::AudioCoding rec_format;
unsigned rec_channels;
unsigned rec_samprate;

View File

@ -86,7 +86,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// RIPC Connection

View File

@ -65,7 +65,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
// CAE Connection
//
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// RIPC Connection

View File

@ -89,7 +89,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// RIPC Connection

View File

@ -88,7 +88,7 @@ MainObject::MainObject(QObject *parent)
//
// CAE Connection
//
rda->cae()->connectHost();
rda->cae()->connectToHost();
//
// Set Audio Assignments

View File

@ -131,7 +131,7 @@ MainObject::MainObject(QObject *parent)
//
// CAE Connection
//
rda->cae()->connectHost();
rda->cae()->connectToHost(0); // Assume no persistent operations!
if(qApp->arguments().size()!=1) {
debug=true;

View File

@ -123,7 +123,7 @@ MainWidget::MainWidget(QWidget *parent)
//
connect(rda->cae(),SIGNAL(isConnected(bool)),
this,SLOT(caeConnectedData(bool)));
rda->cae()->connectHost();
rda->cae()->connectToHost();
}