This commit is contained in:
Raine M. Ekman
2014-03-14 20:44:27 +02:00
21 changed files with 293 additions and 254 deletions

View File

@@ -15,7 +15,7 @@ INCLUDE(FindPkgConfig)
SET(VERSION_MAJOR "0")
SET(VERSION_MINOR "9")
SET(VERSION_PATCH "91")
SET(VERSION_PATCH "92")
#SET(VERSION_SUFFIX "")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
IF(VERSION_SUFFIX)

2
README
View File

@@ -1,4 +1,4 @@
LMMS 0.9.91
LMMS 0.9.92
===========
Copyright (c) 2004-2014 by LMMS developers

View File

@@ -24,8 +24,8 @@
*
*/
#ifndef _PIANO_ROLL_H
#define _PIANO_ROLL_H
#ifndef PIANO_ROLL_H
#define PIANO_ROLL_H
#include <QtGui/QWidget>
@@ -147,6 +147,7 @@ protected slots:
signals:
void currentPatternChanged();
void semiToneMarkerMenuScaleSetEnabled(bool);
void semiToneMarkerMenuChordSetEnabled(bool);
@@ -169,7 +170,7 @@ private:
ActionChangeNoteProperty,
ActionResizeNoteEditArea
};
enum noteEditMode
{
NoteEditVolume,
@@ -205,7 +206,7 @@ private:
void autoScroll( const MidiTime & _t );
MidiTime newNoteLen() const;
void shiftPos(int amount);
void shiftSemiTone(int amount);
bool isSelection() const;
@@ -213,19 +214,19 @@ private:
void testPlayNote( note * n );
void testPlayKey( int _key, int _vol, int _pan );
void pauseTestNotes( bool _pause = true );
inline int noteEditTop() const;
inline int keyAreaBottom() const;
inline int noteEditBottom() const;
inline int keyAreaTop() const;
inline int noteEditRight() const;
inline int noteEditLeft() const;
void dragNotes( int x, int y, bool alt, bool shift );
static const int cm_scrollAmtHoriz = 10;
static const int cm_scrollAmtVert = 1;
static QPixmap * s_whiteKeyBigPm;
static QPixmap * s_whiteKeyBigPressedPm;
static QPixmap * s_whiteKeySmallPm;
@@ -252,7 +253,7 @@ private:
toolButton * m_eraseButton;
toolButton * m_selectButton;
toolButton * m_detuneButton;
toolButton * m_cutButton;
toolButton * m_copyButton;
toolButton * m_pasteButton;
@@ -287,22 +288,22 @@ private:
int m_selectedTick;
int m_selectStartKey;
int m_selectedKeys;
// boundary box around all selected notes when dragging
int m_moveBoundaryLeft;
int m_moveBoundaryTop;
int m_moveBoundaryRight;
int m_moveBoundaryBottom;
// remember where the scrolling started when dragging so that
// we can handle dragging while scrolling with arrow keys
int m_mouseDownKey;
int m_mouseDownTick;
// remember the last x and y of a mouse movement
int m_lastMouseX;
int m_lastMouseY;
// x,y of when the user starts a drag
int m_moveStartX;
int m_moveStartY;
@@ -312,7 +313,7 @@ private:
int m_ppt;
int m_totalKeysToScroll;
// remember these values to use them
// remember these values to use them
// for the next note that is set
MidiTime m_lenOfNewNotes;
volume_t m_lastNoteVolume;
@@ -323,7 +324,7 @@ private:
editModes m_editMode;
editModes m_ctrlMode; // mode they were in before they hit ctrl
bool m_mouseDownLeft; //true if left click is being held down
bool m_mouseDownRight; //true if right click is being held down
@@ -337,7 +338,7 @@ private:
note * noteUnderMouse();
// turn a selection rectangle into selected notes
void computeSelectedNotes( bool shift );
void computeSelectedNotes( bool shift );
void clearSelectedNotes();
friend class engine;

View File

@@ -170,12 +170,12 @@ public:
if ( m_exportLoop )
{
return m_exporting == true &&
m_playPos[Mode_PlaySong].getTact() >= length();
m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact();
}
else
{
return m_exporting == true &&
m_playPos[Mode_PlaySong].getTact() >= length() + 1;
m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact();
}
}

View File

@@ -2,7 +2,7 @@ lmmsicon ICON data/lmms.ico
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,9,91,0
FILEVERSION 0,9,92,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP

View File

@@ -52,7 +52,7 @@ Plugin::Descriptor PLUGIN_EXPORT audiofileprocessor_plugin_descriptor =
STRINGIFY( PLUGIN_NAME ),
"AudioFileProcessor",
QT_TRANSLATE_NOOP( "pluginBrowser",
"simple sampler with various settings for "
"Simple sampler with various settings for "
"using samples (e.g. drums) in an "
"instrument-track" ),
"Tobias Doerffel <tobydox/at/users.sf.net>",

View File

@@ -44,7 +44,7 @@ Plugin::Descriptor PLUGIN_EXPORT kicker_plugin_descriptor =
STRINGIFY( PLUGIN_NAME ),
"Kicker",
QT_TRANSLATE_NOOP( "pluginBrowser",
"versatile kick- & bassdrum-synthesizer" ),
"Versatile kick- & bassdrum-synthesizer" ),
"Tobias Doerffel <tobydox/at/users.sf.net>",
0x0100,
Plugin::Instrument,

View File

@@ -43,7 +43,6 @@
#include "embed.cpp"
#include "moc_lb302.cxx"
// Envelope Recalculation period
#define ENVINC 64
@@ -340,7 +339,7 @@ lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) :
vcfs[0] = new lb302Filter3Pole(&fs);
vcfs[1] = new lb302FilterIIR2(&fs);
vcf = vcfs[1];
db24Toggled();
sample_cnt = 0;
release_frame = 1<<24;
@@ -401,6 +400,7 @@ void lb302Synth::loadSettings( const QDomElement & _this )
slideToggle.loadSettings( _this, "slide");
deadToggle.loadSettings( _this, "dead");
db24Toggle.loadSettings( _this, "db24");
db24Toggled();
filterChanged();
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -4,7 +4,7 @@
* please read readme.txt in this directory
*
* Copyright (c) 2014 Wong Cho Ching
*
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
@@ -159,7 +159,7 @@ void SfxrSynth::resetSample( bool restart )
void SfxrSynth::update( sampleFrame * buffer, const fpp_t frameNum )
void SfxrSynth::update( sampleFrame * buffer, const int32_t frameNum )
{
for(int i=0;i<frameNum;i++)
{
@@ -452,7 +452,7 @@ QString sfxrInstrument::nodeName() const
void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer )
{
float currentSampleRate = engine::mixer()->processingSampleRate();
fpp_t frameNum = _n->framesLeftForCurrentPeriod();
if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL )
{
@@ -464,10 +464,13 @@ void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffe
return;
}
fpp_t pitchedFrameNum = (_n->frequency()/BaseFreq)*frameNum;
int32_t pitchedFrameNum = (_n->frequency()/BaseFreq)*frameNum;
pitchedFrameNum /= ( currentSampleRate / 44100 );
// debug code
// qDebug( "pFN %d", pitchedFrameNum );
sampleFrame * pitchedBuffer = new sampleFrame[pitchedFrameNum];
static_cast<SfxrSynth*>(_n->m_pluginData)->update( pitchedBuffer, pitchedFrameNum );
for( fpp_t i=0; i<frameNum; i++ )
@@ -483,7 +486,7 @@ void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffe
applyRelease( _working_buffer, _n );
instrumentTrack()->processAudioBuffer( _working_buffer, frameNum, _n );
}
@@ -622,7 +625,7 @@ sfxrInstrumentView::sfxrInstrumentView( Instrument * _instrument,
m_dSlideKnob ->setObjectName( "freqKnob" );
m_vibDepthKnob ->setObjectName( "freqKnob" );
m_vibSpeedKnob ->setObjectName( "freqKnob" );
createKnob(m_changeAmtKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Amount");
createKnob(m_changeSpeedKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Speed");

View File

@@ -4,7 +4,7 @@
* please read readme.txt in this directory
*
* Copyright (c) 2014 Wong Cho Ching
*
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
*/
#ifndef _SFXR_H
#define _SFXR_H
#ifndef SFXR_H
#define SFXR_H
#include "Instrument.h"
#include "InstrumentView.h"
@@ -74,7 +74,7 @@ public:
virtual ~SfxrSynth();
void resetSample( bool restart );
void update( sampleFrame * buffer, const fpp_t frameNum );
void update( sampleFrame * buffer, const int32_t frameNum );
bool isPlaying() const;

View File

@@ -49,7 +49,7 @@ Plugin::Descriptor PLUGIN_EXPORT tripleoscillator_plugin_descriptor =
STRINGIFY( PLUGIN_NAME ),
"TripleOscillator",
QT_TRANSLATE_NOOP( "pluginBrowser",
"three powerful oscillators you can modulate "
"Three powerful oscillators you can modulate "
"in several ways" ),
"Tobias Doerffel <tobydox/at/users.sf.net>",
0x0110,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -859,13 +859,13 @@ QString SampleBuffer::openAudioFile() const
// set filters
QStringList types;
types << tr( "All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc "
"*.aif *.aiff *.au *.raw *.mp3)" )
"*.aif *.aiff *.au *.raw)" )
<< tr( "Wave-Files (*.wav)" )
<< tr( "OGG-Files (*.ogg)" )
<< tr( "DrumSynth-Files (*.ds)" )
<< tr( "FLAC-Files (*.flac)" )
<< tr( "SPEEX-Files (*.spx)" )
<< tr( "MP3-Files (*.mp3)" )
//<< tr( "MP3-Files (*.mp3)" )
//<< tr( "MIDI-Files (*.mid)" )
<< tr( "VOC-Files (*.voc)" )
<< tr( "AIFF-Files (*.aif *.aiff)" )

View File

@@ -309,6 +309,9 @@ void song::processNextBuffer()
// offset
ticks = ticks % ( max_tact * MidiTime::ticksPerTact() );
// wrap milli second counter
m_elapsedMilliSeconds = ( ticks * 60 * 1000 / 48 ) / getTempo();
m_vstSyncController.setAbsolutePosition( ticks );
}
}
@@ -551,6 +554,12 @@ void song::togglePause()
void song::stop()
{
// do not stop/reset things again if we're stopped already
if( m_playMode == Mode_None )
{
return;
}
timeLine * tl = m_playPos[m_playMode].m_timeLine;
m_playing = false;
m_paused = false;

View File

@@ -1911,6 +1911,8 @@ void AutomationEditor::play()
engine::getSong()->togglePause();
}
}
setPauseIcon( engine::getSong()->isPlaying() );
}

View File

@@ -48,6 +48,8 @@ AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern,
{
connect( m_pat, SIGNAL( dataChanged() ),
this, SLOT( update() ) );
connect( engine::automationEditor(), SIGNAL( currentPatternChanged() ),
this, SLOT( update() ) );
setAttribute( Qt::WA_OpaquePaintEvent, true );
setFixedHeight( parentWidget()->height() - 2 );
@@ -228,11 +230,17 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
lingrad.setColorAt( 0, c );
p.setBrush( lingrad );
p.setPen( c.lighter( 160 ) );
if( engine::automationEditor()->currentPattern() == m_pat )
p.setPen( c.lighter( 160 ) );
else
p.setPen( c.lighter( 130 ) );
p.drawRect( 1, 1, width()-3, height()-3 );
p.setBrush( QBrush() );
p.setPen( c.darker( 300 ) );
if( engine::automationEditor()->currentPattern() == m_pat )
p.setPen( c.lighter( 130 ) );
else
p.setPen( c.darker( 300 ) );
p.drawRect( 0, 0, width()-1, height()-1 );
const float ppt = fixedTCOs() ?
@@ -302,16 +310,15 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
p.resetMatrix();
p.setFont( pointSize<8>( p.font() ) );
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
{
p.setPen( QColor( 50, 50, 50 ) );
}
else
{
p.setPen( QColor( 0, 0, 0 ) );
}
p.drawText( 2, p.fontMetrics().height() - 1, m_pat->name() );
QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
? QColor( 30, 30, 30 )
: QColor( 255, 255, 255 );
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
p.setPen( text_color );
p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
if( m_pat->isMuted() )
{

File diff suppressed because it is too large Load Diff

View File

@@ -380,9 +380,13 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe )
if( m_tco->isRecord() )
{
p.setFont( pointSize<7>( p.font() ) );
p.setPen( QColor( 224, 0, 0 ) );
p.drawText( 9, p.fontMetrics().height() - 1, "Rec" );
p.setBrush( QBrush( QColor( 224, 0, 0 ) ) );
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 10, p.fontMetrics().height()+1, "Rec" );
p.setPen( QColor( 255, 60, 60 ) );
p.drawText( 9, p.fontMetrics().height(), "Rec" );
p.setBrush( QBrush( QColor( 255, 60, 60 ) ) );
p.drawEllipse( 4, 5, 4, 4 );
}
}

View File

@@ -212,9 +212,12 @@ void bbTCOView::paintEvent( QPaintEvent * )
p.drawRect( 0, 0, rect().right(), rect().bottom() );
p.setFont( pointSize<8>( p.font() ) );
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 4, p.fontMetrics().height()+1, m_bbTCO->name() );
p.setPen( QColor( 255, 255, 255 ) );
p.drawText( 3, p.fontMetrics().height(), m_bbTCO->name() );
if( m_bbTCO->isMuted() )
{
p.drawPixmap( 3, p.fontMetrics().height() + 1,

View File

@@ -605,6 +605,9 @@ patternView::patternView( pattern * _pattern, trackView * _parent ) :
m_paintPixmap(),
m_needsUpdate( true )
{
connect( engine::pianoRoll(), SIGNAL( currentPatternChanged() ),
this, SLOT( update() ) );
if( s_stepBtnOn == NULL )
{
s_stepBtnOn = new QPixmap( embed::getIconPixmap(
@@ -931,13 +934,19 @@ void patternView::paintEvent( QPaintEvent * )
}
p.setBrush( lingrad );
p.setPen( c.darker( 300 ) );
if( engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != pattern::BeatPattern )
p.setPen( c.lighter( 130 ) );
else
p.setPen( c.darker( 300 ) );
p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) );
p.setBrush( QBrush() );
if( m_pat->m_patternType != pattern::BeatPattern )
{
p.setPen( c.lighter( 130 ) );
if( engine::pianoRoll()->currentPattern() == m_pat )
p.setPen( c.lighter( 160 ) );
else
p.setPen( c.lighter( 130 ) );
p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) );
}
@@ -961,7 +970,7 @@ void patternView::paintEvent( QPaintEvent * )
}
// melody pattern paint event
if( m_pat->m_patternType == pattern::MelodyPattern )
{
if( m_pat->m_notes.size() > 0 )
@@ -970,12 +979,12 @@ void patternView::paintEvent( QPaintEvent * )
// display the area where most of the m_notes are
// also calculate min/max tones so the tonal range can be
// properly stretched accross the pattern vertically
int central_key = 0;
int max_key = 0;
int min_key = 9999999;
int total_notes = 0;
for( NoteVector::Iterator it = m_pat->m_notes.begin();
it != m_pat->m_notes.end(); ++it )
{
@@ -992,13 +1001,13 @@ void patternView::paintEvent( QPaintEvent * )
{
central_key = central_key / total_notes;
const int keyrange = qMax( qMax( max_key - central_key, central_key - min_key ), 1 );
// debug code
// qDebug( "keyrange: %d", keyrange );
// determine height of the pattern view, sans borders
const int ht = height() - 1 - TCO_BORDER_WIDTH * 2;
// determine maximum height value for drawing bounds checking
const int max_ht = height() - 1 - TCO_BORDER_WIDTH;
@@ -1023,7 +1032,7 @@ void patternView::paintEvent( QPaintEvent * )
( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2;
// multiply that by pattern height
const int y_pos = static_cast<int>( TCO_BORDER_WIDTH + y_key * ht );
// debug code
// if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos );
@@ -1039,7 +1048,7 @@ void patternView::paintEvent( QPaintEvent * )
const int x2 = x_base +
static_cast<int>
( ( ( *it )->pos() + ( *it )->length() ) * ( ppt / MidiTime::ticksPerTact() ) );
// check bounds, draw line
if( x1 < width() - TCO_BORDER_WIDTH )
p.drawLine( x1, y_pos,
@@ -1121,17 +1130,16 @@ void patternView::paintEvent( QPaintEvent * )
}
p.setFont( pointSize<8>( p.font() ) );
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
{
p.setPen( QColor( 30, 30, 30 ) );
}
else
{
p.setPen( QColor( 0, 0, 0 ) );
}
QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
? QColor( 30, 30, 30 )
: QColor( 255, 255, 255 );
if( m_pat->name() != m_pat->instrumentTrack()->name() )
{
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
p.setPen( text_color );
p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
}