mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-07 01:13:50 +02:00
2847 lines
86 KiB
C++
2847 lines
86 KiB
C++
// rdedit_audio.cpp
|
|
//
|
|
// Rivendell Audio Marker Editor
|
|
//
|
|
// (C) Copyright 2002-2019 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
|
|
// published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public
|
|
// License along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//
|
|
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
|
|
#include <qgroupbox.h>
|
|
#include <qpainter.h>
|
|
#include <qsignalmapper.h>
|
|
#include <qmessagebox.h>
|
|
|
|
#include "rd.h"
|
|
#include "rdapplication.h"
|
|
#include "rdaudioinfo.h"
|
|
#include "rdconf.h"
|
|
#include "rdcut.h"
|
|
#include "rdedit_audio.h"
|
|
#include "rdmixer.h"
|
|
#include "rdtrimaudio.h"
|
|
|
|
RDEditAudio::RDEditAudio(RDCart *cart,QString cut_name,int card,
|
|
int port,int preroll,int trim_level,QWidget *parent)
|
|
: RDDialog(parent)
|
|
{
|
|
setAttribute(Qt::WA_PaintOutsidePaintEvent);
|
|
edit_card=card;
|
|
edit_port=port;
|
|
edit_stream=-1;
|
|
|
|
bool editing_allowed=rda->user()->editAudio()&&cart->owner().isEmpty();
|
|
|
|
//
|
|
// Fix the Window Size
|
|
//
|
|
setMinimumSize(sizeHint());
|
|
setMaximumSize(sizeHint());
|
|
|
|
//
|
|
// Generate Fonts
|
|
//
|
|
|
|
is_playing=false;
|
|
is_paused=false;
|
|
is_stopped=false;
|
|
is_looping=false;
|
|
edit_cue_point=RDEditAudio::Play;
|
|
edit_play_mode=RDEditAudio::FromStart;
|
|
left_button_pressed=false;
|
|
center_button_pressed=false;
|
|
energy_data=NULL;
|
|
energy_size=0;
|
|
edit_gain_mode=RDEditAudio::GainNone;
|
|
edit_gain_count=0;
|
|
use_looping=false;
|
|
ignore_pause=false;
|
|
delete_marker=false;
|
|
pause_mode=false;
|
|
played_cursor=0;
|
|
for(int i=0;i<RDEditAudio::LastMarker;i++) {
|
|
edit_cursors[i]=-1;
|
|
edit_prev_x[0][i]=-1;
|
|
edit_prev_x[1][i]=-1;
|
|
}
|
|
|
|
//
|
|
// The Cut
|
|
//
|
|
edit_cut=new RDCut(cut_name);
|
|
setCaption("RDLibrary - "+tr("Edit Audio"));
|
|
|
|
//
|
|
// The Audio
|
|
//
|
|
connect(rda->cae(),SIGNAL(playing(int)),this,SLOT(playedData(int)));
|
|
connect(rda->cae(),SIGNAL(playStopped(int)),this,SLOT(pausedData(int)));
|
|
connect(rda->cae(),SIGNAL(playPositionChanged(int,unsigned)),
|
|
this,SLOT(positionData(int,unsigned)));
|
|
rda->cae()->loadPlay(edit_card,edit_cut->cutName(),&edit_stream,&edit_handle);
|
|
RDSetMixerOutputPort(rda->cae(),edit_card,edit_stream,edit_port);
|
|
RDAudioInfo *info=new RDAudioInfo(this);
|
|
RDAudioInfo::ErrorCode audio_err;
|
|
info->setCartNumber(RDCut::cartNumber(cut_name));
|
|
info->setCutNumber(RDCut::cutNumber(cut_name));
|
|
|
|
if((audio_err=info->runInfo(rda->user()->name(),rda->user()->password()))==
|
|
RDAudioInfo::ErrorOk) {
|
|
edit_sample_rate=info->sampleRate();
|
|
edit_sample_length=info->frames();
|
|
edit_channels=info->channels();
|
|
}
|
|
else {
|
|
fprintf(stderr,"unable to download cut data, error was: \"%s\".\n",
|
|
(const char *)RDAudioInfo::errorText(audio_err));
|
|
edit_sample_rate=RD_DEFAULT_SAMPLE_RATE;
|
|
edit_sample_length=info->frames();
|
|
edit_channels=2;
|
|
}
|
|
delete info;
|
|
edit_gain=EDITAUDIO_DEFAULT_GAIN;
|
|
edit_preroll=edit_sample_rate*preroll/1000;
|
|
for(unsigned i=0;i<(8*sizeof(unsigned));i++) {
|
|
if((edit_sample_length/(1<<i))<896256) {
|
|
edit_max_factor_x=1<<i;
|
|
i=8*sizeof(unsigned);
|
|
}
|
|
}
|
|
edit_factor_x=edit_max_factor_x;
|
|
|
|
//
|
|
// Save Button
|
|
//
|
|
QPushButton *button=new QPushButton(this,"save_button");
|
|
button->setFocusPolicy(Qt::NoFocus);
|
|
button->setGeometry(EDITAUDIO_WIDGET_WIDTH-90,EDITAUDIO_WIDGET_HEIGHT-120,
|
|
80,50);
|
|
button->setDefault(true);
|
|
button->setFont(buttonFont());
|
|
button->setText(tr("&Save"));
|
|
connect(button,SIGNAL(clicked()),this,SLOT(saveData()));
|
|
|
|
//
|
|
// Cancel Button
|
|
//
|
|
QPushButton *cancel_button=new QPushButton(this,"cancel_button");
|
|
cancel_button->setFocusPolicy(Qt::NoFocus);
|
|
cancel_button->setGeometry(EDITAUDIO_WIDGET_WIDTH-90,
|
|
EDITAUDIO_WIDGET_HEIGHT-60,80,50);
|
|
cancel_button->setDefault(true);
|
|
cancel_button->setFont(buttonFont());
|
|
cancel_button->setText(tr("&Cancel"));
|
|
connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
|
|
|
|
//
|
|
// Transport Buttons
|
|
//
|
|
edit_play_cursor_button=
|
|
new RDTransportButton(RDTransportButton::PlayBetween,this);
|
|
edit_play_cursor_button->setFocusPolicy(Qt::NoFocus);
|
|
edit_play_cursor_button->setGeometry(20,425,65,45);
|
|
edit_play_cursor_button->setEnabled((edit_card>=0)&&(edit_port>=0));
|
|
connect(edit_play_cursor_button,SIGNAL(clicked()),
|
|
this,SLOT(playCursorData()));
|
|
|
|
edit_play_start_button=
|
|
new RDTransportButton(RDTransportButton::Play,this);
|
|
edit_play_start_button->setFocusPolicy(Qt::NoFocus);
|
|
edit_play_start_button->setGeometry(90,425,65,45);
|
|
edit_play_start_button->setEnabled((edit_card>=0)&&(edit_port>=0));
|
|
connect(edit_play_start_button,SIGNAL(clicked()),
|
|
this,SLOT(playStartData()));
|
|
|
|
edit_pause_button=new RDTransportButton(RDTransportButton::Pause,this);
|
|
edit_pause_button->setFocusPolicy(Qt::NoFocus);
|
|
edit_pause_button->setGeometry(160,425,65,45);
|
|
edit_pause_button->setOnColor(QColor(Qt::red));
|
|
edit_pause_button->setEnabled((edit_card>=0)&&(edit_port>=0));
|
|
connect(edit_pause_button,SIGNAL(clicked()),this,SLOT(pauseData()));
|
|
|
|
edit_stop_button=new RDTransportButton(RDTransportButton::Stop,this);
|
|
edit_stop_button->setFocusPolicy(Qt::NoFocus);
|
|
edit_stop_button->setGeometry(230,425,65,45);
|
|
edit_stop_button->on();
|
|
edit_stop_button->setOnColor(QColor(Qt::red));
|
|
edit_stop_button->setEnabled((edit_card>=0)&&(edit_port>=0));
|
|
connect(edit_stop_button,SIGNAL(clicked()),this,SLOT(stopData()));
|
|
|
|
edit_loop_button=new RDTransportButton(RDTransportButton::Loop,this);
|
|
edit_loop_button->setGeometry(300,425,65,45);
|
|
edit_loop_button->off();
|
|
edit_loop_button->setEnabled((edit_card>=0)&&(edit_port>=0));
|
|
connect(edit_loop_button,SIGNAL(clicked()),this,SLOT(loopData()));
|
|
|
|
//
|
|
// Time Origin Scroll Bar
|
|
//
|
|
edit_hscroll=new QScrollBar(0,0,EDITAUDIO_PAN_SIZE/10,
|
|
EDITAUDIO_PAN_SIZE,0,Qt::Horizontal,this);
|
|
edit_hscroll->setGeometry(10,10+EDITAUDIO_WAVEFORM_HEIGHT,
|
|
EDITAUDIO_WAVEFORM_WIDTH,20);
|
|
connect(edit_hscroll,SIGNAL(valueChanged(int)),this,SLOT(hscrollData(int)));
|
|
|
|
//
|
|
// Amplitude Buttons
|
|
//
|
|
QGroupBox *group_box=new QGroupBox(tr("Amplitude"),this);
|
|
group_box->setGeometry(739,2,85,130);
|
|
QPushButton *y_up_button=new RDTransportButton(RDTransportButton::Up,this);
|
|
y_up_button->setGeometry(747,22,70,50);
|
|
y_up_button->setFont(buttonFont());
|
|
connect(y_up_button,SIGNAL(clicked()),this,SLOT(yUp()));
|
|
QPushButton *y_down_button=new RDTransportButton(RDTransportButton::Down,this);
|
|
y_down_button->setGeometry(747,72,70,50);
|
|
y_down_button->setFont(buttonFont());
|
|
connect(y_down_button,SIGNAL(clicked()),this,SLOT(yDown()));
|
|
|
|
//
|
|
// Time Buttons
|
|
//
|
|
group_box=new QGroupBox(tr("Time"),this);
|
|
group_box->setGeometry(739,140,85,230);
|
|
QPushButton *x_full_in_button=new QPushButton(this);
|
|
x_full_in_button->setGeometry(747,160,70,50);
|
|
x_full_in_button->setFont(buttonFont());
|
|
x_full_in_button->setText(tr("Full\nIn"));
|
|
connect(x_full_in_button,SIGNAL(clicked()),this,SLOT(xFullIn()));
|
|
QPushButton *x_up_button=new RDTransportButton(RDTransportButton::Up,this);
|
|
x_up_button->setGeometry(747,212,70,50);
|
|
x_up_button->setFont(buttonFont());
|
|
connect(x_up_button,SIGNAL(clicked()),this,SLOT(xUp()));
|
|
QPushButton *x_down_button=new RDTransportButton(RDTransportButton::Down,this);
|
|
x_down_button->setGeometry(747,262,70,50);
|
|
x_down_button->setFont(buttonFont());
|
|
connect(x_down_button,SIGNAL(clicked()),this,SLOT(xDown()));
|
|
QPushButton *x_full_button=new QPushButton(this);
|
|
x_full_button->setGeometry(747,312,70,50);
|
|
x_full_button->setFont(buttonFont());
|
|
x_full_button->setText(tr("Full\nOut"));
|
|
connect(x_full_button,SIGNAL(clicked()),this,SLOT(xFullOut()));
|
|
|
|
//
|
|
// GoTo Buttons
|
|
//
|
|
group_box=new QGroupBox(tr("Goto"),this);
|
|
group_box->setGeometry(739,375,85,175);
|
|
QPushButton *goto_cursor_button=new QPushButton(this);
|
|
goto_cursor_button->setGeometry(747,393,70,50);
|
|
goto_cursor_button->setFont(buttonFont());
|
|
goto_cursor_button->setText(tr("Cursor"));
|
|
connect(goto_cursor_button,SIGNAL(clicked()),this,SLOT(gotoCursorData()));
|
|
QPushButton *goto_home_button=new QPushButton(this);
|
|
goto_home_button->setGeometry(747,443,70,50);
|
|
goto_home_button->setFont(buttonFont());
|
|
goto_home_button->setText(tr("Home"));
|
|
connect(goto_home_button,SIGNAL(clicked()),this,SLOT(gotoHomeData()));
|
|
QPushButton *goto_end_button=new QPushButton(this);
|
|
goto_end_button->setGeometry(747,493,70,50);
|
|
goto_end_button->setFont(buttonFont());
|
|
goto_end_button->setText(tr("End"));
|
|
connect(goto_end_button,SIGNAL(clicked()),this,SLOT(gotoEndData()));
|
|
|
|
//
|
|
// Cursor Readouts
|
|
//
|
|
QSignalMapper *button_mapper=new QSignalMapper(this);
|
|
connect(button_mapper,SIGNAL(mapped(int)),this,SLOT(cuePointData(int)));
|
|
QSignalMapper *edit_mapper=new QSignalMapper(this);
|
|
connect(edit_mapper,SIGNAL(mapped(int)),this,SLOT(cueEditData(int)));
|
|
QSignalMapper *esc_mapper=new QSignalMapper(this);
|
|
connect(esc_mapper,SIGNAL(mapped(int)),this,SLOT(cueEscData(int)));
|
|
|
|
edit_cursor_edit[RDEditAudio::Start]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::Start]->setGeometry(88,496,70,21);
|
|
edit_cursor_edit[RDEditAudio::Start]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::Start]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::Start],(int)RDEditAudio::Start);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::Start],(int)RDEditAudio::Start);
|
|
connect(edit_cursor_edit[RDEditAudio::Start],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::Start],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
|
|
edit_cue_button[RDEditAudio::Start]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::Start]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::Start]->setGeometry(20,485,66,45);
|
|
edit_cue_button[RDEditAudio::Start]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::Start]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::Start]->
|
|
setPalette(QPalette(QColor(RD_START_END_MARKER_COLOR),backgroundColor()));
|
|
edit_cue_button[RDEditAudio::Start]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::Start]->setText(tr("Cut\nStart"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::Start],(int)RDEditAudio::Start);
|
|
connect(edit_cue_button[RDEditAudio::Start],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::End]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::End]->setGeometry(88,541,70,21);
|
|
edit_cursor_edit[RDEditAudio::End]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::End]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::End],(int)RDEditAudio::End);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::End],(int)RDEditAudio::End);
|
|
connect(edit_cursor_edit[RDEditAudio::End],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::End],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::End]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::End]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::End]->setGeometry(20,530,66,45);
|
|
edit_cue_button[RDEditAudio::End]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::End]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::End]->
|
|
setPalette(QPalette(QColor(RD_START_END_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::End]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::End]->setText(tr("Cut\nEnd"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::End],(int)RDEditAudio::End);
|
|
connect(edit_cue_button[RDEditAudio::End],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::TalkStart]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->setGeometry(243,596,70,21);
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->setDragEnabled(false);
|
|
edit_mapper->setMapping(edit_cursor_edit[RDEditAudio::TalkStart],
|
|
(int)RDEditAudio::TalkStart);
|
|
esc_mapper->setMapping(edit_cursor_edit[RDEditAudio::TalkStart],
|
|
(int)RDEditAudio::TalkStart);
|
|
connect(edit_cursor_edit[RDEditAudio::TalkStart],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::TalkStart],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::TalkStart]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::TalkStart]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::TalkStart]->setGeometry(175,585,66,45);
|
|
edit_cue_button[RDEditAudio::TalkStart]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::TalkStart]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::TalkStart]->
|
|
setPalette(QPalette(QColor(RD_TALK_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::TalkStart]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::TalkStart]->setText(tr("Talk\nStart"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::TalkStart],(int)RDEditAudio::TalkStart);
|
|
connect(edit_cue_button[RDEditAudio::TalkStart],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->setGeometry(243,641,70,21);
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::TalkEnd],(int)RDEditAudio::TalkEnd);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::TalkEnd],(int)RDEditAudio::TalkEnd);
|
|
connect(edit_cursor_edit[RDEditAudio::TalkEnd],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::TalkEnd],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::TalkEnd]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::TalkEnd]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::TalkEnd]->setGeometry(175,630,66,45);
|
|
edit_cue_button[RDEditAudio::TalkEnd]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::TalkEnd]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::TalkEnd]->
|
|
setPalette(QPalette(QColor(RD_TALK_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::TalkEnd]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::TalkEnd]->setText("Talk\nEnd");
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::TalkEnd],(int)RDEditAudio::TalkEnd);
|
|
connect(edit_cue_button[RDEditAudio::TalkEnd],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::SegueStart]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->setGeometry(398,596,70,21);
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::SegueStart],
|
|
(int)RDEditAudio::SegueStart);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::SegueStart],
|
|
(int)RDEditAudio::SegueStart);
|
|
connect(edit_cursor_edit[RDEditAudio::SegueStart],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::SegueStart],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::SegueStart]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::SegueStart]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::SegueStart]->setGeometry(330,585,66,45);
|
|
edit_cue_button[RDEditAudio::SegueStart]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::SegueStart]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::SegueStart]->
|
|
setPalette(QPalette(QColor(RD_SEGUE_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::SegueStart]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::SegueStart]->setText(tr("Segue\nStart"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::SegueStart],
|
|
(int)RDEditAudio::SegueStart);
|
|
connect(edit_cue_button[RDEditAudio::SegueStart],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->setGeometry(398,641,70,21);
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::SegueEnd],(int)RDEditAudio::SegueEnd);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::SegueEnd],(int)RDEditAudio::SegueEnd);
|
|
connect(edit_cursor_edit[RDEditAudio::SegueEnd],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::SegueEnd],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::SegueEnd]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::SegueEnd]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::SegueEnd]->setGeometry(330,630,66,45);
|
|
edit_cue_button[RDEditAudio::SegueEnd]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::SegueEnd]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::SegueEnd]->
|
|
setPalette(QPalette(QColor(RD_SEGUE_MARKER_COLOR),backgroundColor()));
|
|
edit_cue_button[RDEditAudio::SegueEnd]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::SegueEnd]->setText(tr("Segue\nEnd"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::SegueEnd],(int)RDEditAudio::SegueEnd);
|
|
connect(edit_cue_button[RDEditAudio::SegueEnd],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::FadeUp]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->setGeometry(88,596,70,21);
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::FadeUp],(int)RDEditAudio::FadeUp);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::FadeUp],(int)RDEditAudio::FadeUp);
|
|
connect(edit_cursor_edit[RDEditAudio::FadeUp],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::FadeUp],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::FadeUp]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::FadeUp]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::FadeUp]->setGeometry(20,585,66,45);
|
|
edit_cue_button[RDEditAudio::FadeUp]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::FadeUp]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::FadeUp]->
|
|
setPalette(QPalette(QColor(RD_FADE_MARKER_COLOR),backgroundColor()));
|
|
edit_cue_button[RDEditAudio::FadeUp]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::FadeUp]->setText(tr("Fade\nUp"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::FadeUp],(int)RDEditAudio::FadeUp);
|
|
connect(edit_cue_button[RDEditAudio::FadeUp],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::FadeDown]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->setGeometry(88,641,70,21);
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->setDragEnabled(false);
|
|
edit_mapper->setMapping(edit_cursor_edit[RDEditAudio::FadeDown],
|
|
(int)RDEditAudio::FadeDown);
|
|
esc_mapper->setMapping(edit_cursor_edit[RDEditAudio::FadeDown],
|
|
(int)RDEditAudio::FadeDown);
|
|
connect(edit_cursor_edit[RDEditAudio::FadeDown],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::FadeDown],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::FadeDown]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::FadeDown]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::FadeDown]->setGeometry(20,630,66,45);
|
|
edit_cue_button[RDEditAudio::FadeDown]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::FadeDown]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::FadeDown]->
|
|
setPalette(QPalette(QColor(RD_FADE_MARKER_COLOR),backgroundColor()));
|
|
edit_cue_button[RDEditAudio::FadeDown]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::FadeDown]->setText("Fade\nDown");
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::FadeDown],(int)RDEditAudio::FadeDown);
|
|
connect(edit_cue_button[RDEditAudio::FadeDown],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::HookStart]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::HookStart]->setGeometry(553,596,70,21);
|
|
edit_cursor_edit[RDEditAudio::HookStart]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::HookStart]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::HookStart],
|
|
(int)RDEditAudio::HookStart);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::HookStart],
|
|
(int)RDEditAudio::HookStart);
|
|
connect(edit_cursor_edit[RDEditAudio::HookStart],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::HookStart],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cursor_edit[RDEditAudio::HookStart]->setReadOnly(true);
|
|
edit_cue_button[RDEditAudio::HookStart]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::HookStart]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::HookStart]->setGeometry(485,585,66,45);
|
|
edit_cue_button[RDEditAudio::HookStart]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::HookStart]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::HookStart]->
|
|
setPalette(QPalette(QColor(RD_HOOK_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::HookStart]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::HookStart]->setText(tr("Hook\nStart"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::HookStart],
|
|
(int)RDEditAudio::HookStart);
|
|
connect(edit_cue_button[RDEditAudio::HookStart],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
edit_cursor_edit[RDEditAudio::HookEnd]=new RDMarkerEdit(this);
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->setGeometry(553,641,70,21);
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->setReadOnly(true);
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->setDragEnabled(false);
|
|
edit_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::HookEnd],(int)RDEditAudio::HookEnd);
|
|
esc_mapper->
|
|
setMapping(edit_cursor_edit[RDEditAudio::HookEnd],(int)RDEditAudio::HookEnd);
|
|
connect(edit_cursor_edit[RDEditAudio::HookEnd],SIGNAL(returnPressed()),
|
|
edit_mapper,SLOT(map()));
|
|
connect(edit_cursor_edit[RDEditAudio::HookEnd],SIGNAL(escapePressed()),
|
|
esc_mapper,SLOT(map()));
|
|
edit_cue_button[RDEditAudio::HookEnd]=new RDMarkerButton(this);
|
|
edit_cue_button[RDEditAudio::HookEnd]->setToggleButton(true);
|
|
edit_cue_button[RDEditAudio::HookEnd]->setGeometry(485,630,66,45);
|
|
edit_cue_button[RDEditAudio::HookEnd]->setFlashColor(backgroundColor());
|
|
edit_cue_button[RDEditAudio::HookEnd]->
|
|
setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_cue_button[RDEditAudio::HookEnd]->
|
|
setPalette(QPalette(QColor(RD_HOOK_MARKER_COLOR),
|
|
backgroundColor()));
|
|
edit_cue_button[RDEditAudio::HookEnd]->
|
|
setFont(buttonFont());
|
|
edit_cue_button[RDEditAudio::HookEnd]->setText(tr("Hook\nEnd"));
|
|
button_mapper->
|
|
setMapping(edit_cue_button[RDEditAudio::HookEnd],(int)RDEditAudio::HookEnd);
|
|
connect(edit_cue_button[RDEditAudio::HookEnd],SIGNAL(clicked()),
|
|
button_mapper,SLOT(map()));
|
|
|
|
//
|
|
// AutoTrim Buttons
|
|
//
|
|
edit_trim_box=new QSpinBox(this);
|
|
edit_trim_box->setGeometry(243,529,70,21);
|
|
edit_trim_box->setAcceptDrops(false);
|
|
edit_trim_box->setSuffix(tr(" dB"));
|
|
edit_trim_box->setRange(-99,0);
|
|
edit_trim_box->
|
|
setValue((trim_level+REFERENCE_LEVEL)/100);
|
|
QLabel *label=new QLabel(tr("Threshold"),this);
|
|
label->setGeometry(238,513,70,15);
|
|
label->setAlignment(Qt::AlignHCenter);
|
|
label->setFont(subLabelFont());
|
|
QPushButton *trim_start_button=new QPushButton(this);
|
|
trim_start_button->setGeometry(175,485,66,45);
|
|
trim_start_button->
|
|
setPalette(QPalette(QColor(RD_START_END_MARKER_COLOR),backgroundColor()));
|
|
trim_start_button->setFont(buttonFont());
|
|
trim_start_button->setText(tr("Trim\nStart"));
|
|
connect(trim_start_button,SIGNAL(clicked()),this,SLOT(trimHeadData()));
|
|
|
|
QPushButton *trim_end_button=new QPushButton(this);
|
|
trim_end_button->setGeometry(175,530,66,45);
|
|
trim_end_button->
|
|
setPalette(QPalette(QColor(RD_START_END_MARKER_COLOR),backgroundColor()));
|
|
trim_end_button->setFont(buttonFont());
|
|
trim_end_button->setText(tr("Trim\nEnd"));
|
|
connect(trim_end_button,SIGNAL(clicked()),this,SLOT(trimTailData()));
|
|
|
|
//
|
|
// Cut Gain Control
|
|
//
|
|
edit_gain_control=new Q3RangeControl();
|
|
edit_gain_control->setRange(-1000,1000);
|
|
edit_gain_control->setSteps(10,10);
|
|
edit_gain_edit=new RDMarkerEdit(this);
|
|
edit_gain_edit->setGeometry(398,529,70,21);
|
|
edit_gain_edit->setAcceptDrops(false);
|
|
connect(edit_gain_edit,SIGNAL(returnPressed()),this,SLOT(gainChangedData()));
|
|
label=new QLabel(tr("Cut Gain"),this);
|
|
label->setGeometry(388,513,70,15);
|
|
label->setAlignment(Qt::AlignHCenter);
|
|
label->setFont(subLabelFont());
|
|
RDTransportButton *gain_up_button=new
|
|
RDTransportButton(RDTransportButton::Up,this);
|
|
gain_up_button->setGeometry(330,485,66,45);
|
|
gain_up_button->off();
|
|
connect(gain_up_button,SIGNAL(pressed()),this,SLOT(gainUpPressedData()));
|
|
connect(gain_up_button,SIGNAL(released()),this,SLOT(gainReleasedData()));
|
|
|
|
RDTransportButton *gain_down_button=
|
|
new RDTransportButton(RDTransportButton::Down,this);
|
|
gain_down_button->setGeometry(330,530,66,45);
|
|
gain_down_button->off();
|
|
connect(gain_down_button,SIGNAL(pressed()),this,SLOT(gainDownPressedData()));
|
|
connect(gain_down_button,SIGNAL(released()),this,SLOT(gainReleasedData()));
|
|
edit_gain_timer=new QTimer(this);
|
|
connect(edit_gain_timer,SIGNAL(timeout()),this,SLOT(gainTimerData()));
|
|
|
|
//
|
|
// Marker Remove Button
|
|
//
|
|
edit_remove_button=new RDPushButton(this);
|
|
edit_remove_button->setFlashPeriod(EDITAUDIO_BUTTON_FLASH_PERIOD);
|
|
edit_remove_button->setGeometry(485,510,66,45);
|
|
edit_remove_button->setFont(buttonFont());
|
|
edit_remove_button->setText(tr("Remove\nMarker"));
|
|
edit_remove_button->setToggleButton(true);
|
|
edit_remove_button->setFlashColor(QColor(EDITAUDIO_REMOVE_FLASH_COLOR));
|
|
connect(edit_remove_button,SIGNAL(clicked()),this,SLOT(removeButtonData()));
|
|
|
|
//
|
|
// Segue Fade Box
|
|
//
|
|
edit_overlap_box=new QCheckBox(this);
|
|
edit_overlap_box->setGeometry(570,515,15,15);
|
|
label=new QLabel(edit_overlap_box,tr("No Fade on Segue Out"),this);
|
|
label->setGeometry(590,513,130,20);
|
|
label->setFont(subLabelFont());
|
|
label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
|
|
|
|
//
|
|
// Time Counters
|
|
//
|
|
label=new QLabel(tr("Position"),this);
|
|
label->setGeometry(60,385,70,20);
|
|
label->setFont(subLabelFont());
|
|
label->setAlignment(Qt::AlignHCenter);
|
|
label->
|
|
setPalette(QPalette(backgroundColor(),QColor(EDITAUDIO_HIGHLIGHT_COLOR)));
|
|
edit_overall_edit=new QLineEdit(this);
|
|
edit_overall_edit->setAcceptDrops(false);
|
|
edit_overall_edit->setGeometry(60,400,70,21);
|
|
edit_overall_edit->setReadOnly(true);
|
|
|
|
edit_region_edit_label=new QLabel("Region",this);
|
|
edit_region_edit_label->setGeometry(158,385,70,20);
|
|
edit_region_edit_label->setFont(subLabelFont());
|
|
edit_region_edit_label->setAlignment(Qt::AlignHCenter);
|
|
edit_region_edit_label->
|
|
setPalette(QPalette(backgroundColor(),QColor(EDITAUDIO_HIGHLIGHT_COLOR)));
|
|
edit_region_edit=new QLineEdit(this);
|
|
edit_region_edit->setAcceptDrops(false);
|
|
edit_region_edit->setGeometry(158,400,70,21);
|
|
edit_region_edit->setReadOnly(true);
|
|
|
|
label=new QLabel(tr("Length"),this);
|
|
label->setGeometry(256,385,70,20);
|
|
label->setFont(subLabelFont());
|
|
label->setAlignment(Qt::AlignHCenter);
|
|
label->
|
|
setPalette(QPalette(backgroundColor(),QColor(EDITAUDIO_HIGHLIGHT_COLOR)));
|
|
edit_size_edit=new QLineEdit(this);
|
|
edit_size_edit->setAcceptDrops(false);
|
|
edit_size_edit->setGeometry(256,400,70,21);
|
|
edit_size_edit->setReadOnly(true);
|
|
|
|
//
|
|
// The Audio Meter
|
|
//
|
|
edit_meter=new RDStereoMeter(this);
|
|
edit_meter->setGeometry(380,398,edit_meter->geometry().width(),
|
|
edit_meter->geometry().height());
|
|
edit_meter->setSegmentSize(5);
|
|
edit_meter->setMode(RDSegMeter::Peak);
|
|
edit_meter_timer=new QTimer(this);
|
|
connect(edit_meter_timer,SIGNAL(timeout()),this,SLOT(meterData()));
|
|
|
|
//
|
|
// The Wave Forms
|
|
//
|
|
edit_peaks=new RDPeaksExport(this);
|
|
RDPeaksExport::ErrorCode conv_err;
|
|
edit_peaks->setCartNumber(RDCut::cartNumber(cut_name));
|
|
edit_peaks->setCutNumber(RDCut::cutNumber(cut_name));
|
|
if((conv_err=edit_peaks->runExport(rda->user()->name(),rda->user()->password()))!=
|
|
RDPeaksExport::ErrorOk) {
|
|
QMessageBox::warning(this,tr("Rivendell Web Service"),
|
|
tr("Unable to download peak data, error was:\n\"")+
|
|
RDPeaksExport::errorText(conv_err)+"\".");
|
|
}
|
|
edit_wave_array=new Q3PointArray(EDITAUDIO_WAVEFORM_WIDTH-2);
|
|
DrawMaps();
|
|
|
|
//
|
|
// The Edit Menu
|
|
//
|
|
edit_menu=new Q3PopupMenu(this);
|
|
connect(edit_menu,SIGNAL(aboutToShow()),this,SLOT(updateMenuData()));
|
|
edit_menu->insertItem(tr("Delete Talk Markers"),this,
|
|
SLOT(deleteTalkData()),0,RDEditAudio::TalkStart);
|
|
edit_menu->insertItem(tr("Delete Segue Markers"),this,
|
|
SLOT(deleteSegueData()),0,RDEditAudio::SegueStart);
|
|
edit_menu->insertItem(tr("Delete Hook Markers"),this,
|
|
SLOT(deleteHookData()),0,RDEditAudio::HookStart);
|
|
edit_menu->insertItem(tr("Delete Fade Up Marker"),this,
|
|
SLOT(deleteFadeupData()),0,RDEditAudio::FadeUp);
|
|
edit_menu->insertItem(tr("Delete Fade Down Marker"),this,
|
|
SLOT(deleteFadedownData()),0,RDEditAudio::FadeDown);
|
|
|
|
//
|
|
// Populate Counter Fields
|
|
//
|
|
edit_cursor_edit[RDEditAudio::Start]->
|
|
setText(RDGetTimeLength(edit_cut->startPoint(true),true));
|
|
edit_cursors[RDEditAudio::Start]=(int)(((double)edit_cut->startPoint(true)*
|
|
(double)edit_sample_rate)
|
|
/1152000.0);
|
|
edit_cursors[RDEditAudio::Play]=edit_cursors[RDEditAudio::Start];
|
|
baseline=edit_cursors[RDEditAudio::Start];
|
|
edit_cursor_edit[RDEditAudio::End]->
|
|
setText(RDGetTimeLength(edit_cut->endPoint(true),true));
|
|
edit_cursors[RDEditAudio::End]=(int)(((double)edit_cut->endPoint(true)*
|
|
(double)edit_sample_rate)
|
|
/1152000.0);
|
|
if(edit_cut->talkStartPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->
|
|
setText(RDGetTimeLength(edit_cut->talkStartPoint(),true));
|
|
edit_cursors[RDEditAudio::TalkStart]=
|
|
(int)(((double)edit_cut->talkStartPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::TalkStart]=-1;
|
|
}
|
|
if(edit_cut->talkEndPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->
|
|
setText(RDGetTimeLength(edit_cut->talkEndPoint(),true));
|
|
edit_cursors[RDEditAudio::TalkEnd]=(int)(((double)edit_cut->talkEndPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::TalkEnd]=-1;
|
|
}
|
|
if(edit_cut->segueStartPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->
|
|
setText(RDGetTimeLength(edit_cut->segueStartPoint(),true));
|
|
edit_cursors[RDEditAudio::SegueStart]=
|
|
(int)(((double)edit_cut->segueStartPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::SegueStart]=-1;
|
|
}
|
|
if(edit_cut->segueEndPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->
|
|
setText(RDGetTimeLength(edit_cut->segueEndPoint(),true));
|
|
edit_cursors[RDEditAudio::SegueEnd]=(int)(((double)edit_cut->segueEndPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::SegueEnd]=-1;
|
|
}
|
|
if(edit_cut->fadeupPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->setText(RDGetTimeLength(edit_cut->fadeupPoint(),true));
|
|
edit_cursors[RDEditAudio::FadeUp]=(int)(((double)edit_cut->fadeupPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::FadeUp]=-1;
|
|
}
|
|
if(edit_cut->fadedownPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->
|
|
setText(RDGetTimeLength(edit_cut->fadedownPoint(),true));
|
|
edit_cursors[RDEditAudio::FadeDown]=(int)(((double)edit_cut->fadedownPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::FadeDown]=-1;
|
|
}
|
|
if(edit_cut->hookStartPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::HookStart]->
|
|
setText(RDGetTimeLength(edit_cut->hookStartPoint(),true));
|
|
edit_cursors[RDEditAudio::HookStart]=(int)(((double)edit_cut->hookStartPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::HookStart]=-1;
|
|
}
|
|
if(edit_cut->hookEndPoint()!=-1) {
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->
|
|
setText(RDGetTimeLength(edit_cut->hookEndPoint(),true));
|
|
edit_cursors[RDEditAudio::HookEnd]=(int)(((double)edit_cut->hookEndPoint()*
|
|
(double)edit_sample_rate)/1152000.0);
|
|
}
|
|
else {
|
|
edit_cursors[RDEditAudio::HookEnd]=-1;
|
|
}
|
|
edit_gain_control->setValue(edit_cut->playGain());
|
|
edit_trim_box->setValue(trim_level/100);
|
|
if(edit_cut->segueGain()==0) {
|
|
edit_overlap_box->setChecked(true);
|
|
}
|
|
else {
|
|
edit_overlap_box->setChecked(false);
|
|
}
|
|
|
|
//
|
|
// The Mouse Pointers
|
|
//
|
|
DrawPointers();
|
|
setCursor(*edit_arrow_cursor);
|
|
setMouseTracking(true);
|
|
setFocusPolicy(Qt::StrongFocus);
|
|
|
|
UpdateCursors();
|
|
UpdateCounters();
|
|
gainChangedData();
|
|
//
|
|
// Set Control Perms
|
|
//
|
|
for(int i=1;i<RDEditAudio::LastMarker;i++) {
|
|
edit_cursor_edit[i]->setReadOnly(!editing_allowed);
|
|
edit_cue_button[i]->setEnabled(editing_allowed);
|
|
}
|
|
edit_remove_button->setEnabled(editing_allowed);
|
|
gain_up_button->setEnabled(editing_allowed);
|
|
gain_down_button->setEnabled(editing_allowed);
|
|
edit_gain_edit->setReadOnly(!editing_allowed);
|
|
trim_start_button->setEnabled(editing_allowed);
|
|
trim_end_button->setEnabled(editing_allowed);
|
|
edit_overlap_box->setEnabled(editing_allowed);
|
|
}
|
|
|
|
|
|
RDEditAudio::~RDEditAudio()
|
|
{
|
|
delete edit_peaks;
|
|
}
|
|
|
|
|
|
QSize RDEditAudio::sizeHint() const
|
|
{
|
|
return QSize(EDITAUDIO_WIDGET_WIDTH,EDITAUDIO_WIDGET_HEIGHT);
|
|
}
|
|
|
|
|
|
QSizePolicy RDEditAudio::sizePolicy() const
|
|
{
|
|
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
|
|
}
|
|
|
|
|
|
void RDEditAudio::saveData()
|
|
{
|
|
rda->cae()->stopPlay(edit_handle);
|
|
rda->cae()->unloadPlay(edit_handle);
|
|
if(!SaveMarkers()) {
|
|
return;
|
|
}
|
|
done(0);
|
|
}
|
|
|
|
|
|
void RDEditAudio::cancelData()
|
|
{
|
|
rda->cae()->stopPlay(edit_handle);
|
|
rda->cae()->unloadPlay(edit_handle);
|
|
done(1);
|
|
}
|
|
|
|
|
|
void RDEditAudio::xFullIn()
|
|
{
|
|
if(edit_factor_x!=0.125) {
|
|
edit_factor_x=0.125;
|
|
edit_hscroll->setRange(0,(int)((double)edit_peaks->energySize()/
|
|
(double)edit_channels*
|
|
(1.0-edit_factor_x/edit_max_factor_x)));
|
|
CenterDisplay();
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::xUp()
|
|
{
|
|
if(edit_factor_x>(1.0/8.0)) {
|
|
edit_factor_x/=2.0;
|
|
if(edit_factor_x==edit_max_factor_x) {
|
|
edit_hscroll->setRange(0,0);
|
|
}
|
|
else {
|
|
edit_hscroll->setRange(0,(int)((double)edit_peaks->energySize()/
|
|
(double)edit_channels*
|
|
(1.0-edit_factor_x/edit_max_factor_x)));
|
|
}
|
|
CenterDisplay();
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::xDown()
|
|
{
|
|
if(edit_factor_x<edit_max_factor_x) {
|
|
edit_factor_x*=2;
|
|
if(edit_factor_x==edit_max_factor_x) {
|
|
edit_hscroll->setRange(0,0);
|
|
}
|
|
else {
|
|
edit_hscroll->setRange(0,(int)((double)edit_peaks->energySize()/
|
|
(double)edit_channels*
|
|
(1.0-edit_factor_x/edit_max_factor_x)));
|
|
}
|
|
CenterDisplay();
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::xFullOut()
|
|
{
|
|
if(edit_factor_x!=edit_max_factor_x) {
|
|
edit_factor_x=edit_max_factor_x;
|
|
edit_hscroll->setRange(0,0);
|
|
CenterDisplay();
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::yUp()
|
|
{
|
|
if(edit_gain>-21) {
|
|
edit_gain-=3;
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::yDown()
|
|
{
|
|
if(edit_gain<0) {
|
|
edit_gain+=3;
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void RDEditAudio::gotoCursorData()
|
|
{
|
|
edit_hscroll->setValue(edit_cursors[RDEditAudio::Play]-
|
|
(int)(edit_factor_x*(double)EDITAUDIO_WAVEFORM_WIDTH/2.0));
|
|
}
|
|
|
|
|
|
void RDEditAudio::gotoHomeData()
|
|
{
|
|
edit_hscroll->setValue(edit_hscroll->minValue());
|
|
}
|
|
|
|
|
|
void RDEditAudio::gotoEndData()
|
|
{
|
|
edit_hscroll->setValue(edit_hscroll->maxValue());
|
|
}
|
|
|
|
|
|
void RDEditAudio::hscrollData(int value)
|
|
{
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
|
|
|
|
void RDEditAudio::playStartData()
|
|
{
|
|
if(is_playing) {
|
|
return;
|
|
}
|
|
rda->cae()->
|
|
positionPlay(edit_handle,GetTime(edit_cursors[RDEditAudio::Start]*1152));
|
|
switch(edit_cue_point) {
|
|
case RDEditAudio::End:
|
|
case RDEditAudio::SegueEnd:
|
|
case RDEditAudio::TalkEnd:
|
|
case RDEditAudio::HookEnd:
|
|
played_cursor=edit_cursors[edit_cue_point]-edit_preroll/1152;
|
|
break;
|
|
|
|
default:
|
|
played_cursor=edit_cursors[edit_cue_point];
|
|
break;
|
|
}
|
|
if(!is_playing) {
|
|
rda->cae()->setPlayPortActive(edit_card,edit_port,edit_stream);
|
|
rda->cae()->
|
|
setOutputVolume(edit_card,edit_stream,edit_port,0+edit_gain_control->value());
|
|
rda->cae()->play(edit_handle,(int)(1000.0*(double)
|
|
((edit_cursors[RDEditAudio::End]-
|
|
edit_cursors[RDEditAudio::Start])*1152)/
|
|
(double)edit_sample_rate),
|
|
RD_TIMESCALE_DIVISOR,0);
|
|
}
|
|
if(use_looping) {
|
|
is_looping=true;
|
|
}
|
|
edit_play_mode=RDEditAudio::FromStart;
|
|
edit_play_start_button->on();
|
|
edit_play_cursor_button->off();
|
|
edit_pause_button->off();
|
|
}
|
|
|
|
|
|
void RDEditAudio::playCursorData()
|
|
{
|
|
int length=0;
|
|
|
|
if(is_playing) {
|
|
return;
|
|
}
|
|
switch(edit_cue_point) {
|
|
case RDEditAudio::Play:
|
|
case RDEditAudio::Start:
|
|
case RDEditAudio::End:
|
|
case RDEditAudio::FadeDown:
|
|
length=(int)(1000.0*(double)((edit_cursors[RDEditAudio::End]-
|
|
edit_cursors[RDEditAudio::Play])*1152)/
|
|
(double)edit_sample_rate);
|
|
break;
|
|
|
|
case RDEditAudio::SegueStart:
|
|
case RDEditAudio::SegueEnd:
|
|
length=(int)(1000.0*(double)((edit_cursors[RDEditAudio::SegueEnd]-
|
|
edit_cursors[RDEditAudio::Play])*1152)/
|
|
(double)edit_sample_rate);
|
|
break;
|
|
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::TalkEnd:
|
|
length=(int)(1000.0*(double)((edit_cursors[RDEditAudio::TalkEnd]-
|
|
edit_cursors[RDEditAudio::Play])*1152)/
|
|
(double)edit_sample_rate);
|
|
break;
|
|
|
|
case RDEditAudio::HookStart:
|
|
case RDEditAudio::HookEnd:
|
|
length=(int)(1000.0*(double)((edit_cursors[RDEditAudio::HookEnd]-
|
|
edit_cursors[RDEditAudio::Play])*1152)/
|
|
(double)edit_sample_rate);
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
length=(int)(1000.0*(double)((edit_cursors[RDEditAudio::FadeUp]-
|
|
edit_cursors[RDEditAudio::Play])*1152)/
|
|
(double)edit_sample_rate);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
played_cursor=edit_cursors[RDEditAudio::Play];
|
|
|
|
pause_mode=false;
|
|
if(!is_playing) {
|
|
rda->cae()->setPlayPortActive(edit_card,edit_port,edit_stream);
|
|
rda->cae()->
|
|
setOutputVolume(edit_card,edit_stream,edit_port,0+edit_gain_control->value());
|
|
rda->cae()->play(edit_handle,length,RD_TIMESCALE_DIVISOR,0);
|
|
}
|
|
if(use_looping) {
|
|
is_looping=true;
|
|
}
|
|
edit_play_mode=RDEditAudio::FromCursor;
|
|
edit_play_start_button->off();
|
|
edit_play_cursor_button->on();
|
|
edit_pause_button->off();
|
|
}
|
|
|
|
|
|
void RDEditAudio::pauseData()
|
|
{
|
|
if(!is_paused) {
|
|
is_looping=false;
|
|
pause_mode=true;
|
|
rda->cae()->stopPlay(edit_handle);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::stopData()
|
|
{
|
|
if(!is_paused) {
|
|
is_looping=false;
|
|
pause_mode=false;
|
|
rda->cae()->stopPlay(edit_handle);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::loopData()
|
|
{
|
|
if(use_looping) {
|
|
use_looping=false;
|
|
is_looping=false;
|
|
edit_loop_button->off();
|
|
}
|
|
else {
|
|
use_looping=true;
|
|
if(is_playing) {
|
|
is_looping=true;
|
|
}
|
|
edit_loop_button->flash();
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::playedData(int handle)
|
|
{
|
|
edit_pause_button->off();
|
|
edit_stop_button->off();
|
|
is_playing=true;
|
|
is_paused=false;
|
|
is_stopped=false;
|
|
edit_meter_timer->start(RD_METER_UPDATE_INTERVAL);
|
|
}
|
|
|
|
|
|
void RDEditAudio::pausedData(int handle)
|
|
{
|
|
if(ignore_pause) {
|
|
return;
|
|
}
|
|
if(is_looping) {
|
|
switch(edit_play_mode) {
|
|
case RDEditAudio::FromStart:
|
|
LoopRegion(edit_cursors[RDEditAudio::Start],
|
|
edit_cursors[RDEditAudio::End]);
|
|
break;
|
|
|
|
case RDEditAudio::FromCursor:
|
|
case RDEditAudio::Region:
|
|
switch(edit_cue_point) {
|
|
case RDEditAudio::Start:
|
|
case RDEditAudio::End:
|
|
LoopRegion(edit_cursors[RDEditAudio::Start],
|
|
edit_cursors[RDEditAudio::End]);
|
|
break;
|
|
|
|
case RDEditAudio::SegueStart:
|
|
case RDEditAudio::SegueEnd:
|
|
LoopRegion(edit_cursors[RDEditAudio::SegueStart],
|
|
edit_cursors[RDEditAudio::SegueEnd]);
|
|
break;
|
|
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::TalkEnd:
|
|
LoopRegion(edit_cursors[RDEditAudio::TalkStart],
|
|
edit_cursors[RDEditAudio::TalkEnd]);
|
|
break;
|
|
|
|
case RDEditAudio::HookStart:
|
|
case RDEditAudio::HookEnd:
|
|
LoopRegion(edit_cursors[RDEditAudio::HookStart],
|
|
edit_cursors[RDEditAudio::HookEnd]);
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
LoopRegion(edit_cursors[RDEditAudio::Start],
|
|
edit_cursors[RDEditAudio::FadeUp]);
|
|
break;
|
|
|
|
case RDEditAudio::FadeDown:
|
|
LoopRegion(edit_cursors[RDEditAudio::FadeDown],
|
|
edit_cursors[RDEditAudio::End]);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
else {
|
|
edit_play_start_button->off();
|
|
edit_play_cursor_button->off();
|
|
if(pause_mode) {
|
|
edit_pause_button->on();
|
|
}
|
|
else {
|
|
edit_stop_button->on();
|
|
rda->cae()->positionPlay(edit_handle,GetTime(played_cursor*1152));
|
|
}
|
|
is_playing=false;
|
|
is_paused=true;
|
|
is_stopped=false;
|
|
}
|
|
if(edit_meter_timer->isActive()) {
|
|
edit_meter_timer->stop();
|
|
edit_meter->setLeftPeakBar(-10000);
|
|
edit_meter->setRightPeakBar(-10000);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::positionData(int handle,unsigned int pos)
|
|
{ //pos is in miliseconds
|
|
edit_cursors[RDEditAudio::Play]=
|
|
(unsigned int)((double)pos*edit_sample_rate/1152000.0);
|
|
if((edit_sample_rate%8000)!=0) { //Account for the MPEG padding!
|
|
edit_cursors[RDEditAudio::Play]++;
|
|
}
|
|
UpdateCursors();
|
|
UpdateCounters();
|
|
}
|
|
|
|
|
|
void RDEditAudio::cuePointData(int id)
|
|
{
|
|
if(is_playing) {
|
|
edit_cue_button[id]->toggle();
|
|
return;
|
|
}
|
|
if(delete_marker) {
|
|
switch(id) {
|
|
case RDEditAudio::SegueStart:
|
|
case RDEditAudio::SegueEnd:
|
|
deleteSegueData();
|
|
break;
|
|
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::TalkEnd:
|
|
deleteTalkData();
|
|
break;
|
|
|
|
case RDEditAudio::HookStart:
|
|
case RDEditAudio::HookEnd:
|
|
deleteHookData();
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
deleteFadeupData();
|
|
break;
|
|
|
|
case RDEditAudio::FadeDown:
|
|
deleteFadedownData();
|
|
break;
|
|
}
|
|
for(int i=1;i<11;i++) {
|
|
edit_cue_button[i]->setToggleButton(true);
|
|
}
|
|
edit_remove_button->setFlashingEnabled(false);
|
|
edit_remove_button->setOn(false);
|
|
delete_marker=false;
|
|
}
|
|
else {
|
|
if(edit_cue_button[id]->isOn()) {
|
|
edit_cue_button[id]->setFlashingEnabled(true);
|
|
if(edit_cue_point!=RDEditAudio::Play) {
|
|
cueEditData(edit_cue_point);
|
|
edit_cue_button[edit_cue_point]->setOn(false);
|
|
edit_cue_button[edit_cue_point]->setFlashingEnabled(false);
|
|
edit_cursor_edit[edit_cue_point]->setReadOnly(true);
|
|
}
|
|
edit_cue_point=(RDEditAudio::CuePoints)id;
|
|
edit_cue_string=edit_cursor_edit[edit_cue_point]->text();
|
|
edit_cursor_edit[edit_cue_point]->setReadOnly(false);
|
|
switch(id) {
|
|
case RDEditAudio::Start:
|
|
case RDEditAudio::SegueStart:
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::HookStart:
|
|
case RDEditAudio::FadeDown:
|
|
rda->cae()->positionPlay(edit_handle,GetTime(edit_cursors[id]*1152));
|
|
break;
|
|
|
|
case RDEditAudio::End:
|
|
case RDEditAudio::SegueEnd:
|
|
case RDEditAudio::TalkEnd:
|
|
case RDEditAudio::HookEnd:
|
|
case RDEditAudio::FadeUp:
|
|
PreRoll(edit_cursors[id]*1152,(RDEditAudio::CuePoints)id);
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
edit_cue_button[id]->setFlashingEnabled(false);
|
|
edit_cue_point=RDEditAudio::Play;
|
|
rda->cae()->positionPlay(edit_handle,0);
|
|
}
|
|
}
|
|
UpdateCounters();
|
|
}
|
|
|
|
|
|
void RDEditAudio::cueEditData(int id)
|
|
{
|
|
int cursor;
|
|
int old_cursor;
|
|
|
|
old_cursor=1152*edit_cursors[id];
|
|
if((cursor=(int)((double)(RDSetTimeLength(edit_cursor_edit[id]->text())*
|
|
(double)edit_sample_rate/1000.0)))<0) {
|
|
cursor=1152*edit_cursors[id];
|
|
edit_cursor_edit[id]->setText(edit_cue_string);
|
|
return;
|
|
}
|
|
ignore_pause=true;
|
|
if(!PositionCursor(cursor)) {
|
|
PositionCursor(old_cursor);
|
|
}
|
|
ignore_pause=false;
|
|
edit_cursor_edit[id]->setFocus();
|
|
edit_cursor_edit[id]->selectAll();
|
|
return;
|
|
}
|
|
|
|
|
|
void RDEditAudio::cueEscData(int id)
|
|
{
|
|
edit_cursor_edit[id]->setText(edit_cue_string);
|
|
edit_cursor_edit[id]->selectAll();
|
|
}
|
|
|
|
|
|
void RDEditAudio::updateMenuData()
|
|
{
|
|
if(edit_cursors[RDEditAudio::Start]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::Start,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::Start,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::End]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::End,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::End,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::SegueStart]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::SegueStart,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::SegueStart,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::SegueEnd]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::SegueEnd,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::SegueEnd,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::TalkStart]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::TalkStart,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::TalkStart,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::TalkEnd]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::TalkEnd,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::TalkEnd,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::FadeUp]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::FadeUp,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::FadeUp,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::FadeDown]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::FadeDown,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::FadeDown,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::HookStart]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::HookStart,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::HookStart,false);
|
|
}
|
|
if(edit_cursors[RDEditAudio::HookEnd]!=-1) {
|
|
edit_menu->setItemEnabled(RDEditAudio::HookEnd,true);
|
|
}
|
|
else {
|
|
edit_menu->setItemEnabled(RDEditAudio::HookEnd,false);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::deleteSegueData()
|
|
{
|
|
DeleteMarkerData(RDEditAudio::SegueStart);
|
|
}
|
|
|
|
|
|
void RDEditAudio::deleteFadeupData()
|
|
{
|
|
DeleteMarkerData(RDEditAudio::FadeUp);
|
|
}
|
|
|
|
|
|
void RDEditAudio::deleteFadedownData()
|
|
{
|
|
DeleteMarkerData(RDEditAudio::FadeDown);
|
|
}
|
|
|
|
|
|
void RDEditAudio::deleteTalkData()
|
|
{
|
|
DeleteMarkerData(RDEditAudio::TalkStart);
|
|
}
|
|
|
|
|
|
void RDEditAudio::deleteHookData()
|
|
{
|
|
DeleteMarkerData(RDEditAudio::HookStart);
|
|
}
|
|
|
|
|
|
void RDEditAudio::trimHeadData()
|
|
{
|
|
RDEditAudio::CuePoints point;
|
|
RDTrimAudio::ErrorCode conv_err;
|
|
RDTrimAudio *conv=new RDTrimAudio(rda->station(),rda->config(),this);
|
|
conv->setCartNumber(edit_cut->cartNumber());
|
|
conv->setCutNumber(edit_cut->cutNumber());
|
|
conv->setTrimLevel(100*edit_trim_box->value());
|
|
switch(conv_err=conv->runTrim(rda->user()->name(),rda->user()->password())) {
|
|
case RDTrimAudio::ErrorOk:
|
|
if(conv->startPoint()>=0) {
|
|
point=edit_cue_point;
|
|
edit_cue_point=RDEditAudio::Start;
|
|
PositionCursor((double)conv->startPoint()*
|
|
(double)edit_sample_rate/1000.0);
|
|
UpdateCounters();
|
|
edit_cue_point=point;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
QMessageBox::warning(this,tr("Edit Audio"),
|
|
RDTrimAudio::errorText(conv_err));
|
|
break;
|
|
}
|
|
delete conv;
|
|
}
|
|
|
|
|
|
void RDEditAudio::trimTailData()
|
|
{
|
|
RDEditAudio::CuePoints point;
|
|
RDTrimAudio::ErrorCode conv_err;
|
|
RDTrimAudio *conv=new RDTrimAudio(rda->station(),rda->config(),this);
|
|
conv->setCartNumber(edit_cut->cartNumber());
|
|
conv->setCutNumber(edit_cut->cutNumber());
|
|
conv->setTrimLevel(100*edit_trim_box->value());
|
|
switch(conv_err=conv->runTrim(rda->user()->name(),rda->user()->password())) {
|
|
case RDTrimAudio::ErrorOk:
|
|
if(conv->endPoint()>=0) {
|
|
point=edit_cue_point;
|
|
edit_cue_point=RDEditAudio::End;
|
|
PositionCursor((double)conv->endPoint()*(double)edit_sample_rate/1000.0);
|
|
UpdateCounters();
|
|
edit_cue_point=point;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
QMessageBox::warning(this,tr("Edit Audio"),
|
|
RDTrimAudio::errorText(conv_err));
|
|
break;
|
|
}
|
|
delete conv;
|
|
}
|
|
|
|
|
|
void RDEditAudio::gainUpPressedData()
|
|
{
|
|
edit_gain_mode=RDEditAudio::GainUp;
|
|
gainTimerData();
|
|
edit_gain_timer->start(TYPO_RATE_1);
|
|
}
|
|
|
|
|
|
void RDEditAudio::gainDownPressedData()
|
|
{
|
|
edit_gain_mode=RDEditAudio::GainDown;
|
|
gainTimerData();
|
|
edit_gain_timer->start(TYPO_RATE_1);
|
|
}
|
|
|
|
|
|
void RDEditAudio::gainChangedData()
|
|
{
|
|
int gain;
|
|
|
|
if(sscanf((const char *)edit_gain_edit->text(),"%d",&gain)==1) {
|
|
edit_gain_control->setValue(gain*100);
|
|
}
|
|
edit_gain_edit->
|
|
setText(QString().sprintf("%4.1f ",
|
|
(double)edit_gain_control->value()/100.0)+tr("dB"));
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
|
|
|
|
void RDEditAudio::gainReleasedData()
|
|
{
|
|
edit_gain_timer->stop();
|
|
edit_gain_mode=RDEditAudio::GainNone;
|
|
edit_gain_count=0;
|
|
}
|
|
|
|
|
|
void RDEditAudio::gainTimerData()
|
|
{
|
|
switch(edit_gain_mode) {
|
|
case RDEditAudio::GainUp:
|
|
edit_gain_control->addLine();
|
|
if(edit_gain_count++==1) {
|
|
edit_gain_timer->changeInterval(TYPO_RATE_2);
|
|
}
|
|
break;
|
|
|
|
case RDEditAudio::GainDown:
|
|
edit_gain_control->subtractLine();
|
|
if(edit_gain_count++==1) {
|
|
edit_gain_timer->changeInterval(TYPO_RATE_2);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
edit_gain_edit->
|
|
setText(QString().sprintf("%4.1f ",
|
|
(double)edit_gain_control->value()/100.0)+tr("dB"));
|
|
DrawMaps();
|
|
repaint(false);
|
|
}
|
|
|
|
|
|
void RDEditAudio::removeButtonData()
|
|
{
|
|
if(edit_remove_button->isOn()) {
|
|
if(edit_cue_point!=RDEditAudio::Play) {
|
|
edit_cue_button[edit_cue_point]->setOn(false);
|
|
edit_cue_button[edit_cue_point]->setFlashingEnabled(false);
|
|
edit_cue_point=RDEditAudio::Play;
|
|
}
|
|
for(int i=1;i<11;i++) {
|
|
edit_cue_button[i]->setToggleButton(false);
|
|
}
|
|
edit_remove_button->setFlashingEnabled(true);
|
|
delete_marker=true;
|
|
}
|
|
else {
|
|
for(int i=1;i<11;i++) {
|
|
edit_cue_button[i]->setToggleButton(true);
|
|
}
|
|
edit_remove_button->setFlashingEnabled(false);
|
|
delete_marker=false;
|
|
}
|
|
UpdateCounters();
|
|
}
|
|
|
|
|
|
void RDEditAudio::meterData()
|
|
{
|
|
short levels[2];
|
|
|
|
rda->cae()->outputMeterUpdate(edit_card,edit_port,levels);
|
|
edit_meter->setLeftPeakBar(levels[0]);
|
|
edit_meter->setRightPeakBar(levels[1]);
|
|
}
|
|
|
|
|
|
void RDEditAudio::paintEvent(QPaintEvent *e)
|
|
{
|
|
QPainter *p=new QPainter(this);
|
|
|
|
//
|
|
// Waveforms
|
|
//
|
|
p->setPen(QColor(Qt::black));
|
|
if(edit_channels==1) {
|
|
p->drawImage(11,11,edit_left_image);
|
|
}
|
|
if(edit_channels==2) {
|
|
p->drawImage(11,11,edit_left_image);
|
|
p->drawImage(11,11+EDITAUDIO_WAVEFORM_HEIGHT/2,edit_right_image);
|
|
}
|
|
|
|
//
|
|
// Transport Control Area
|
|
//
|
|
p->setPen(QColor(colorGroup().shadow()));
|
|
p->fillRect(11,30+EDITAUDIO_WAVEFORM_HEIGHT,EDITAUDIO_WAVEFORM_WIDTH,92,
|
|
QColor(EDITAUDIO_HIGHLIGHT_COLOR));
|
|
p->drawRect(11,30+EDITAUDIO_WAVEFORM_HEIGHT,EDITAUDIO_WAVEFORM_WIDTH,92);
|
|
|
|
//
|
|
// Marker Control Area
|
|
//
|
|
p->drawRect(11,130+EDITAUDIO_WAVEFORM_HEIGHT,717,197);
|
|
|
|
delete p;
|
|
UpdateCursors();
|
|
}
|
|
|
|
|
|
void RDEditAudio::mouseMoveEvent(QMouseEvent *e)
|
|
{
|
|
int cursor;
|
|
|
|
if((e->x()>10)&&(e->x()<(10+EDITAUDIO_WAVEFORM_WIDTH))&&
|
|
(e->y()>10)&&(e->y()<(EDITAUDIO_WAVEFORM_HEIGHT+6))) {
|
|
setCursor(*edit_cross_cursor);
|
|
if(left_button_pressed) {
|
|
cursor=(int)((((double)e->x()-10.0)*edit_factor_x+
|
|
(double)edit_hscroll->value())*1152.0);
|
|
if(edit_cue_point!=RDEditAudio::Play) {
|
|
ignore_pause=true;
|
|
PositionCursor(cursor);
|
|
ignore_pause=false;
|
|
}
|
|
else {
|
|
ignore_pause=true;
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
ignore_pause=false;
|
|
}
|
|
}
|
|
if(center_button_pressed) {
|
|
cursor=(int)((((double)e->x()-10.0)*edit_factor_x+
|
|
(double)edit_hscroll->value())*1152.0);
|
|
ignore_pause=true;
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
ignore_pause=false;
|
|
}
|
|
}
|
|
else {
|
|
setCursor(*edit_arrow_cursor);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::mousePressEvent(QMouseEvent *e)
|
|
{
|
|
int cursor;
|
|
|
|
if((e->x()>10)&&(e->x()<788)&&(e->y()>10)&&(e->y()<400)) {
|
|
cursor=(int)((((double)e->x()-10.0)*edit_factor_x+
|
|
(double)edit_hscroll->value())*1152.0);
|
|
switch(e->button()) {
|
|
case Qt::LeftButton:
|
|
left_button_pressed=true;
|
|
if(edit_cue_point!=RDEditAudio::Play) {
|
|
ignore_pause=true;
|
|
PositionCursor(cursor);
|
|
ignore_pause=false;
|
|
}
|
|
else {
|
|
ignore_pause=true;
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
ignore_pause=false;
|
|
}
|
|
break;
|
|
|
|
case Qt::MidButton:
|
|
center_button_pressed=true;
|
|
ignore_pause=true;
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
ignore_pause=false;
|
|
break;
|
|
|
|
case Qt::RightButton:
|
|
edit_menu->setGeometry(e->x(),e->y()+53,
|
|
edit_menu->sizeHint().width(),
|
|
edit_menu->sizeHint().height());
|
|
edit_menu->exec();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::mouseReleaseEvent(QMouseEvent *e)
|
|
{
|
|
switch(e->button()) {
|
|
case Qt::LeftButton:
|
|
left_button_pressed=false;
|
|
break;
|
|
|
|
case Qt::MidButton:
|
|
center_button_pressed=false;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::keyPressEvent(QKeyEvent *e)
|
|
{
|
|
switch(e->key()) {
|
|
case Qt::Key_Space:
|
|
if(is_playing) {
|
|
stopData();
|
|
}
|
|
else {
|
|
if(e->state()==0) {
|
|
playCursorData();
|
|
}
|
|
if((e->state()&Qt::ControlButton)!=0) {
|
|
playStartData();
|
|
}
|
|
}
|
|
e->accept();
|
|
break;
|
|
|
|
case Qt::Key_Left:
|
|
PositionCursor(-(edit_sample_rate/10),true);
|
|
e->accept();
|
|
break;
|
|
|
|
case Qt::Key_Right:
|
|
PositionCursor(edit_sample_rate/10,true);
|
|
e->accept();
|
|
break;
|
|
|
|
case Qt::Key_Plus:
|
|
xUp();
|
|
break;
|
|
|
|
case Qt::Key_Minus:
|
|
xDown();
|
|
break;
|
|
|
|
case Qt::Key_Home:
|
|
gotoHomeData();
|
|
break;
|
|
|
|
case Qt::Key_End:
|
|
gotoEndData();
|
|
break;
|
|
|
|
case Qt::Key_Delete:
|
|
DeleteMarkerData(edit_cue_point);
|
|
break;
|
|
|
|
default:
|
|
e->ignore();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::closeEvent(QCloseEvent *e)
|
|
{
|
|
cancelData();
|
|
}
|
|
|
|
|
|
void RDEditAudio::DeleteMarkerData(int id)
|
|
{
|
|
if((id==RDEditAudio::Play)||(id==RDEditAudio::Start)||(id==RDEditAudio::End)) {
|
|
return;
|
|
}
|
|
switch(id) {
|
|
case RDEditAudio::Start:
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::SegueStart:
|
|
case RDEditAudio::HookStart:
|
|
edit_cursors[id]=-1;
|
|
edit_cursors[id+1]=-1;
|
|
edit_cursor_edit[id]->clear();
|
|
edit_cursor_edit[id+1]->clear();
|
|
break;
|
|
|
|
case RDEditAudio::End:
|
|
case RDEditAudio::TalkEnd:
|
|
case RDEditAudio::SegueEnd:
|
|
case RDEditAudio::HookEnd:
|
|
edit_cursors[id]=-1;
|
|
edit_cursors[id-1]=-1;
|
|
edit_cursor_edit[id]->clear();
|
|
edit_cursor_edit[id-1]->clear();
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
case RDEditAudio::FadeDown:
|
|
edit_cursors[id]=-1;
|
|
edit_cursor_edit[id]->clear();
|
|
break;
|
|
}
|
|
UpdateCursors();
|
|
UpdateCounters();
|
|
}
|
|
|
|
|
|
void RDEditAudio::PreRoll(int cursor,RDEditAudio::CuePoints point)
|
|
{
|
|
int prepoint=cursor-edit_preroll;
|
|
switch(point) {
|
|
case RDEditAudio::SegueEnd:
|
|
if(prepoint>1152*edit_cursors[RDEditAudio::SegueStart]) {
|
|
rda->cae()->positionPlay(edit_handle,GetTime(prepoint));
|
|
}
|
|
else {
|
|
rda->cae()->positionPlay(edit_handle,
|
|
GetTime(1152*edit_cursors[RDEditAudio::SegueStart]));
|
|
}
|
|
break;
|
|
|
|
case RDEditAudio::End:
|
|
if(prepoint>1152*edit_cursors[RDEditAudio::Start]) {
|
|
rda->cae()->positionPlay(edit_handle,GetTime(prepoint));
|
|
}
|
|
else {
|
|
rda->cae()->positionPlay(edit_handle,
|
|
GetTime(1152*edit_cursors[RDEditAudio::Start]));
|
|
}
|
|
break;
|
|
|
|
case RDEditAudio::TalkEnd:
|
|
if(prepoint>1152*edit_cursors[RDEditAudio::TalkStart]) {
|
|
rda->cae()->positionPlay(edit_handle,GetTime(prepoint));
|
|
}
|
|
else {
|
|
rda->cae()->positionPlay(edit_handle,
|
|
GetTime(1152*edit_cursors[RDEditAudio::TalkStart]));
|
|
}
|
|
break;
|
|
|
|
case RDEditAudio::HookEnd:
|
|
if(prepoint>1152*edit_cursors[RDEditAudio::HookStart]) {
|
|
rda->cae()->positionPlay(edit_handle,GetTime(prepoint));
|
|
}
|
|
else {
|
|
rda->cae()->positionPlay(edit_handle,
|
|
GetTime(1152*edit_cursors[RDEditAudio::HookStart]));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
bool RDEditAudio::PositionCursor(int cursor,bool relative)
|
|
{
|
|
switch(edit_cue_point) {
|
|
case RDEditAudio::Start:
|
|
case RDEditAudio::TalkStart:
|
|
case RDEditAudio::HookStart:
|
|
case RDEditAudio::SegueStart:
|
|
if((edit_cursors[edit_cue_point+1]==-1)&&(cursor!=-1)) {
|
|
edit_cursors[edit_cue_point+1]=edit_cursors[RDEditAudio::End];
|
|
edit_cursor_edit[edit_cue_point+1]->
|
|
setText(RDGetTimeLength(
|
|
(int)(1152000.0*(double)edit_cursors[edit_cue_point+1]/
|
|
(double)edit_sample_rate),true));
|
|
}
|
|
if(relative) {
|
|
if((edit_cursors[edit_cue_point]+cursor/1152)>
|
|
edit_cursors[edit_cue_point+1]) {
|
|
return false;
|
|
}
|
|
if(((edit_cursors[edit_cue_point]+cursor/1152)<
|
|
edit_cursors[RDEditAudio::Start])&&
|
|
(edit_cue_point!=RDEditAudio::Start)) {
|
|
return false;
|
|
}
|
|
edit_cursors[edit_cue_point]+=cursor/1152;
|
|
cursor=edit_cursors[edit_cue_point]*1152;
|
|
}
|
|
else {
|
|
if((cursor/1152)>edit_cursors[edit_cue_point+1]) {
|
|
return false;
|
|
}
|
|
if(((cursor/1152)<edit_cursors[RDEditAudio::Start])&&
|
|
(edit_cue_point!=RDEditAudio::Start)) {
|
|
return false;
|
|
}
|
|
edit_cursors[edit_cue_point]=cursor/1152;
|
|
}
|
|
edit_cursor_edit[edit_cue_point]->
|
|
setText(RDGetTimeLength((int)(1000.0*(double)cursor/
|
|
(double)edit_sample_rate),true));
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
break;
|
|
|
|
case RDEditAudio::End:
|
|
case RDEditAudio::TalkEnd:
|
|
case RDEditAudio::HookEnd:
|
|
case RDEditAudio::SegueEnd:
|
|
if((edit_cursors[edit_cue_point-1]==-1)&&(cursor!=-1)) {
|
|
edit_cursors[edit_cue_point-1]=edit_cursors[RDEditAudio::Start];
|
|
edit_cursor_edit[edit_cue_point-1]->
|
|
setText(RDGetTimeLength(
|
|
(int)(1152000.0*(double)edit_cursors[edit_cue_point-1]/
|
|
(double)edit_sample_rate),true));
|
|
}
|
|
if(relative) {
|
|
if((edit_cursors[edit_cue_point]+cursor/1152)<
|
|
edit_cursors[edit_cue_point-1]) {
|
|
return false;
|
|
}
|
|
if(((edit_cursors[edit_cue_point]+cursor/1152)>
|
|
edit_cursors[RDEditAudio::End])&&
|
|
(edit_cue_point!=RDEditAudio::End)) {
|
|
return false;
|
|
}
|
|
if((edit_cue_point==RDEditAudio::End)&&
|
|
((1152*edit_cursors[edit_cue_point]+cursor)
|
|
>(int)edit_sample_length)) {
|
|
cursor=edit_sample_length-
|
|
1152*edit_cursors[edit_cue_point];;
|
|
}
|
|
edit_cursors[edit_cue_point]+=cursor/1152;
|
|
cursor=edit_cursors[edit_cue_point]*1152;
|
|
}
|
|
else {
|
|
if((cursor/1152)<edit_cursors[edit_cue_point-1]) {
|
|
return false;
|
|
}
|
|
if(((cursor/1152)>edit_cursors[RDEditAudio::End])&&
|
|
(edit_cue_point!=RDEditAudio::End)) {
|
|
return false;
|
|
}
|
|
if((edit_cue_point==RDEditAudio::End)&&
|
|
(cursor>(int)edit_sample_length)) {
|
|
cursor=edit_sample_length;
|
|
}
|
|
edit_cursors[edit_cue_point]=cursor/1152;
|
|
}
|
|
if(((edit_play_mode==RDEditAudio::Region)&&
|
|
((edit_cue_point==edit_cue_point-1)||
|
|
(edit_cue_point==edit_cue_point)))) {
|
|
}
|
|
edit_cursor_edit[edit_cue_point]->
|
|
setText(RDGetTimeLength((int)(1000.0*(double)cursor/
|
|
(double)edit_sample_rate),true));
|
|
PreRoll(cursor,edit_cue_point);
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
if(relative) {
|
|
if(((edit_cursors[RDEditAudio::FadeUp]+cursor/1152)>
|
|
edit_cursors[RDEditAudio::FadeDown])&&
|
|
edit_cursors[RDEditAudio::FadeDown]==-1) {
|
|
return false;
|
|
}
|
|
if((edit_cursors[edit_cue_point]+cursor/1152)<
|
|
edit_cursors[RDEditAudio::Start]) {
|
|
return false;
|
|
}
|
|
edit_cursors[RDEditAudio::FadeUp]+=cursor/1152;
|
|
cursor=edit_cursors[RDEditAudio::FadeUp]*1152;
|
|
}
|
|
else {
|
|
if(((cursor/1152)>edit_cursors[RDEditAudio::FadeDown])&&
|
|
(edit_cursors[RDEditAudio::FadeDown]!=-1)) {
|
|
return false;
|
|
}
|
|
if(((cursor/1152)<edit_cursors[RDEditAudio::Start])||
|
|
((cursor/1152)>edit_cursors[RDEditAudio::End])) {
|
|
return false;
|
|
}
|
|
edit_cursors[RDEditAudio::FadeUp]=cursor/1152;
|
|
}
|
|
if(((edit_play_mode==RDEditAudio::Region)&&
|
|
((edit_cue_point==RDEditAudio::FadeUp)))) {
|
|
}
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->
|
|
setText(RDGetTimeLength((int)(1000.0*(double)cursor/
|
|
(double)edit_sample_rate),true));
|
|
rda->cae()->positionPlay(edit_handle,
|
|
GetTime(edit_cursors[RDEditAudio::Start]*1152));
|
|
break;
|
|
|
|
case RDEditAudio::FadeDown:
|
|
if(relative) {
|
|
if((edit_cursors[RDEditAudio::FadeDown]+cursor/1152)<
|
|
edit_cursors[RDEditAudio::FadeUp]) {
|
|
return false;
|
|
}
|
|
if(((edit_cursors[RDEditAudio::FadeDown]+cursor/1152)<
|
|
edit_cursors[RDEditAudio::Start])||
|
|
((edit_cursors[RDEditAudio::FadeDown]+cursor/1152)>
|
|
edit_cursors[RDEditAudio::End])) {
|
|
return false;
|
|
}
|
|
edit_cursors[RDEditAudio::FadeDown]+=cursor/1152;
|
|
cursor=edit_cursors[RDEditAudio::FadeDown]*1152;
|
|
}
|
|
else {
|
|
if(((cursor/1152)<edit_cursors[RDEditAudio::FadeUp])) {
|
|
return false;
|
|
}
|
|
if(((cursor/1152)<edit_cursors[RDEditAudio::Start])||
|
|
((cursor/1152)>edit_cursors[RDEditAudio::End])) {
|
|
return false;
|
|
}
|
|
edit_cursors[RDEditAudio::FadeDown]=cursor/1152;
|
|
}
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->
|
|
setText(RDGetTimeLength((int)(1000.0*(double)cursor/
|
|
(double)edit_sample_rate),true));
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor));
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
ValidateMarkers();
|
|
UpdateCursors();
|
|
UpdateCounters();
|
|
update(0,0,11,399);
|
|
update(11+EDITAUDIO_WAVEFORM_WIDTH,0,11,399);
|
|
return true;
|
|
}
|
|
|
|
|
|
void RDEditAudio::ValidateMarkers()
|
|
{
|
|
for(int i=RDEditAudio::SegueStart;i<RDEditAudio::FadeUp;i+=2) {
|
|
if(edit_cursors[i]!=-1) {
|
|
if(edit_cursors[i]<edit_cursors[RDEditAudio::Start]) {
|
|
if((edit_cursors[i+1]>=edit_cursors[RDEditAudio::Start])&&
|
|
(edit_cursors[i+1]<=edit_cursors[RDEditAudio::End])) {
|
|
edit_cursors[i]=edit_cursors[RDEditAudio::Start];
|
|
edit_cursor_edit[i]->setText(
|
|
RDGetTimeLength((int)((double)edit_cursors[i]*
|
|
1152000.0/(double)edit_sample_rate),true));
|
|
}
|
|
else {
|
|
edit_cursors[i]=-1;
|
|
edit_cursors[i+1]=-1;
|
|
edit_cursor_edit[i]->clear();
|
|
edit_cursor_edit[i+1]->clear();
|
|
}
|
|
}
|
|
}
|
|
if(edit_cursors[i+1]!=-1) {
|
|
if(edit_cursors[i+1]>edit_cursors[RDEditAudio::End]) {
|
|
if((edit_cursors[i]>=edit_cursors[RDEditAudio::Start])&&
|
|
(edit_cursors[i]<=edit_cursors[RDEditAudio::End])) {
|
|
edit_cursors[i+1]=edit_cursors[RDEditAudio::End];
|
|
edit_cursor_edit[i+1]->setText(
|
|
RDGetTimeLength((int)((double)edit_cursors[i+1]*
|
|
1152000.0/(double)edit_sample_rate),true));
|
|
}
|
|
else {
|
|
edit_cursors[i]=-1;
|
|
edit_cursors[i+1]=-1;
|
|
edit_cursor_edit[i]->clear();
|
|
edit_cursor_edit[i+1]->clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for(int i=RDEditAudio::FadeUp;i<RDEditAudio::LastMarker;i++) {
|
|
if(edit_cursors[i]!=-1) {
|
|
if(edit_cursors[i]<edit_cursors[RDEditAudio::Start]) {
|
|
edit_cursors[i]=-1;
|
|
edit_cursor_edit[i]->clear();
|
|
}
|
|
if(edit_cursors[i]>edit_cursors[RDEditAudio::End]) {
|
|
edit_cursors[i]=-1;
|
|
edit_cursor_edit[i]->clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
bool RDEditAudio::SaveMarkers()
|
|
{
|
|
//
|
|
// Sanity Checks
|
|
//
|
|
int start_point=(int)((double)(edit_cursors[RDEditAudio::Start])*
|
|
1152000.0/(double)edit_sample_rate);
|
|
int end_point=(int)((double)(edit_cursors[RDEditAudio::End])*
|
|
1152000.0/(double)edit_sample_rate)+26;
|
|
int len=(int)(1000.0*(double)edit_sample_length/(double)edit_sample_rate);
|
|
if((2*(end_point-start_point))<len) {
|
|
if(QMessageBox::question(this,tr("Marker Warning"),
|
|
tr("Less than half of the audio is playable with these marker settings.\nAre you sure you want to save?"),QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(edit_cursors[RDEditAudio::SegueStart]!=-1&&!edit_overlap_box->isChecked()) {
|
|
len=end_point-start_point;
|
|
start_point=(int)((double)(edit_cursors[RDEditAudio::SegueStart])*
|
|
1152000.0/(double)edit_sample_rate);
|
|
end_point=(int)((double)(edit_cursors[RDEditAudio::SegueEnd])*
|
|
1152000.0/(double)edit_sample_rate);
|
|
if((2*(end_point-start_point))>len) {
|
|
if(QMessageBox::question(this,tr("Marker Warning"),
|
|
tr("More than half of the audio will be faded with these marker settings.\nAre you sure you want to save?"),QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Save Settings
|
|
//
|
|
edit_cut->setStartPoint((int)((double)(edit_cursors[RDEditAudio::Start])*
|
|
1152000.0/
|
|
(double)edit_sample_rate));
|
|
edit_cut->setEndPoint((int)((double)(edit_cursors[RDEditAudio::End])*
|
|
1152000.0/
|
|
(double)edit_sample_rate)+26);
|
|
if(edit_cursors[RDEditAudio::TalkStart]!=-1) {
|
|
edit_cut->
|
|
setTalkStartPoint((int)((double)(edit_cursors[RDEditAudio::TalkStart])*
|
|
1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setTalkStartPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::TalkEnd]!=-1) {
|
|
edit_cut->setTalkEndPoint((int)((double)(edit_cursors[RDEditAudio::TalkEnd])*
|
|
1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setTalkEndPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::SegueStart]!=-1) {
|
|
edit_cut->setSegueStartPoint((int)((double)(edit_cursors[RDEditAudio::SegueStart])*1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setSegueStartPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::SegueEnd]!=-1) {
|
|
edit_cut->
|
|
setSegueEndPoint((int)((double)(edit_cursors[RDEditAudio::SegueEnd])*
|
|
1152000.0/(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setSegueEndPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::FadeUp]!=-1) {
|
|
edit_cut->setFadeupPoint((int)((double)(edit_cursors[RDEditAudio::FadeUp])*1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setFadeupPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::FadeDown]!=-1) {
|
|
edit_cut->
|
|
setFadedownPoint((int)((double)(edit_cursors[RDEditAudio::FadeDown])*
|
|
1152000.0/(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setFadedownPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::HookStart]!=-1) {
|
|
edit_cut->setHookStartPoint((int)((double)(edit_cursors[RDEditAudio::HookStart])*1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setHookStartPoint(-1);
|
|
}
|
|
if(edit_cursors[RDEditAudio::HookEnd]!=-1) {
|
|
edit_cut->setHookEndPoint((int)((double)(edit_cursors[RDEditAudio::HookEnd])*
|
|
1152000.0/
|
|
(double)edit_sample_rate));
|
|
}
|
|
else {
|
|
edit_cut->setHookEndPoint(-1);
|
|
}
|
|
edit_cut->setLength(edit_cut->endPoint(true)-edit_cut->startPoint(true));
|
|
edit_cut->setPlayGain(edit_gain_control->value());
|
|
if(edit_overlap_box->isChecked()) {
|
|
edit_cut->setSegueGain(0);
|
|
}
|
|
else {
|
|
edit_cut->setSegueGain(RD_FADE_DEPTH);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
void RDEditAudio::LoopRegion(int cursor0,int cursor1)
|
|
{
|
|
int length=0;
|
|
|
|
if(cursor1!=-1) {
|
|
length=(int)(1000.0*(double)((cursor1-cursor0)*
|
|
1152)/(double)edit_sample_rate);
|
|
}
|
|
if(cursor0==-1) {
|
|
rda->cae()->positionPlay(edit_handle,0);
|
|
rda->cae()->
|
|
setOutputVolume(edit_card,edit_stream,edit_port,0+edit_gain_control->value());
|
|
rda->cae()->play(edit_handle,length,RD_TIMESCALE_DIVISOR,0);
|
|
}
|
|
else {
|
|
rda->cae()->positionPlay(edit_handle,GetTime(cursor0*1152));
|
|
rda->cae()->
|
|
setOutputVolume(edit_card,edit_stream,edit_port,0+edit_gain_control->value());
|
|
rda->cae()->play(edit_handle,length,RD_TIMESCALE_DIVISOR,0);
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::UpdateCounters()
|
|
{
|
|
int cursor0=0;
|
|
int cursor1=0;
|
|
bool null_region=false;
|
|
static RDEditAudio::CuePoints prev_cue_point=RDEditAudio::Play;
|
|
|
|
edit_overall_edit->setText(RDGetTimeLength(
|
|
(int)(1000.0*(double)((edit_cursors[RDEditAudio::Play]-baseline)*1152)/
|
|
(double)edit_sample_rate),true,true));
|
|
if(prev_cue_point!=RDEditAudio::Play) {
|
|
if(prev_cue_point!=edit_cue_point) {
|
|
edit_cursor_edit[prev_cue_point]->clearFocus();
|
|
edit_cursor_edit[prev_cue_point]->deselect();
|
|
}
|
|
}
|
|
|
|
switch(edit_cue_point) {
|
|
case RDEditAudio::Play:
|
|
edit_play_cursor_button->
|
|
setAccentColor(EDITAUDIO_WAVEFORM_COLOR);
|
|
edit_region_edit_label->setText(tr("<none>"));
|
|
edit_region_edit_label->
|
|
setPalette(QPalette(backgroundColor(),
|
|
QColor(EDITAUDIO_HIGHLIGHT_COLOR)));
|
|
break;
|
|
|
|
case RDEditAudio::Start:
|
|
cursor0=edit_cursors[RDEditAudio::Start];
|
|
cursor1=edit_cursors[RDEditAudio::End];
|
|
edit_play_cursor_button->
|
|
setAccentColor(QColor(RD_START_END_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Cut"));
|
|
edit_region_edit_label->setPalette(RD_START_END_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::Start]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::Start]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::End:
|
|
cursor0=edit_cursors[RDEditAudio::Start];
|
|
cursor1=edit_cursors[RDEditAudio::End];
|
|
edit_play_cursor_button->
|
|
setAccentColor(QColor(RD_START_END_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Cut"));
|
|
edit_region_edit_label->setPalette(RD_START_END_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::End]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::End]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::TalkStart:
|
|
cursor0=edit_cursors[RDEditAudio::TalkStart];
|
|
cursor1=edit_cursors[RDEditAudio::TalkEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_TALK_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Talk"));
|
|
edit_region_edit_label->setPalette(RD_TALK_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::TalkStart]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::TalkEnd:
|
|
cursor0=edit_cursors[RDEditAudio::TalkStart];
|
|
cursor1=edit_cursors[RDEditAudio::TalkEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_TALK_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Talk"));
|
|
edit_region_edit_label->setPalette(RD_TALK_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::TalkEnd]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::SegueStart:
|
|
cursor0=edit_cursors[RDEditAudio::SegueStart];
|
|
cursor1=edit_cursors[RDEditAudio::SegueEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_SEGUE_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Segue"));
|
|
edit_region_edit_label->setPalette(RD_SEGUE_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::SegueStart]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::SegueEnd:
|
|
cursor0=edit_cursors[RDEditAudio::SegueStart];
|
|
cursor1=edit_cursors[RDEditAudio::SegueEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_SEGUE_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Segue"));
|
|
edit_region_edit_label->setPalette(RD_SEGUE_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::SegueEnd]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::HookStart:
|
|
cursor0=edit_cursors[RDEditAudio::HookStart];
|
|
cursor1=edit_cursors[RDEditAudio::HookEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_HOOK_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Hook"));
|
|
edit_region_edit_label->setPalette(RD_HOOK_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::HookStart]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::HookStart]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::HookEnd:
|
|
cursor0=edit_cursors[RDEditAudio::HookStart];
|
|
cursor1=edit_cursors[RDEditAudio::HookEnd];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_HOOK_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Hook"));
|
|
edit_region_edit_label->setPalette(RD_HOOK_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::HookEnd]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::FadeUp:
|
|
cursor0=edit_cursors[RDEditAudio::Start];
|
|
cursor1=edit_cursors[RDEditAudio::FadeUp];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_FADE_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Fade Up"));
|
|
edit_region_edit_label->setPalette(RD_FADE_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::FadeUp]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::FadeDown:
|
|
cursor0=edit_cursors[RDEditAudio::FadeDown];
|
|
cursor1=edit_cursors[RDEditAudio::End];
|
|
edit_play_cursor_button->setAccentColor(QColor(RD_FADE_MARKER_COLOR));
|
|
edit_region_edit_label->setText(tr("Fade Down"));
|
|
edit_region_edit_label->setPalette(RD_FADE_MARKER_COLOR);
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->setFocus();
|
|
edit_cursor_edit[RDEditAudio::FadeDown]->selectAll();
|
|
break;
|
|
|
|
case RDEditAudio::LastMarker:
|
|
break;
|
|
}
|
|
if(cursor0==-1) {
|
|
cursor0=0;
|
|
null_region=true;
|
|
}
|
|
if(cursor1==-1) {
|
|
cursor1=edit_sample_length/1152;
|
|
null_region=true;
|
|
}
|
|
if(null_region||(edit_cue_point==RDEditAudio::Play)) {
|
|
edit_region_edit->setText("0:00:00.0");
|
|
edit_region_edit->setDisabled(true);
|
|
}
|
|
else {
|
|
edit_region_edit->setText(RDGetTimeLength(
|
|
(int)(1000.0*(double)((cursor1-cursor0)*1152)/
|
|
(double)edit_sample_rate),true,true));
|
|
edit_region_edit->setEnabled(true);
|
|
}
|
|
edit_size_edit->setText(RDGetTimeLength(
|
|
(int)(1000.0*(double)((edit_cursors[RDEditAudio::End]-
|
|
edit_cursors[RDEditAudio::Start])*1152)/
|
|
(double)edit_sample_rate),true,true));
|
|
prev_cue_point=edit_cue_point;
|
|
}
|
|
|
|
|
|
void RDEditAudio::DrawMaps()
|
|
{
|
|
QPixmap *pix=NULL;
|
|
|
|
if(edit_channels==1) {
|
|
pix=new QPixmap(EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT);
|
|
DrawWave(EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT,0,"",pix);
|
|
edit_left_image=pix->convertToImage();
|
|
delete pix;
|
|
}
|
|
if(edit_channels==2) {
|
|
pix=new QPixmap(EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT/2);
|
|
DrawWave(EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT/2,0,tr("L"),
|
|
pix);
|
|
edit_left_image=pix->convertToImage();
|
|
DrawWave(EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT/2,1,tr("R"),
|
|
pix);
|
|
edit_right_image=pix->convertToImage();
|
|
delete pix;
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::UpdateCursors()
|
|
{
|
|
if(edit_channels==1) {
|
|
DrawCursors(11,11,EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT-1,0);
|
|
}
|
|
if(edit_channels==2) {
|
|
DrawCursors(11,11,EDITAUDIO_WAVEFORM_WIDTH,EDITAUDIO_WAVEFORM_HEIGHT/2,0);
|
|
DrawCursors(11,11+EDITAUDIO_WAVEFORM_HEIGHT/2,EDITAUDIO_WAVEFORM_WIDTH,
|
|
(EDITAUDIO_WAVEFORM_HEIGHT/2)-1,1);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void RDEditAudio::DrawCursors(int xpos,int ypos,int xsize,int ysize,int chan)
|
|
{
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::Play],edit_prev_x[chan][RDEditAudio::Play],
|
|
QColor(EDITAUDIO_PLAY_COLOR),RDEditAudio::None,20);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::SegueStart],
|
|
edit_prev_x[chan][RDEditAudio::SegueStart],
|
|
QColor(RD_SEGUE_MARKER_COLOR),
|
|
RDEditAudio::Right,30);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::SegueEnd],
|
|
edit_prev_x[chan][RDEditAudio::SegueEnd],
|
|
QColor(RD_SEGUE_MARKER_COLOR),
|
|
RDEditAudio::Left,30);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::Start],
|
|
edit_prev_x[chan][RDEditAudio::Start],
|
|
QColor(RD_START_END_MARKER_COLOR),
|
|
RDEditAudio::Right,10);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::End],
|
|
edit_prev_x[chan][RDEditAudio::End],
|
|
QColor(RD_START_END_MARKER_COLOR),
|
|
RDEditAudio::Left,10);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::TalkStart],
|
|
edit_prev_x[chan][RDEditAudio::TalkStart],
|
|
QColor(RD_TALK_MARKER_COLOR),
|
|
RDEditAudio::Right,20);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::TalkEnd],
|
|
edit_prev_x[chan][RDEditAudio::TalkEnd],
|
|
QColor(RD_TALK_MARKER_COLOR),
|
|
RDEditAudio::Left,20);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::FadeUp],
|
|
edit_prev_x[chan][RDEditAudio::FadeUp],
|
|
QColor(RD_FADE_MARKER_COLOR),
|
|
RDEditAudio::Left,40);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::FadeDown],
|
|
edit_prev_x[chan][RDEditAudio::FadeDown],
|
|
QColor(RD_FADE_MARKER_COLOR),
|
|
RDEditAudio::Right,40);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::HookStart],
|
|
edit_prev_x[chan][RDEditAudio::HookStart],
|
|
QColor(RD_HOOK_MARKER_COLOR),
|
|
RDEditAudio::Right,50);
|
|
|
|
EraseCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::HookEnd],
|
|
edit_prev_x[chan][RDEditAudio::HookEnd],
|
|
QColor(RD_HOOK_MARKER_COLOR),
|
|
RDEditAudio::Left,50);
|
|
|
|
edit_prev_x[chan][RDEditAudio::Play]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::Play],
|
|
edit_prev_x[chan][RDEditAudio::Play],
|
|
QColor(EDITAUDIO_PLAY_COLOR),
|
|
RDEditAudio::None,20,
|
|
RDEditAudio::Play,
|
|
QPainter::RasterOp_SourceXorDestination);
|
|
|
|
edit_prev_x[chan][RDEditAudio::SegueStart]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::SegueStart],
|
|
edit_prev_x[chan][RDEditAudio::SegueStart],
|
|
QColor(RD_SEGUE_MARKER_COLOR),
|
|
RDEditAudio::Right,30,
|
|
RDEditAudio::SegueStart);
|
|
|
|
edit_prev_x[chan][RDEditAudio::SegueEnd]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::SegueEnd],
|
|
edit_prev_x[chan][RDEditAudio::SegueEnd],
|
|
QColor(RD_SEGUE_MARKER_COLOR),
|
|
RDEditAudio::Left,30,
|
|
RDEditAudio::SegueEnd);
|
|
|
|
edit_prev_x[chan][RDEditAudio::Start]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::Start],
|
|
edit_prev_x[chan][RDEditAudio::Start],
|
|
QColor(RD_START_END_MARKER_COLOR),
|
|
RDEditAudio::Right,10,
|
|
RDEditAudio::Start);
|
|
|
|
edit_prev_x[chan][RDEditAudio::End]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::End],
|
|
edit_prev_x[chan][RDEditAudio::End],
|
|
QColor(RD_START_END_MARKER_COLOR),
|
|
RDEditAudio::Left,10,
|
|
RDEditAudio::End);
|
|
|
|
edit_prev_x[chan][RDEditAudio::TalkStart]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::TalkStart],
|
|
edit_prev_x[chan][RDEditAudio::TalkStart],
|
|
QColor(RD_TALK_MARKER_COLOR),
|
|
RDEditAudio::Right,20,
|
|
RDEditAudio::TalkStart);
|
|
|
|
edit_prev_x[chan][RDEditAudio::TalkEnd]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::TalkEnd],
|
|
edit_prev_x[chan][RDEditAudio::TalkEnd],
|
|
QColor(RD_TALK_MARKER_COLOR),
|
|
RDEditAudio::Left,20,
|
|
RDEditAudio::TalkEnd);
|
|
|
|
edit_prev_x[chan][RDEditAudio::FadeUp]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::FadeUp],
|
|
edit_prev_x[chan][RDEditAudio::FadeUp],
|
|
QColor(RD_FADE_MARKER_COLOR),
|
|
RDEditAudio::Left,40,
|
|
RDEditAudio::FadeUp);
|
|
|
|
edit_prev_x[chan][RDEditAudio::FadeDown]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::FadeDown],
|
|
edit_prev_x[chan][RDEditAudio::FadeDown],
|
|
QColor(RD_FADE_MARKER_COLOR),
|
|
RDEditAudio::Right,40,
|
|
RDEditAudio::FadeDown);
|
|
|
|
edit_prev_x[chan][RDEditAudio::HookStart]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::HookStart],
|
|
edit_prev_x[chan][RDEditAudio::HookStart],
|
|
QColor(RD_HOOK_MARKER_COLOR),
|
|
RDEditAudio::Right,50,
|
|
RDEditAudio::HookStart);
|
|
|
|
edit_prev_x[chan][RDEditAudio::HookEnd]=
|
|
DrawCursor(xpos,ypos,xsize,ysize,chan,
|
|
edit_cursors[RDEditAudio::HookEnd],
|
|
edit_prev_x[chan][RDEditAudio::HookEnd],
|
|
QColor(RD_HOOK_MARKER_COLOR),
|
|
RDEditAudio::Left,50,
|
|
RDEditAudio::HookEnd);
|
|
}
|
|
|
|
|
|
int RDEditAudio::DrawCursor(int xpos,int ypos,int xsize,int ysize,int chan,
|
|
int samp,int prev,QColor color,Arrow arrow,int apos,
|
|
RDEditAudio::CuePoints pt,
|
|
QPainter::CompositionMode op)
|
|
{
|
|
int x;
|
|
Q3PointArray *point;
|
|
|
|
if((samp<0)||(prev<0)) {
|
|
return 0;
|
|
}
|
|
x=(int)((double)(samp-edit_hscroll->value())/edit_factor_x);
|
|
if((x!=prev)||(pt!=RDEditAudio::Play)) {
|
|
QPainter *p=new QPainter(this);
|
|
p->setClipRect(xpos,ypos,xsize,ysize);
|
|
p->setCompositionMode(op);
|
|
p->translate(xpos,ypos);
|
|
if((x>=0)&&(x<EDITAUDIO_WAVEFORM_WIDTH)) {
|
|
p->setPen(color);
|
|
p->drawLine(x,0,x,ysize);
|
|
if(arrow==RDEditAudio::Left) {
|
|
p->setClipRect(0,0,xsize+xpos+10,ysize+ypos);
|
|
p->setBrush(color);
|
|
point=new Q3PointArray(3);
|
|
point->setPoint(0,x,apos);
|
|
point->setPoint(1,x+10,apos-5);
|
|
point->setPoint(2,x+10,apos+5);
|
|
p->drawPolygon(*point);
|
|
point->setPoint(0,x,ysize-apos);
|
|
point->setPoint(1,x+10,ysize-apos-5);
|
|
point->setPoint(2,x+10,ysize-apos+5);
|
|
p->drawPolygon(*point);
|
|
delete point;
|
|
}
|
|
if(arrow==RDEditAudio::Right) {
|
|
p->setClipRect(-10,0,xsize+10,ysize+ypos);
|
|
p->setBrush(color);
|
|
point=new Q3PointArray(3);
|
|
point->setPoint(0,x,apos);
|
|
point->setPoint(1,x-10,apos-5);
|
|
point->setPoint(2,x-10,apos+5);
|
|
p->drawPolygon(*point);
|
|
point->setPoint(0,x,ysize-apos);
|
|
point->setPoint(1,x-10,ysize-apos-5);
|
|
point->setPoint(2,x-10,ysize-apos+5);
|
|
p->drawPolygon(*point);
|
|
delete point;
|
|
}
|
|
}
|
|
delete p;
|
|
}
|
|
return x;
|
|
}
|
|
|
|
|
|
void RDEditAudio::EraseCursor(int xpos,int ypos,int xsize,int ysize,int chan,
|
|
int samp,int prev,QColor color,Arrow arrow,int apos)
|
|
{
|
|
int x;
|
|
|
|
if((edit_hscroll==NULL)||(prev<0)) {
|
|
return;
|
|
}
|
|
x=(int)((double)(samp-edit_hscroll->value())/edit_factor_x);
|
|
if(x!=prev) {
|
|
QPainter *p=new QPainter(this);
|
|
p->translate(xpos,ypos);
|
|
if((prev>=0)&&(prev<EDITAUDIO_WAVEFORM_WIDTH)&&(prev!=x)) {
|
|
if(chan==0) {
|
|
p->drawImage(prev,0,edit_left_image,prev,0,1,ysize);
|
|
if(arrow==RDEditAudio::Left) {
|
|
p->drawImage(prev,apos-5,edit_left_image,prev,apos-5,11,25);
|
|
p->drawImage(prev,ysize-apos-5,edit_left_image,prev,ysize-apos-5,
|
|
11,25);
|
|
p->fillRect(xsize,0,10,ysize,QBrush(backgroundColor()));
|
|
}
|
|
if(arrow==RDEditAudio::Right) {
|
|
p->drawImage(prev-11,apos-5,edit_left_image,prev-11,apos-5,11,25);
|
|
p->drawImage(prev-11,ysize-apos-5,edit_left_image,prev-11,ysize-apos-5,
|
|
11,25);
|
|
p->fillRect(-10,0,10,ysize,QBrush(backgroundColor()));
|
|
}
|
|
}
|
|
if(chan==1) {
|
|
p->drawImage(prev,0,edit_right_image,prev,0,1,ysize);
|
|
if(arrow==RDEditAudio::Left) {
|
|
p->drawImage(prev,apos-5,edit_right_image,prev,apos-5,11,25);
|
|
p->drawImage(prev,ysize-apos-5,edit_right_image,prev,
|
|
ysize-apos-5,11,25);
|
|
p->fillRect(xsize,0,10,ysize,QBrush(backgroundColor()));
|
|
}
|
|
if(arrow==RDEditAudio::Right) {
|
|
p->drawImage(prev-11,apos-5,edit_right_image,prev-11,apos-5,11,25);
|
|
p->drawImage(prev-11,ysize-apos-5,edit_right_image,prev-11,
|
|
ysize-apos-5,11,25);
|
|
p->fillRect(-10,0,10,ysize,QBrush(backgroundColor()));
|
|
}
|
|
}
|
|
}
|
|
delete p;
|
|
}
|
|
}
|
|
|
|
|
|
void RDEditAudio::DrawWave(int xsize,int ysize,int chan,QString label,
|
|
QPixmap *pix)
|
|
{
|
|
unsigned offset;
|
|
unsigned origin_x;
|
|
int ref_line;
|
|
|
|
if(edit_factor_x>1) {
|
|
origin_x=(edit_hscroll->value()/(unsigned)edit_factor_x)*
|
|
(unsigned)edit_factor_x;
|
|
}
|
|
else {
|
|
origin_x=edit_hscroll->value();;
|
|
}
|
|
QPainter *p=new QPainter(pix);
|
|
p->eraseRect(0,0,xsize,ysize);
|
|
p->drawRect(0,0,xsize,ysize);
|
|
|
|
int vert=ysize/2;
|
|
double size_y=pow(10,(-((double)edit_gain)/20.0));
|
|
ref_line=(int)(size_y*ysize*pow(10.0,-(double)REFERENCE_LEVEL/2000.0-
|
|
(double)edit_gain_control->value()/2000.0)/2.0);
|
|
|
|
//
|
|
// Grayed-Out Area
|
|
//
|
|
for(int i=1;i<(xsize-3);i++) {
|
|
offset=(unsigned)((double)i*edit_factor_x*
|
|
(double)edit_channels+
|
|
(double)edit_channels*
|
|
(double)origin_x);
|
|
if(offset>=edit_peaks->energySize()) {
|
|
// if(offset>=edit_wave->energySize()) {
|
|
p->fillRect(i,1,xsize-i,ysize-2,
|
|
QBrush(QColor(EDITAUDIO_HIGHLIGHT_COLOR)));
|
|
continue;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Reference Level Lines
|
|
//
|
|
p->setPen(QColor(Qt::red));
|
|
p->drawLine(0,vert+ref_line,xsize,vert+ref_line);
|
|
p->drawLine(0,vert-ref_line,xsize,vert-ref_line);
|
|
|
|
p->translate(1,ysize/2);
|
|
if(edit_peaks->energySize()>0) {
|
|
// if(edit_wave->energySize()>0) {
|
|
|
|
//
|
|
// Time Tick Marks
|
|
//
|
|
p->setFont(subLabelFont());
|
|
for(unsigned i=0;i<2*edit_peaks->energySize();
|
|
i+=(int)(edit_factor_x*(double)edit_sample_rate/576.0)) {
|
|
offset=(int)((double)(i-origin_x)/edit_factor_x);
|
|
if((offset>0)&&(offset<(EDITAUDIO_WAVEFORM_WIDTH-2))) {
|
|
p->setPen(QColor(Qt::green));
|
|
p->drawLine(offset,-ysize/2,offset,ysize/2);
|
|
p->setPen(QColor(Qt::red));
|
|
p->drawText(offset+3,ysize/2-4,
|
|
RDGetTimeLength((int)((1152000.0*(double)i)/
|
|
(double)edit_sample_rate+1000.0),
|
|
false,edit_factor_x<0.5));
|
|
}
|
|
}
|
|
|
|
double size_y=pow(10,(-((double)edit_gain)/20.0));
|
|
|
|
//
|
|
// Waveform
|
|
//
|
|
p->setPen(QColor(EDITAUDIO_WAVEFORM_COLOR));
|
|
p->setBrush(QColor(EDITAUDIO_WAVEFORM_COLOR));
|
|
edit_wave_array->setPoint(0,0,0);
|
|
for(int i=1;i<(xsize-3);i++) {
|
|
offset=(unsigned)((double)i*edit_factor_x*
|
|
(double)edit_channels+
|
|
(double)edit_channels*
|
|
(double)origin_x+(double)chan);
|
|
if(offset<edit_peaks->energySize()) {
|
|
edit_wave_array->setPoint(i,i+(int)((double)chan/(2.0*edit_factor_x)),
|
|
(int)(edit_peaks->energy(offset)*ysize*
|
|
size_y/65534));
|
|
}
|
|
else {
|
|
edit_wave_array->setPoint(i,i,0);
|
|
}
|
|
}
|
|
edit_wave_array->setPoint(xsize-3,xsize-3,0);
|
|
p->drawPolygon(*edit_wave_array);
|
|
|
|
edit_wave_array->setPoint(0,0,0);
|
|
for(int i=1;i<(xsize-3);i++) {
|
|
offset=(unsigned)((double)i*edit_factor_x*
|
|
(double)edit_channels+
|
|
(double)edit_channels*
|
|
(double)origin_x+(double)chan);
|
|
if(offset<edit_peaks->energySize()) {
|
|
edit_wave_array->setPoint(i,i+(int)((double)chan/(2.0*edit_factor_x)),
|
|
(int)(-edit_peaks->energy(offset)*
|
|
ysize*size_y/65534));
|
|
}
|
|
else {
|
|
edit_wave_array->setPoint(i,i,0);
|
|
}
|
|
}
|
|
edit_wave_array->setPoint(xsize-3,xsize-3,0);
|
|
p->drawPolygon(*edit_wave_array);
|
|
|
|
p->setPen(QColor(Qt::red));
|
|
if(!label.isEmpty()) {
|
|
p->setFont(bannerFont());
|
|
p->drawText(10,28-ysize/2,label);
|
|
}
|
|
p->setPen(QColor(Qt::black));
|
|
p->drawLine(0,0,xsize-3,0);
|
|
}
|
|
else {
|
|
p->setFont(bannerFont());
|
|
p->drawText(270,0,"No Energy Data");
|
|
}
|
|
delete p;
|
|
}
|
|
|
|
|
|
void RDEditAudio::DrawPointers()
|
|
{
|
|
edit_arrow_cursor=new QCursor(Qt::ArrowCursor);
|
|
edit_cross_cursor=new QCursor(Qt::CrossCursor);
|
|
}
|
|
|
|
|
|
void RDEditAudio::CenterDisplay()
|
|
{
|
|
edit_hscroll->
|
|
setValue((int)(edit_cursors[RDEditAudio::Play]-EDITAUDIO_WAVEFORM_WIDTH/2*edit_factor_x));
|
|
}
|
|
|
|
|
|
int RDEditAudio::GetTime(int samples)
|
|
{
|
|
if(samples>(int)edit_sample_length) {
|
|
return -1;
|
|
}
|
|
return (int)(1000.0f*(double)samples/(double)edit_sample_rate);
|
|
}
|