traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/traverso/songcanvas/dialogs AudioC...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/traverso/songcanvas/dialogs AudioC...
Date: Mon, 05 Nov 2007 15:50:00 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/05 15:50:00

Added files:
        src/traverso/songcanvas/dialogs: AudioClipEditDialog.cpp 
                                         AudioClipEditDialog.h 

Log message:
        * moved from traverso/dialogs to here

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/dialogs/AudioClipEditDialog.cpp?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/dialogs/AudioClipEditDialog.h?cvsroot=traverso&rev=1.1

Patches:
Index: AudioClipEditDialog.cpp
===================================================================
RCS file: AudioClipEditDialog.cpp
diff -N AudioClipEditDialog.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ AudioClipEditDialog.cpp     5 Nov 2007 15:49:59 -0000       1.1
@@ -0,0 +1,402 @@
+/*
+Copyright (C) 2007 Remon Sijrier 
+
+This file is part of Traverso
+
+Traverso is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+
+*/
+
+
+#include "AudioClipEditDialog.h"
+
+#include "AudioClip.h"
+#include "FadeCurve.h"
+#include "ProjectManager.h"
+#include "Project.h"
+#include "Utils.h"
+#include "Mixer.h"
+#include "Command.h"
+#include "AudioClipExternalProcessing.h"
+#include "InputEngine.h"
+#include "AudioDevice.h"
+
+#define TIME_FORMAT "hh:mm:ss.zzz"
+
+AudioClipEditDialog::AudioClipEditDialog(AudioClip* clip, QWidget* parent) 
+       : QDialog(parent), m_clip(clip)
+{
+       setupUi(this);
+
+       locked = false;
+       
+       // Used for cancelling the changes on Cancel button activated
+       QDomDocument tempDoc;
+       m_origState = clip->get_state(tempDoc);
+       
+       clipStartEdit->setDisplayFormat(TIME_FORMAT);
+       clipLengthEdit->setDisplayFormat(TIME_FORMAT);
+       fadeInEdit->setDisplayFormat(TIME_FORMAT);
+       fadeOutEdit->setDisplayFormat(TIME_FORMAT);
+
+       fadeInModeBox->insertItem(1, "Bended");
+       fadeInModeBox->insertItem(2, "S-Shape");
+       fadeInModeBox->insertItem(3, "Long");
+
+       fadeOutModeBox->insertItem(1, "Bended");
+       fadeOutModeBox->insertItem(2, "S-Shape");
+       fadeOutModeBox->insertItem(3, "Long");
+
+       // Used to set gain and name
+       clip_state_changed();
+       
+       // used for length, track start position
+       clip_position_changed();
+       
+       // detect and set fade params
+       fade_curve_added();
+       
+       connect(clip, SIGNAL(stateChanged()), this, SLOT(clip_state_changed()));
+       connect(clip, SIGNAL(positionChanged(Snappable*)), this, 
SLOT(clip_position_changed()));
+       connect(clip, SIGNAL(fadeAdded(FadeCurve*)), this, 
SLOT(fade_curve_added()));
+       
+       connect(clipGainSpinBox, SIGNAL(valueChanged(double)), this, 
SLOT(gain_spinbox_value_changed(double)));
+       
+       connect(clipStartEdit, SIGNAL(timeChanged(const QTime&)), this, 
SLOT(clip_start_edit_changed(const QTime&)));
+       connect(clipLengthEdit, SIGNAL(timeChanged(const QTime&)), this, 
SLOT(clip_length_edit_changed(const QTime&)));
+       
+       connect(fadeInEdit, SIGNAL(timeChanged(const QTime&)), this, 
SLOT(fadein_edit_changed(const QTime&)));
+       connect(fadeInModeBox, SIGNAL(currentIndexChanged(int)), this, 
SLOT(fadein_mode_edit_changed(int)));
+       connect(fadeInBendingBox, SIGNAL(valueChanged(double)), this, 
SLOT(fadein_bending_edit_changed(double)));
+       connect(fadeInStrengthBox, SIGNAL(valueChanged(double)), this, 
SLOT(fadein_strength_edit_changed(double)));
+       connect(fadeInLinearButton, SIGNAL(clicked()), this, 
SLOT(fadein_linear()));
+       connect(fadeInDefaultButton, SIGNAL(clicked()), this, 
SLOT(fadein_default()));
+
+       connect(fadeOutEdit, SIGNAL(timeChanged(const QTime&)), this, 
SLOT(fadeout_edit_changed(const QTime&)));
+       connect(fadeOutModeBox, SIGNAL(currentIndexChanged(int)), this, 
SLOT(fadeout_mode_edit_changed(int)));
+       connect(fadeOutBendingBox, SIGNAL(valueChanged(double)), this, 
SLOT(fadeout_bending_edit_changed(double)));
+       connect(fadeOutStrengthBox, SIGNAL(valueChanged(double)), this, 
SLOT(fadeout_strength_edit_changed(double)));
+       connect(fadeOutLinearButton, SIGNAL(clicked()), this, 
SLOT(fadeout_linear()));
+       connect(fadeOutDefaultButton, SIGNAL(clicked()), this, 
SLOT(fadeout_default()));
+       
+       connect(externalProcessingButton, SIGNAL(clicked()), this, 
SLOT(external_processing()));
+       connect(buttonBox, SIGNAL(accepted()), this, SLOT(save_changes()));
+       connect(buttonBox, SIGNAL(rejected()), this, SLOT(cancel_changes()));
+}
+
+
+void AudioClipEditDialog::external_processing()
+{
+       Command::process_command(new AudioClipExternalProcessing(m_clip));
+}
+
+void AudioClipEditDialog::clip_state_changed()
+{
+       if (m_clip->get_name() != clipNameLineEdit->text()) {
+               parentWidget()->setWindowTitle(m_clip->get_name());
+               clipNameLineEdit->setText(m_clip->get_name());
+       }
+       
+       clipGainSpinBox->setValue(coefficient_to_dB(m_clip->get_gain()));
+}
+
+void AudioClipEditDialog::save_changes()
+{
+       hide();
+       QString name = clipNameLineEdit->text();
+       if (!name.isEmpty()) {
+               m_clip->set_name(name);
+       } else {
+               clipNameLineEdit->setText(m_clip->get_name());
+       }               
+}
+
+void AudioClipEditDialog::cancel_changes()
+{
+       hide();
+       m_clip->set_state(m_origState);
+}
+
+void AudioClipEditDialog::gain_spinbox_value_changed(double value)
+{
+       float gain = dB_to_scale_factor(value);
+       m_clip->set_gain(gain);
+}
+
+void AudioClipEditDialog::clip_position_changed()
+{
+       if (locked) return;
+
+       QTime clipLengthTime = timeref_to_qtime(m_clip->get_length());
+       clipLengthEdit->setTime(clipLengthTime);
+       
+       QTime clipStartTime = 
timeref_to_qtime(m_clip->get_track_start_location());
+       clipStartEdit->setTime(clipStartTime);
+
+       update_clip_end();
+}
+
+void AudioClipEditDialog::fadein_length_changed()
+{
+       if (ie().is_holding()) return;
+       if (locked) return;
+       
+       TimeRef ref(qint64(m_clip->get_fade_in()->get_range()));
+       QTime fadeTime = timeref_to_qtime(ref);
+       fadeInEdit->setTime(fadeTime);
+}
+
+void AudioClipEditDialog::fadeout_length_changed()
+{
+       if (locked) return;
+
+       TimeRef ref(qint64(m_clip->get_fade_out()->get_range()));
+       QTime fadeTime = timeref_to_qtime(ref);
+       fadeOutEdit->setTime(fadeTime);
+}
+
+void AudioClipEditDialog::fadein_edit_changed(const QTime& time)
+{
+       // Hmm, we can't distinguish between hand editing the time edit
+       // or moving the clip with the mouse! In the latter case this function
+       // causes trouble when moving the right edge with the mouse! 
+       // This 'fixes' it .....
+       if (ie().is_holding()) return;
+
+       locked = true;
+       double range = double(qtime_to_timeref(time).universal_frame());
+       if (range == 0) {
+               m_clip->set_fade_in(1);
+       } else {
+               m_clip->set_fade_in(range);
+       }
+       locked = false;
+}
+
+void AudioClipEditDialog::fadeout_edit_changed(const QTime& time)
+{
+       if (ie().is_holding()) return;
+
+       locked = true;
+       double range = double(qtime_to_timeref(time).universal_frame());
+       if (range == 0) {
+               m_clip->set_fade_out(1);
+       } else {
+               m_clip->set_fade_out(range);
+       }
+       locked = false;
+}
+
+void AudioClipEditDialog::clip_length_edit_changed(const QTime& time)
+{
+       if (ie().is_holding()) return;
+
+       locked = true;
+       
+       TimeRef ref = qtime_to_timeref(time);
+
+       if (ref >= m_clip->get_source_length()) {
+               ref = m_clip->get_source_length();
+               QTime clipLengthTime = timeref_to_qtime(ref);
+               clipLengthEdit->setTime(clipLengthTime);
+       }
+
+       m_clip->set_right_edge(ref + m_clip->get_track_start_location());
+       update_clip_end();
+       locked = false;
+}
+
+void AudioClipEditDialog::clip_start_edit_changed(const QTime& time)
+{
+       if (ie().is_holding()) return;
+
+       locked = true;
+       m_clip->set_track_start_location(qtime_to_timeref(time));
+       update_clip_end();
+       locked = false;
+}
+
+void AudioClipEditDialog::fadein_mode_changed()
+{
+       if (locked) return;
+
+       int m = m_clip->get_fade_in()->get_mode();
+       fadeInModeBox->setCurrentIndex(m);
+}
+
+void AudioClipEditDialog::fadeout_mode_changed()
+{
+       if (locked) return;
+
+       int m = m_clip->get_fade_out()->get_mode();
+       fadeOutModeBox->setCurrentIndex(m);
+}
+
+void AudioClipEditDialog::fadein_bending_changed()
+{
+       if (locked) return;
+       fadeInBendingBox->setValue(m_clip->get_fade_in()->get_bend_factor());
+}
+
+void AudioClipEditDialog::fadeout_bending_changed()
+{
+       if (locked) return;
+       fadeOutBendingBox->setValue(m_clip->get_fade_out()->get_bend_factor());
+}
+
+void AudioClipEditDialog::fadein_strength_changed()
+{
+       if (locked) return;
+       
fadeInStrengthBox->setValue(m_clip->get_fade_in()->get_strength_factor());
+}
+
+void AudioClipEditDialog::fadeout_strength_changed()
+{
+       if (locked) return;
+       
fadeOutStrengthBox->setValue(m_clip->get_fade_out()->get_strength_factor());
+}
+
+void AudioClipEditDialog::fadein_mode_edit_changed(int index)
+{
+       if (!m_clip->get_fade_in()) return;
+       locked = true;
+       m_clip->get_fade_in()->set_mode(index);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadeout_mode_edit_changed(int index)
+{
+       if (!m_clip->get_fade_out()) return;
+       locked = true;
+       m_clip->get_fade_out()->set_mode(index);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadein_bending_edit_changed(double value)
+{
+       if (!m_clip->get_fade_in()) return;
+       locked = true;
+       m_clip->get_fade_in()->set_bend_factor(value);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadeout_bending_edit_changed(double value)
+{
+       if (!m_clip->get_fade_out()) return;
+       locked = true;
+       m_clip->get_fade_out()->set_bend_factor(value);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadein_strength_edit_changed(double value)
+{
+       if (!m_clip->get_fade_in()) return;
+       locked = true;
+       m_clip->get_fade_in()->set_strength_factor(value);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadeout_strength_edit_changed(double value)
+{
+       if (!m_clip->get_fade_out()) return;
+       locked = true;
+       m_clip->get_fade_out()->set_strength_factor(value);
+       locked = false;
+}
+
+void AudioClipEditDialog::fadein_linear()
+{
+       if (!m_clip->get_fade_in()) return;
+       fadeInBendingBox->setValue(0.5);
+       fadeInStrengthBox->setValue(0.5);
+}
+
+void AudioClipEditDialog::fadein_default()
+{
+       if (!m_clip->get_fade_in()) return;
+       fadeInBendingBox->setValue(0.0);
+       fadeInStrengthBox->setValue(0.5);
+}
+
+void AudioClipEditDialog::fadeout_linear()
+{
+       if (!m_clip->get_fade_out()) return;
+       fadeOutBendingBox->setValue(0.5);
+       fadeOutStrengthBox->setValue(0.5);
+}
+
+void AudioClipEditDialog::fadeout_default()
+{
+       if (!m_clip->get_fade_out()) return;
+       fadeOutBendingBox->setValue(0.0);
+       fadeOutStrengthBox->setValue(0.5);
+}
+
+TimeRef AudioClipEditDialog::qtime_to_timeref(const QTime & time)
+{
+       TimeRef ref(time.hour() * ONE_HOUR_UNIVERSAL_SAMPLE_RATE + 
time.minute() * ONE_MINUTE_UNIVERSAL_SAMPLE_RATE + time.second() * 
UNIVERSAL_SAMPLE_RATE + (time.msec() * UNIVERSAL_SAMPLE_RATE) / 1000);
+       return ref;
+}
+
+QTime AudioClipEditDialog::timeref_to_qtime(TimeRef& ref)
+{
+       qint64 remainder;
+       int hours, mins, secs, msec;
+
+       qint64 universalframe = ref.universal_frame();
+       
+       hours = universalframe / (ONE_HOUR_UNIVERSAL_SAMPLE_RATE);
+       remainder = universalframe - (hours * ONE_HOUR_UNIVERSAL_SAMPLE_RATE);
+       mins = remainder / ( ONE_MINUTE_UNIVERSAL_SAMPLE_RATE );
+       remainder = remainder - (mins * ONE_MINUTE_UNIVERSAL_SAMPLE_RATE );
+       secs = remainder / UNIVERSAL_SAMPLE_RATE;
+       remainder -= secs * UNIVERSAL_SAMPLE_RATE;
+       msec = remainder * 1000 / UNIVERSAL_SAMPLE_RATE;
+
+       QTime time(hours, mins, secs, msec);
+       return time;
+}
+
+void AudioClipEditDialog::fade_curve_added()
+{
+       if (m_clip->get_fade_in()) {
+               fadein_length_changed();
+               fadein_mode_changed();
+               fadein_bending_changed();
+               fadein_strength_changed();
+               connect(m_clip->get_fade_in(), SIGNAL(rangeChanged()), this, 
SLOT(fadein_length_changed()));
+               connect(m_clip->get_fade_in(), SIGNAL(modeChanged()), this, 
SLOT(fadein_mode_changed()));
+               connect(m_clip->get_fade_in(), SIGNAL(bendValueChanged()), 
this, SLOT(fadein_bending_changed()));
+               connect(m_clip->get_fade_in(), SIGNAL(strengthValueChanged()), 
this, SLOT(fadein_strength_changed()));
+       }
+       if (m_clip->get_fade_out()) {
+               fadeout_length_changed();
+               fadeout_mode_changed();
+               fadeout_bending_changed();
+               fadeout_strength_changed();
+               connect(m_clip->get_fade_out(), SIGNAL(rangeChanged()), this, 
SLOT(fadeout_length_changed()));
+               connect(m_clip->get_fade_out(), SIGNAL(modeChanged()), this, 
SLOT(fadeout_mode_changed()));
+               connect(m_clip->get_fade_out(), SIGNAL(bendValueChanged()), 
this, SLOT(fadeout_bending_changed()));
+               connect(m_clip->get_fade_out(), SIGNAL(strengthValueChanged()), 
this, SLOT(fadeout_strength_changed()));
+       }
+}
+
+void AudioClipEditDialog::update_clip_end()
+{
+       TimeRef clipEndLocation = m_clip->get_track_start_location() + 
m_clip->get_length();
+       QTime clipEndTime = timeref_to_qtime(clipEndLocation);
+       clipEndLineEdit->setText(clipEndTime.toString(TIME_FORMAT));
+}
+

Index: AudioClipEditDialog.h
===================================================================
RCS file: AudioClipEditDialog.h
diff -N AudioClipEditDialog.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ AudioClipEditDialog.h       5 Nov 2007 15:49:59 -0000       1.1
@@ -0,0 +1,88 @@
+/*
+Copyright (C) 2007 Remon Sijrier 
+
+This file is part of Traverso
+
+Traverso is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+
+*/
+
+#ifndef AUDIOCLIP_EDIT_DIALOG_H
+#define AUDIOCLIP_EDIT_DIALOG_H
+
+#include "ui_AudioClipEditDialog.h"
+
+#include <QDomDocument>
+#include <QDomElement>
+#include <QDialog>
+
+#include "defines.h"
+
+class AudioClip;
+
+class AudioClipEditDialog : public QDialog, protected Ui::AudioClipEditDialog
+{
+       Q_OBJECT
+
+public:
+       AudioClipEditDialog(AudioClip* clip, QWidget* parent);
+       ~AudioClipEditDialog() {}
+
+private:
+       AudioClip* m_clip;
+       QDomNode m_origState;
+
+       TimeRef qtime_to_timeref(const QTime& time);
+       QTime timeref_to_qtime(TimeRef& ref);
+       bool locked;
+
+private slots:
+       void external_processing();
+       void clip_state_changed();
+       void save_changes();
+       void cancel_changes();
+       void clip_position_changed();
+       void gain_spinbox_value_changed(double value);
+
+       void fadein_length_changed();
+       void fadein_edit_changed(const QTime& time);
+       void fadein_mode_changed();
+       void fadein_mode_edit_changed(int index);
+       void fadein_bending_changed();
+       void fadein_bending_edit_changed(double value);
+       void fadein_strength_changed();
+       void fadein_strength_edit_changed(double value);
+       void fadein_linear();
+       void fadein_default();
+
+       void fadeout_edit_changed(const QTime& time);
+       void fadeout_length_changed();
+       void fadeout_mode_changed();
+       void fadeout_mode_edit_changed(int index);
+       void fadeout_bending_changed();
+       void fadeout_bending_edit_changed(double value);
+       void fadeout_strength_changed();
+       void fadeout_strength_edit_changed(double value);
+       void fadeout_linear();
+       void fadeout_default();
+
+       void clip_start_edit_changed(const QTime& time);
+       void clip_length_edit_changed(const QTime& time);
+       void update_clip_end();
+
+       void fade_curve_added();
+};
+
+#endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]