Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d88b2959ce | ||
|
|
465ecfba5c | ||
|
|
04c2023b2e | ||
|
|
c3846777e0 | ||
|
|
e3cac734fa | ||
|
|
b31baa69ec | ||
|
|
3aceeca43c | ||
|
|
b0e556781c | ||
|
|
a9cccac236 | ||
|
|
1205a0780d | ||
|
|
0505adfb42 | ||
|
|
4c23cef58f | ||
|
|
d21341e487 | ||
|
|
2b365743d4 | ||
|
|
5415a3e7ee | ||
|
|
5a361f6c08 | ||
|
|
8fc26a4269 | ||
|
|
5d52385fbd | ||
|
|
a417c3b353 | ||
|
|
b468d04a98 | ||
|
|
0396717d3e | ||
|
|
c51fd3eb4b | ||
|
|
485d14ff08 | ||
|
|
8d2958b56f | ||
|
|
685c7b9ef6 | ||
|
|
4d973ffb97 | ||
|
|
a76803759c | ||
|
|
5c8a2f9b9f |
105
ChangeLog
105
ChangeLog
@@ -1,9 +1,114 @@
|
||||
2006-07-27 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* configure.in:
|
||||
made 0.2.1 release
|
||||
|
||||
* include/mixer.h:
|
||||
* include/visualization_widget.h:
|
||||
* src/widgets/visualization_widget.cpp:
|
||||
fixed a bug in connection between mixer and visualization-widget
|
||||
|
||||
2006-07-24 Javier Serrano Polo <jasp00/at/terra/dot/es>
|
||||
|
||||
* src/tracks/instrument_track.cpp:
|
||||
handle notes deleted when keys still pressed
|
||||
|
||||
* include/song_editor.h:
|
||||
* src/core/note.cpp:
|
||||
* src/core/song_editor.cpp:
|
||||
added checks to avoid segfaults when closing the application
|
||||
|
||||
2006-07-23 Javier Serrano Polo <jasp00/at/terra/dot/es>
|
||||
|
||||
* src/core/piano_widget.cpp:
|
||||
initialize m_lastKey, fixes segfault
|
||||
|
||||
* src/core/automation_editor.cpp:
|
||||
* src/core/note_play_handle.cpp:
|
||||
added checks to avoid segfaults when closing the application
|
||||
|
||||
2006-07-22 Javier Serrano Polo <jasp00/at/terra/dot/es>
|
||||
|
||||
* include/automatable_object.h:
|
||||
avoid unnecessary level updates
|
||||
|
||||
* include/track.h:
|
||||
* src/tracks/instrument_track.cpp:
|
||||
trigger automation only when time has changed
|
||||
|
||||
* src/core/track.cpp:
|
||||
- trigger automation only when time has changed
|
||||
- remove references from patterns when closing the application
|
||||
|
||||
* include/automation_pattern.h:
|
||||
added method to avoid segfaults when closing the application
|
||||
|
||||
* src/tracks/automation_pattern.cpp:
|
||||
- added check to avoid segfaults when closing the application
|
||||
- reverted processMidiTime(), that processing is needed
|
||||
|
||||
* src/core/track_container.cpp:
|
||||
* src/lib/journalling_object.cpp:
|
||||
added checks to avoid segfaults when closing the application
|
||||
|
||||
* include/engine.h:
|
||||
* src/core/engine.cpp:
|
||||
- do the clean-up in close()
|
||||
- ensure deleted elements aren't accessed
|
||||
|
||||
* src/core/main_window.cpp:
|
||||
close the engine rather than delete it
|
||||
|
||||
* include/instrument_track.h:
|
||||
allow access to the piano widget
|
||||
|
||||
* include/piano_widget.h:
|
||||
moved key event handlers to public
|
||||
|
||||
* include/piano_roll.h:
|
||||
redirect events to the piano widget
|
||||
|
||||
* src/core/piano_roll.cpp:
|
||||
- changed some accelerators
|
||||
- redirect keyboard events to the piano widget
|
||||
- fixed segfault when pressing Ctrl with no pattern
|
||||
|
||||
* src/core/automation_editor.cpp:
|
||||
changed some accelerators
|
||||
|
||||
* src/core/song_editor.cpp:
|
||||
play the automation track only when playing song
|
||||
|
||||
* include/automation_track.h:
|
||||
removed unused signal section
|
||||
|
||||
* data/locale/ca.ts:
|
||||
updated translation
|
||||
|
||||
2006-07-21 Danny McRae <khjklujn/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* configure.in:
|
||||
- removed -fomit-frame-pointer flag--causes wine to crash on
|
||||
Ubuntu
|
||||
- added check for gcc 4.0 for optimization flags--left it
|
||||
commented out--needs to be tested with 4.1
|
||||
|
||||
2006-07-20 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* src/tracks/automation_pattern.cpp:
|
||||
automationPattern::processMidiTime(): do not start search on time-map if
|
||||
empty - find() on maps is horribly slow and makes LMMS unusable (still
|
||||
have to find a better solution without any find()s at all)
|
||||
|
||||
2006-07-19 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* configure.in:
|
||||
- added optimization-flags
|
||||
- made 0.2.0 release
|
||||
|
||||
* vst_sdk23_headers.diff:
|
||||
- removed as not needed anymore
|
||||
|
||||
2006-07-17 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* data/locale/de.ts:
|
||||
|
||||
@@ -327,7 +327,7 @@ lmms_SOURCES = \
|
||||
|
||||
|
||||
|
||||
EXTRA_DIST = $(lmms_EMBEDDED_RESOURCES) vst_sdk23_headers.diff lmms.1
|
||||
EXTRA_DIST = $(lmms_EMBEDDED_RESOURCES) lmms.1
|
||||
|
||||
|
||||
CLEANFILES = $(lmms_MOC) ./embedded_resources.h
|
||||
|
||||
17
configure.in
17
configure.in
@@ -2,8 +2,8 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(lmms, 0.2.0, tobydox/at/users/dot/sourceforge/dot/net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.2.0)
|
||||
AC_INIT(lmms, 0.2.1, tobydox/at/users/dot/sourceforge/dot/net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.2.1)
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
@@ -14,11 +14,18 @@ AC_PROG_LN_S
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
EXTRAFLAGS="-floop-optimize2 -fomit-frame-pointer -fgcse-sm -fgcse-las"
|
||||
# -fomit-frame-pointer crashes wine on Ubuntu Dapper--Danny 7/21/06
|
||||
#EXTRAFLAGS="-floop-optimize2 -fomit-frame-pointer -fgcse-sm -fgcse-las"
|
||||
EXTRAFLAGS="-floop-optimize2 -fgcse-sm -fgcse-las"
|
||||
|
||||
# Tested with GCC 4.0--needs to be tested with 4.1--Danny 7/21/06
|
||||
if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f1`" = "x4" ; then
|
||||
EXTRAFLAGS="$EXTRAFLAGS -ftree-vectorize -funsafe-loop-optimizations -Wunsafe-loop-optimizations -ftree-loop-linear"
|
||||
EXTRAFLAGS="$EXTRAFLAGS -ftree-vectorize -ftree-loop-linear"
|
||||
if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f2`" != "x0" ; then
|
||||
EXTRAFLAGS="$EXTRAFLAGS -funsafe-loop-optimizations -Wunsafe-loop-optimizations"
|
||||
fi
|
||||
fi
|
||||
|
||||
CFLAGS="$CFLAGS $EXTRAFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $EXTRAFLAGS"
|
||||
|
||||
@@ -432,7 +439,7 @@ AC_SUBST(lmmsdatadir)
|
||||
|
||||
#CFLAGS="$CXXFLAGS -g -O2"
|
||||
#CXXFLAGS="$CXXFLAGS -g -O2"
|
||||
if test $CXX == "g++" ; then
|
||||
if test "x$CXX" == "xg++" ; then
|
||||
CXXFLAGS="$CXXFLAGS -ansi -Wall -fno-exceptions"
|
||||
fi
|
||||
|
||||
|
||||
Binary file not shown.
@@ -677,34 +677,6 @@ http://lmms.sourceforge.net</translation>
|
||||
<source>Click here, if you want to stop playing of current pattern.</source>
|
||||
<translation>Pica aquí si vols aturar la reproducció del patró actual.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Draw mode (D)</source>
|
||||
<translation>Mode dibuixar (D)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Erase mode (E)</source>
|
||||
<translation>Mode esborrar (E)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select mode (S)</source>
|
||||
<translation>Mode seleccionar (S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move selection mode (M)</source>
|
||||
<translation>Mode moure selecció (M)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, erase-mode will be activated. In this mode you can erase single values. You can also press 'E' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, s'activarà el mode esborrar. En aquest mode pots esborrar valors solts. També pots pitjar 'E' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, select-mode will be activated. In this mode you can select values. This is neccessary if you want to cut, copy, paste, delete or move values. You can also press 'S' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar valors. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure valors. També pots pitjar 'S' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press 'M' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure els valors que has seleccionat en el mode seleccionar. També pots pitjar 'M' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cut selected values (Ctrl+X)</source>
|
||||
<translation>Talla els valors seleccionats (Ctrl+X)</translation>
|
||||
@@ -750,8 +722,36 @@ http://lmms.sourceforge.net</translation>
|
||||
<translation>Tots els valors seleccionats s'han copiat al portapapers.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, draw-mode will be activated. In this mode you can add and move single values. This is the default-mode which is used most of the time. You can also press 'D' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir i moure valors solts. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'D' al teclat per a activar aquest mode.</translation>
|
||||
<source>Draw mode (Shift+D)</source>
|
||||
<translation>Mode dibuixar (Maj+D)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Erase mode (Shift+E)</source>
|
||||
<translation>Mode esborrar (Maj+E)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select mode (Shift+S)</source>
|
||||
<translation>Mode seleccionar (Maj+S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move selection mode (Shift+M)</source>
|
||||
<translation>Mode moure selecció (Maj+M)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, draw-mode will be activated. In this mode you can add and move single values. This is the default-mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir i moure valors solts. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'Maj+D' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, s'activarà el mode esborrar. En aquest mode pots esborrar valors solts. També pots pitjar 'Maj+E' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, select-mode will be activated. In this mode you can select values. This is neccessary if you want to cut, copy, paste, delete or move values. You can also press 'Shift+S' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar valors. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure valors. També pots pitjar 'Maj+S' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press 'Shift+M' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure els valors que has seleccionat en el mode seleccionar. També pots pitjar 'Maj+M' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -2076,10 +2076,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
|
||||
</context>
|
||||
<context>
|
||||
<name>pianoRoll</name>
|
||||
<message>
|
||||
<source>If you click here, erase-mode will be activated. In this mode you can erase single notes. You can also press 'E' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, s'activarà el mode esborrar. En aquest mode pots esborrar notas soltes. També pots pitjar 'E' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cut selected notes (Ctrl+X)</source>
|
||||
<translation>Talla les notes seleccionades (Ctrl+X)</translation>
|
||||
@@ -2120,10 +2116,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
|
||||
<source>Click here, if you want to stop playing of current pattern.</source>
|
||||
<translation>Pica aquí si vols aturar la reproducció del patró actual.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, draw-mode will be activated. In this mode you can add, resize and move single notes. This is the default-mode which is used most of the time. You can also press 'D' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir, redimensionar i moure notes soltes. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'D' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Piano-Roll - no pattern</source>
|
||||
<translation>Rotlle de Piano - sense patró</translation>
|
||||
@@ -2132,14 +2124,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
|
||||
<source>Please open a pattern by double-clicking on it!</source>
|
||||
<translation>Per favor, obre un patró picant-lo dos cops!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, select-mode will be activated. In this mode you can select notes. This is neccessary if you want to cut, copy, paste, delete or move notes. You can also press 'S' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar notes. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure notes. També pots pitjar 'S' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, move-mode will be activated. In this mode you can move the notes you selected in select-mode. You can also press 'M' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure les notes que has seleccionat en el mode seleccionar. També pots pitjar 'M' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Piano-Roll - %1</source>
|
||||
<translation>Rotlle de Piano - %1</translation>
|
||||
@@ -2152,22 +2136,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
|
||||
<source>Click here, if you want to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
|
||||
<translation>Pica aquí si vols enregistrar notes des d'un dispositiu MIDI o el piano virtual de prova de la finestra de canal corresponent al patró actual. Mentre s'enregistra, totes les notes que toquis seran escrites en aquest patró i les podràs reproduir i editar després.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Draw mode (D)</source>
|
||||
<translation>Mode dibuixar (D)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Erase mode (E)</source>
|
||||
<translation>Mode esborrar (E)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select mode (S)</source>
|
||||
<translation>Mode seleccionar (S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move selection mode (M)</source>
|
||||
<translation>Mode moure selecció (M)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last note</source>
|
||||
<translation>Darrera nota</translation>
|
||||
@@ -2180,6 +2148,38 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
|
||||
<source>All selected notes were copied to the clipboard.</source>
|
||||
<translation>Totes les notes seleccionades s'han copiat al portapapers.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Draw mode (Shift+D)</source>
|
||||
<translation>Mode dibuixar (Maj+D)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Erase mode (Shift+E)</source>
|
||||
<translation>Mode esborrar (Maj+E)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select mode (Shift+S)</source>
|
||||
<translation>Mode seleccionar (Maj+S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move selection mode (Shift+M)</source>
|
||||
<translation>Mode moure selecció (Maj+M)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, draw-mode will be activated. In this mode you can add, resize and move single notes. This is the default-mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir, redimensionar i moure notes soltes. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'Maj+D' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, erase-mode will be activated. In this mode you can erase single notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, s'activarà el mode esborrar. En aquest mode pots esborrar notas soltes. També pots pitjar 'Maj+E' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, select-mode will be activated. In this mode you can select notes. This is neccessary if you want to cut, copy, paste, delete or move notes. You can also press 'Shift+S' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar notes. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure notes. També pots pitjar 'Maj+S' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If you click here, move-mode will be activated. In this mode you can move the notes you selected in select-mode. You can also press 'Shift+M' on your keyboard to activate this mode.</source>
|
||||
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure les notes que has seleccionat en el mode seleccionar. També pots pitjar 'Maj+M' al teclat per a activar aquest mode.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>pianoWidget</name>
|
||||
|
||||
@@ -460,6 +460,10 @@ private:
|
||||
|
||||
void setLevel( int _level )
|
||||
{
|
||||
if( m_curLevel == _level )
|
||||
{
|
||||
return;
|
||||
}
|
||||
saveJournallingState( FALSE );
|
||||
m_automation_pattern->setUpdateFirst( FALSE );
|
||||
setValue( _level * m_step );
|
||||
|
||||
@@ -99,6 +99,11 @@ public:
|
||||
m_update_first = _update;
|
||||
}
|
||||
|
||||
void forgetTrack()
|
||||
{
|
||||
m_track = NULL;
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
void openInAutomationEditor( void );
|
||||
|
||||
@@ -38,9 +38,6 @@ public:
|
||||
virtual ~automationTrack();
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
|
||||
private:
|
||||
inline QString nodeName( void ) const
|
||||
{
|
||||
|
||||
@@ -103,6 +103,8 @@ public:
|
||||
return( m_automationEditor );
|
||||
}
|
||||
|
||||
void close( void );
|
||||
|
||||
|
||||
private:
|
||||
bool m_hasGUI;
|
||||
|
||||
@@ -166,6 +166,11 @@ public:
|
||||
return( m_tabWidget );
|
||||
}
|
||||
|
||||
pianoWidget * getPianoWidget( void )
|
||||
{
|
||||
return( m_pianoWidget );
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
void surroundAreaPosChanged( const QPoint & _new_p );
|
||||
|
||||
@@ -289,8 +289,7 @@ public slots:
|
||||
|
||||
signals:
|
||||
void sampleRateChanged( void );
|
||||
void nextAudioBuffer( const surroundSampleFrame *,
|
||||
const fpab_t _frames );
|
||||
void nextAudioBuffer( const surroundSampleFrame *, int _frames );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@@ -109,6 +109,7 @@ protected:
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
virtual void resizeEvent( QResizeEvent * _re );
|
||||
virtual void wheelEvent( QWheelEvent * _we );
|
||||
virtual bool x11Event( XEvent * _xe );
|
||||
|
||||
int FASTCALL getKey( int _y );
|
||||
static inline void drawNoteRect( QPainter & _p, Uint16 _x, Uint16 _y,
|
||||
|
||||
@@ -79,6 +79,10 @@ public:
|
||||
virtual void loadSettings( const QDomElement & _this,
|
||||
const QString & _name );
|
||||
|
||||
virtual void keyPressEvent( QKeyEvent * ke );
|
||||
virtual void keyReleaseEvent( QKeyEvent * ke );
|
||||
virtual bool x11Event( XEvent * _xe );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void contextMenuEvent( QContextMenuEvent * _me );
|
||||
@@ -86,10 +90,7 @@ protected:
|
||||
virtual void mousePressEvent( QMouseEvent * me );
|
||||
virtual void mouseReleaseEvent( QMouseEvent * me );
|
||||
virtual void mouseMoveEvent( QMouseEvent * me );
|
||||
virtual void keyPressEvent( QKeyEvent * ke );
|
||||
virtual void keyReleaseEvent( QKeyEvent * ke );
|
||||
virtual void focusOutEvent( QFocusEvent * _fe );
|
||||
virtual bool x11Event( XEvent * _xe );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@@ -296,6 +296,8 @@ private:
|
||||
|
||||
track * m_automation_track;
|
||||
|
||||
bool m_destroyed;
|
||||
|
||||
|
||||
|
||||
enum ACTIONS
|
||||
|
||||
@@ -501,7 +501,7 @@ public:
|
||||
|
||||
|
||||
protected:
|
||||
void sendMidiTime( const midiTime & _time );
|
||||
bool sendMidiTime( const midiTime & _time );
|
||||
QString m_name;
|
||||
|
||||
|
||||
@@ -509,6 +509,7 @@ private:
|
||||
trackContainer * m_trackContainer;
|
||||
trackWidget * m_trackWidget;
|
||||
QPtrList<automationPattern> m_automation_patterns;
|
||||
midiTime m_last_time_sent;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ protected:
|
||||
|
||||
|
||||
protected slots:
|
||||
void setAudioBuffer( const surroundSampleFrame * _ab, const fpab_t _frames );
|
||||
void setAudioBuffer( const surroundSampleFrame * _ab, int _frames );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@@ -201,27 +201,27 @@ automationEditor::automationEditor( engine * _engine ) :
|
||||
|
||||
// init edit-buttons at the top
|
||||
m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ),
|
||||
tr( "Draw mode (D)" ),
|
||||
tr( "Draw mode (Shift+D)" ),
|
||||
this, SLOT( drawButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_drawButton->setCheckable( TRUE );
|
||||
m_drawButton->setChecked( TRUE );
|
||||
|
||||
m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ),
|
||||
tr( "Erase mode (E)" ),
|
||||
tr( "Erase mode (Shift+E)" ),
|
||||
this, SLOT( eraseButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_eraseButton->setCheckable( TRUE );
|
||||
|
||||
m_selectButton = new toolButton( embed::getIconPixmap(
|
||||
"edit_select" ),
|
||||
tr( "Select mode (S)" ),
|
||||
tr( "Select mode (Shift+S)" ),
|
||||
this, SLOT( selectButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_selectButton->setCheckable( TRUE );
|
||||
|
||||
m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ),
|
||||
tr( "Move selection mode (M)" ),
|
||||
tr( "Move selection mode (Shift+M)" ),
|
||||
this, SLOT( moveButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_moveButton->setCheckable( TRUE );
|
||||
@@ -244,8 +244,8 @@ automationEditor::automationEditor( engine * _engine ) :
|
||||
tr( "If you click here, draw-mode will be activated. In this "
|
||||
"mode you can add and move single values. This "
|
||||
"is the default-mode which is used most of the time. "
|
||||
"You can also press 'D' on your keyboard to activate "
|
||||
"this mode." ) );
|
||||
"You can also press 'Shift+D' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_eraseButton->setWhatsThis(
|
||||
#else
|
||||
@@ -253,7 +253,7 @@ automationEditor::automationEditor( engine * _engine ) :
|
||||
#endif
|
||||
tr( "If you click here, erase-mode will be activated. In this "
|
||||
"mode you can erase single values. You can also press "
|
||||
"'E' on your keyboard to activate this mode." ) );
|
||||
"'Shift+E' on your keyboard to activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_selectButton->setWhatsThis(
|
||||
#else
|
||||
@@ -262,8 +262,8 @@ automationEditor::automationEditor( engine * _engine ) :
|
||||
tr( "If you click here, select-mode will be activated. In this "
|
||||
"mode you can select values. This is neccessary "
|
||||
"if you want to cut, copy, paste, delete or move "
|
||||
"values. You can also press 'S' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
"values. You can also press 'Shift+S' on your keyboard "
|
||||
"to activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_moveButton->setWhatsThis(
|
||||
#else
|
||||
@@ -271,8 +271,8 @@ automationEditor::automationEditor( engine * _engine ) :
|
||||
#endif
|
||||
tr( "If you click here, move-mode will be activated. In this "
|
||||
"mode you can move the values you selected in select-"
|
||||
"mode. You can also press 'M' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
"mode. You can also press 'Shift+M' on your keyboard "
|
||||
"to activate this mode." ) );
|
||||
|
||||
m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ),
|
||||
tr( "Cut selected values (Ctrl+X)" ),
|
||||
@@ -848,19 +848,47 @@ void automationEditor::keyPressEvent( QKeyEvent * _ke )
|
||||
break;
|
||||
|
||||
case Qt::Key_D:
|
||||
m_drawButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_drawButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_E:
|
||||
m_eraseButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_eraseButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_S:
|
||||
m_selectButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_selectButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_M:
|
||||
m_moveButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_moveButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_Delete:
|
||||
@@ -1535,8 +1563,12 @@ void automationEditor::resizeEvent( QResizeEvent * )
|
||||
|
||||
m_topBottomScroll->setValue( m_scroll_level );
|
||||
|
||||
eng()->getSongEditor()->getPlayPos( songEditor::PLAY_AUTOMATION_PATTERN
|
||||
if( eng()->getSongEditor() )
|
||||
{
|
||||
eng()->getSongEditor()->getPlayPos(
|
||||
songEditor::PLAY_AUTOMATION_PATTERN
|
||||
).m_timeLine->setFixedWidth( width() );
|
||||
}
|
||||
m_toolBar->setFixedWidth( width() );
|
||||
|
||||
updateTopBottomLevels();
|
||||
|
||||
@@ -67,14 +67,26 @@ engine::engine( const bool _has_gui ) :
|
||||
|
||||
|
||||
engine::~engine()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void engine::close( void )
|
||||
{
|
||||
m_mixer->stopProcessing();
|
||||
|
||||
delete m_projectNotes;
|
||||
m_projectNotes = NULL;
|
||||
delete m_songEditor;
|
||||
m_songEditor = NULL;
|
||||
delete m_bbEditor;
|
||||
m_bbEditor = NULL;
|
||||
delete m_pianoRoll;
|
||||
m_pianoRoll = NULL;
|
||||
delete m_automationEditor;
|
||||
m_automationEditor = NULL;
|
||||
|
||||
presetPreviewPlayHandle::cleanUp( this );
|
||||
|
||||
@@ -83,8 +95,11 @@ engine::~engine()
|
||||
|
||||
|
||||
delete m_mixer;
|
||||
m_mixer = NULL;
|
||||
//delete configManager::inst();
|
||||
|
||||
delete m_projectJournal;
|
||||
m_projectJournal = NULL;
|
||||
m_mainWindow = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ mainWindow::~mainWindow()
|
||||
|
||||
// destroy config-manager (which automatically saves config-file)
|
||||
*/
|
||||
delete eng();
|
||||
eng()->close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -226,7 +226,7 @@ void note::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
_this.setAttribute( "pan", m_panning );
|
||||
_this.setAttribute( "len", m_length );
|
||||
_this.setAttribute( "pos", m_pos );
|
||||
if( m_length > 0 )
|
||||
if( m_length > 0 && m_detuning )
|
||||
{
|
||||
m_detuning->saveSettings( _doc, _this, "detuning" );
|
||||
}
|
||||
|
||||
@@ -274,12 +274,17 @@ void notePlayHandle::noteOff( const f_cnt_t _s )
|
||||
FALSE );
|
||||
}
|
||||
// send MIDI-note-off-event
|
||||
m_instrumentTrack->processOutEvent( midiEvent( NOTE_OFF,
|
||||
// TODO: move framesPerTact() to engine
|
||||
if( m_instrumentTrack->eng()->getSongEditor() )
|
||||
{
|
||||
m_instrumentTrack->processOutEvent( midiEvent( NOTE_OFF,
|
||||
m_instrumentTrack->m_midiPort->outputChannel(),
|
||||
key(), 0 ),
|
||||
midiTime::fromFrames(
|
||||
m_framesBeforeRelease,
|
||||
m_instrumentTrack->eng()->getSongEditor()->framesPerTact() ) );
|
||||
m_instrumentTrack->eng()->getSongEditor()
|
||||
->framesPerTact() ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
#include "tool_button.h"
|
||||
#include "text_float.h"
|
||||
#include "combobox.h"
|
||||
#include "piano_widget.h"
|
||||
|
||||
|
||||
extern tones whiteKeys[]; // defined in piano_widget.cpp
|
||||
@@ -284,27 +285,27 @@ pianoRoll::pianoRoll( engine * _engine ) :
|
||||
|
||||
// init edit-buttons at the top
|
||||
m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ),
|
||||
tr( "Draw mode (D)" ),
|
||||
tr( "Draw mode (Shift+D)" ),
|
||||
this, SLOT( drawButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_drawButton->setCheckable( TRUE );
|
||||
m_drawButton->setChecked( TRUE );
|
||||
|
||||
m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ),
|
||||
tr( "Erase mode (E)" ),
|
||||
tr( "Erase mode (Shift+E)" ),
|
||||
this, SLOT( eraseButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_eraseButton->setCheckable( TRUE );
|
||||
|
||||
m_selectButton = new toolButton( embed::getIconPixmap(
|
||||
"edit_select" ),
|
||||
tr( "Select mode (S)" ),
|
||||
tr( "Select mode (Shift+S)" ),
|
||||
this, SLOT( selectButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_selectButton->setCheckable( TRUE );
|
||||
|
||||
m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ),
|
||||
tr( "Move selection mode (M)" ),
|
||||
tr( "Move selection mode (Shift+M)" ),
|
||||
this, SLOT( moveButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_moveButton->setCheckable( TRUE );
|
||||
@@ -327,8 +328,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
|
||||
tr( "If you click here, draw-mode will be activated. In this "
|
||||
"mode you can add, resize and move single notes. This "
|
||||
"is the default-mode which is used most of the time. "
|
||||
"You can also press 'D' on your keyboard to activate "
|
||||
"this mode." ) );
|
||||
"You can also press 'Shift+D' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_eraseButton->setWhatsThis(
|
||||
#else
|
||||
@@ -336,7 +337,7 @@ pianoRoll::pianoRoll( engine * _engine ) :
|
||||
#endif
|
||||
tr( "If you click here, erase-mode will be activated. In this "
|
||||
"mode you can erase single notes. You can also press "
|
||||
"'E' on your keyboard to activate this mode." ) );
|
||||
"'Shift+E' on your keyboard to activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_selectButton->setWhatsThis(
|
||||
#else
|
||||
@@ -345,8 +346,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
|
||||
tr( "If you click here, select-mode will be activated. "
|
||||
"In this mode you can select notes. This is neccessary "
|
||||
"if you want to cut, copy, paste, delete or move "
|
||||
"notes. You can also press 'S' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
"notes. You can also press 'Shift+S' on your keyboard "
|
||||
"to activate this mode." ) );
|
||||
#ifdef QT4
|
||||
m_moveButton->setWhatsThis(
|
||||
#else
|
||||
@@ -354,8 +355,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
|
||||
#endif
|
||||
tr( "If you click here, move-mode will be activated. In this "
|
||||
"mode you can move the notes you selected in select-"
|
||||
"mode. You can also press 'M' on your keyboard to "
|
||||
"activate this mode." ) );
|
||||
"mode. You can also press 'Shift+M' on your keyboard "
|
||||
"to activate this mode." ) );
|
||||
|
||||
m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ),
|
||||
tr( "Cut selected notes (Ctrl+X)" ),
|
||||
@@ -1020,6 +1021,11 @@ void pianoRoll::enterEvent( QEvent * _e )
|
||||
|
||||
void pianoRoll::keyPressEvent( QKeyEvent * _ke )
|
||||
{
|
||||
if( validPattern() )
|
||||
{
|
||||
m_pattern->getInstrumentTrack()->getPianoWidget()
|
||||
->keyPressEvent( _ke );
|
||||
}
|
||||
switch( _ke->key() )
|
||||
{
|
||||
case Qt::Key_Up:
|
||||
@@ -1096,19 +1102,47 @@ void pianoRoll::keyPressEvent( QKeyEvent * _ke )
|
||||
break;
|
||||
|
||||
case Qt::Key_D:
|
||||
m_drawButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_drawButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_E:
|
||||
m_eraseButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_eraseButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_S:
|
||||
m_selectButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_selectButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_M:
|
||||
m_moveButton->setChecked( TRUE );
|
||||
if( _ke->modifiers() & Qt::ShiftModifier )
|
||||
{
|
||||
m_moveButton->setChecked( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
_ke->ignore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Qt::Key_Delete:
|
||||
@@ -1152,6 +1186,11 @@ void pianoRoll::keyPressEvent( QKeyEvent * _ke )
|
||||
|
||||
void pianoRoll::keyReleaseEvent( QKeyEvent * _ke )
|
||||
{
|
||||
if( validPattern() )
|
||||
{
|
||||
m_pattern->getInstrumentTrack()->getPianoWidget()
|
||||
->keyReleaseEvent( _ke );
|
||||
}
|
||||
switch( _ke->key() )
|
||||
{
|
||||
case Key_Control:
|
||||
@@ -2579,7 +2618,8 @@ midiTime pianoRoll::newNoteLen( void ) const
|
||||
|
||||
bool pianoRoll::mouseOverNote( void )
|
||||
{
|
||||
return( noteIteratorUnderMouse() != m_pattern->notes().end() );
|
||||
return( validPattern()
|
||||
&& noteIteratorUnderMouse() != m_pattern->notes().end() );
|
||||
}
|
||||
|
||||
|
||||
@@ -2634,6 +2674,19 @@ noteVector::iterator pianoRoll::noteIteratorUnderMouse( void )
|
||||
|
||||
|
||||
|
||||
bool pianoRoll::x11Event( XEvent * _xe )
|
||||
{
|
||||
if( validPattern() )
|
||||
{
|
||||
return( m_pattern->getInstrumentTrack()->getPianoWidget()
|
||||
->x11Event( _xe ) );
|
||||
}
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#include "piano_roll.moc"
|
||||
|
||||
|
||||
|
||||
@@ -93,7 +93,8 @@ pianoWidget::pianoWidget( instrumentTrack * _parent ) :
|
||||
QWidget( _parent ),
|
||||
m_instrumentTrack( _parent ),
|
||||
m_startTone( C ),
|
||||
m_startOctave( OCTAVE_3 )
|
||||
m_startOctave( OCTAVE_3 ),
|
||||
m_lastKey( -1 )
|
||||
{
|
||||
#ifdef QT4
|
||||
setFocusPolicy( Qt::StrongFocus );
|
||||
@@ -360,7 +361,10 @@ void pianoWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
m_instrumentTrack->processInEvent(
|
||||
midiEvent( NOTE_OFF, 0, released_key, 0 ),
|
||||
midiTime() );
|
||||
m_pressedKeys[released_key] = FALSE;
|
||||
if( released_key >= 0 )
|
||||
{
|
||||
m_pressedKeys[released_key] = FALSE;
|
||||
}
|
||||
#ifdef QT4
|
||||
if( _me->buttons() & Qt::LeftButton )
|
||||
#else
|
||||
|
||||
@@ -113,7 +113,8 @@ songEditor::songEditor( engine * _engine ) :
|
||||
m_trackToPlay( NULL ),
|
||||
m_patternToPlay( NULL ),
|
||||
m_loopPattern( FALSE ),
|
||||
m_scrollBack( FALSE )
|
||||
m_scrollBack( FALSE ),
|
||||
m_destroyed( FALSE )
|
||||
{
|
||||
setWindowTitle( tr( "Song-Editor" ) );
|
||||
setWindowIcon( embed::getIconPixmap( "songeditor" ) );
|
||||
@@ -446,6 +447,7 @@ songEditor::songEditor( engine * _engine ) :
|
||||
songEditor::~songEditor()
|
||||
{
|
||||
delete m_automation_track;
|
||||
m_destroyed = TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1033,10 +1035,13 @@ void songEditor::processNextBuffer( void )
|
||||
m_playPos[m_playMode].currentFrame();
|
||||
}
|
||||
|
||||
m_automation_track->play( m_playPos[m_playMode],
|
||||
if( m_playMode == PLAY_SONG )
|
||||
{
|
||||
m_automation_track->play( m_playPos[m_playMode],
|
||||
m_playPos[m_playMode].currentFrame(),
|
||||
played_frames, total_frames_played,
|
||||
tco_num );
|
||||
}
|
||||
|
||||
// loop through all tracks and play them if they're not muted
|
||||
for( trackVector::iterator it = tv.begin(); it != tv.end();
|
||||
@@ -1196,6 +1201,10 @@ void songEditor::updateTimeLinePosition( void )
|
||||
|
||||
void songEditor::stop( void )
|
||||
{
|
||||
if( m_destroyed )
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_actions.push_back( ACT_STOP_PLAY );
|
||||
#ifdef QT4
|
||||
m_playButton->setIcon( embed::getIconPixmap( "play" ) );
|
||||
|
||||
@@ -1500,6 +1500,14 @@ track::~track()
|
||||
delete m_trackWidget;
|
||||
m_trackWidget = NULL;
|
||||
}
|
||||
|
||||
QPtrListIterator<automationPattern> it( m_automation_patterns );
|
||||
automationPattern * pattern ;
|
||||
while( ( pattern = it.current() ) )
|
||||
{
|
||||
++it;
|
||||
pattern->forgetTrack();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1757,8 +1765,14 @@ void track::removeAutomationPattern( automationPattern * _pattern )
|
||||
|
||||
|
||||
|
||||
void track::sendMidiTime( const midiTime & _time )
|
||||
bool track::sendMidiTime( const midiTime & _time )
|
||||
{
|
||||
if( m_last_time_sent == _time )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
m_last_time_sent = _time;
|
||||
|
||||
QPtrListIterator<automationPattern> it( m_automation_patterns );
|
||||
automationPattern * pattern ;
|
||||
while( ( pattern = it.current() ) )
|
||||
@@ -1766,6 +1780,7 @@ void track::sendMidiTime( const midiTime & _time )
|
||||
++it;
|
||||
pattern->processMidiTime( _time );
|
||||
}
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -248,7 +248,10 @@ void trackContainer::removeTrack( track * _track )
|
||||
eng()->getMixer()->play();
|
||||
|
||||
realignTracks();
|
||||
eng()->getSongEditor()->setModified();
|
||||
if( eng()->getSongEditor() )
|
||||
{
|
||||
eng()->getSongEditor()->setModified();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ journallingObject::journallingObject( engine * _engine ) :
|
||||
|
||||
journallingObject::~journallingObject()
|
||||
{
|
||||
if( eng() != NULL )
|
||||
if( eng() && eng()->getProjectJournal() )
|
||||
{
|
||||
eng()->getProjectJournal()->freeID( id() );
|
||||
}
|
||||
|
||||
@@ -96,12 +96,11 @@ automationPattern::~automationPattern()
|
||||
m_track->removeAutomationPattern( this );
|
||||
}
|
||||
|
||||
if( eng()->getAutomationEditor()->currentPattern() == this )
|
||||
if( eng()->getAutomationEditor()
|
||||
&& eng()->getAutomationEditor()->currentPattern() == this )
|
||||
{
|
||||
eng()->getAutomationEditor()->setCurrentPattern( NULL );
|
||||
}
|
||||
|
||||
m_time_map.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -749,6 +749,21 @@ void instrumentTrack::deleteNotePluginData( notePlayHandle * _n )
|
||||
{
|
||||
m_instrument->deleteNotePluginData( _n );
|
||||
}
|
||||
|
||||
m_notesMutex.lock();
|
||||
// Notes deleted when keys still pressed
|
||||
if( m_notes[_n->key()] == _n )
|
||||
{
|
||||
note done_note( NULL, midiTime( static_cast<f_cnt_t>(
|
||||
_n->totalFramesPlayed() * 64 /
|
||||
eng()->getSongEditor()->framesPerTact() ) ),
|
||||
0, _n->tone(), _n->octave(),
|
||||
_n->getVolume(), _n->getPanning() );
|
||||
_n->noteOff();
|
||||
m_notes[_n->key()] = NULL;
|
||||
emit noteDone( done_note );
|
||||
}
|
||||
m_notesMutex.unlock();
|
||||
}
|
||||
|
||||
|
||||
@@ -872,8 +887,10 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
|
||||
const f_cnt_t _frame_base,
|
||||
Sint16 _tco_num )
|
||||
{
|
||||
sendMidiTime( _start );
|
||||
emit sentMidiTime( _start );
|
||||
if( sendMidiTime( _start ) )
|
||||
{
|
||||
emit sentMidiTime( _start );
|
||||
}
|
||||
|
||||
// calculate samples per tact; need that later when calculating
|
||||
// sample-pos of a note
|
||||
|
||||
@@ -82,9 +82,9 @@ visualizationWidget::visualizationWidget( const QPixmap & _bg, QWidget * _p,
|
||||
}
|
||||
|
||||
connect( eng()->getMixer(), SIGNAL( nextAudioBuffer(
|
||||
const surroundSampleFrame *, const fpab_t ) ),
|
||||
const surroundSampleFrame *, int ) ),
|
||||
this, SLOT( setAudioBuffer(
|
||||
const surroundSampleFrame *, const fpab_t ) ) );
|
||||
const surroundSampleFrame *, int ) ) );
|
||||
|
||||
toolTip::add( this, tr( "click to enable/disable visualization of "
|
||||
"master-output" ) );
|
||||
@@ -101,7 +101,7 @@ visualizationWidget::~visualizationWidget()
|
||||
|
||||
|
||||
void visualizationWidget::setAudioBuffer( const surroundSampleFrame * _ab,
|
||||
const fpab_t _frames )
|
||||
int _frames )
|
||||
{
|
||||
if( m_enabled == TRUE )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user