Merge branch 'stable-1.2'
# Conflicts: # cmake/modules/MinGWCrossCompile.cmake # plugins/FreeBoy/FreeBoy.cpp
This commit is contained in:
@@ -158,6 +158,9 @@ GroupBox {
|
||||
VisualizationWidget {
|
||||
background: none;
|
||||
border: none;
|
||||
qproperty-normalColor: rgb(71, 253, 133);
|
||||
qproperty-warningColor: rgb(255, 192, 64);
|
||||
qproperty-clippingColor: rgb(255, 64, 64);
|
||||
}
|
||||
|
||||
/* main toolbar cpu load widget - this can have transparent bg now */
|
||||
|
||||
@@ -177,6 +177,9 @@ GroupBox {
|
||||
VisualizationWidget {
|
||||
background: none;
|
||||
border: none;
|
||||
qproperty-normalColor: rgb(71, 253, 133);
|
||||
qproperty-warningColor: rgb(255, 192, 64);
|
||||
qproperty-clippingColor: rgb(255, 64, 64);
|
||||
}
|
||||
|
||||
/* main toolbar cpu load widget - this can have transparent bg now */
|
||||
|
||||
@@ -36,6 +36,9 @@ class VisualizationWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Q_PROPERTY( QColor normalColor READ normalColor WRITE setNormalColor )
|
||||
Q_PROPERTY( QColor warningColor READ warningColor WRITE setWarningColor )
|
||||
Q_PROPERTY( QColor clippingColor READ clippingColor WRITE setClippingColor )
|
||||
enum visualizationTypes
|
||||
{
|
||||
Simple // add more here
|
||||
@@ -47,6 +50,15 @@ public:
|
||||
|
||||
void setActive( bool _active );
|
||||
|
||||
QColor const & normalColor() const;
|
||||
void setNormalColor(QColor const & normalColor);
|
||||
|
||||
QColor const & warningColor() const;
|
||||
void setWarningColor(QColor const & warningColor);
|
||||
|
||||
QColor const & clippingColor() const;
|
||||
void setClippingColor(QColor const & clippingColor);
|
||||
|
||||
|
||||
protected:
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
@@ -56,6 +68,8 @@ protected:
|
||||
protected slots:
|
||||
void updateAudioBuffer( const surroundSampleFrame * buffer );
|
||||
|
||||
private:
|
||||
QColor const & determineLineColor(float level) const;
|
||||
|
||||
private:
|
||||
QPixmap s_background;
|
||||
@@ -64,6 +78,9 @@ private:
|
||||
sampleFrame * m_buffer;
|
||||
bool m_active;
|
||||
|
||||
QColor m_normalColor;
|
||||
QColor m_warningColor;
|
||||
QColor m_clippingColor;
|
||||
} ;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -283,9 +283,6 @@ void FreeBoyInstrument::playNote( NotePlayHandle * _n,
|
||||
data += m_ch4SweepStepLengthModel.value();
|
||||
papu->write_register( fakeClock(), 0xff21, data );
|
||||
|
||||
//channel 4 init
|
||||
papu->write_register( fakeClock(), 0xff23, 128 );
|
||||
|
||||
_n->m_pluginData = papu;
|
||||
}
|
||||
|
||||
@@ -387,6 +384,9 @@ void FreeBoyInstrument::playNote( NotePlayHandle * _n,
|
||||
data = data << 3;
|
||||
data += ropt;
|
||||
papu->write_register( fakeClock(), 0xff22, data );
|
||||
|
||||
//channel 4 init
|
||||
papu->write_register( fakeClock(), 0xff23, 128 );
|
||||
}
|
||||
|
||||
int const buf_size = 2048;
|
||||
|
||||
@@ -235,13 +235,6 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
|
||||
// decreasing release of an instrument-track while the note is active
|
||||
if( framesLeft() > 0 )
|
||||
{
|
||||
// clear offset frames if we're at the first period
|
||||
// skip for single-streamed instruments, because in their case NPH::play() could be called from an IPH without a buffer argument
|
||||
// ... also, they don't actually render the sound in NPH's, which is an even better reason to skip...
|
||||
if( m_totalFramesPlayed == 0 && ! ( m_instrumentTrack->instrument()->flags() & Instrument::IsSingleStreamed ) )
|
||||
{
|
||||
memset( _working_buffer, 0, sizeof( sampleFrame ) * offset() );
|
||||
}
|
||||
// play note!
|
||||
m_instrumentTrack->playNote( this, _working_buffer );
|
||||
}
|
||||
|
||||
@@ -43,7 +43,10 @@ VisualizationWidget::VisualizationWidget( const QPixmap & _bg, QWidget * _p,
|
||||
QWidget( _p ),
|
||||
s_background( _bg ),
|
||||
m_points( new QPointF[Engine::mixer()->framesPerPeriod()] ),
|
||||
m_active( false )
|
||||
m_active( false ),
|
||||
m_normalColor(71, 253, 133),
|
||||
m_warningColor(255, 192, 64),
|
||||
m_clippingColor(255, 64, 64)
|
||||
{
|
||||
setFixedSize( s_background.width(), s_background.height() );
|
||||
setAttribute( Qt::WA_OpaquePaintEvent, true );
|
||||
@@ -109,6 +112,35 @@ void VisualizationWidget::setActive( bool _active )
|
||||
}
|
||||
|
||||
|
||||
QColor const & VisualizationWidget::normalColor() const
|
||||
{
|
||||
return m_normalColor;
|
||||
}
|
||||
|
||||
void VisualizationWidget::setNormalColor(QColor const & normalColor)
|
||||
{
|
||||
m_normalColor = normalColor;
|
||||
}
|
||||
|
||||
QColor const & VisualizationWidget::warningColor() const
|
||||
{
|
||||
return m_warningColor;
|
||||
}
|
||||
|
||||
void VisualizationWidget::setWarningColor(QColor const & warningColor)
|
||||
{
|
||||
m_warningColor = warningColor;
|
||||
}
|
||||
|
||||
QColor const & VisualizationWidget::clippingColor() const
|
||||
{
|
||||
return m_clippingColor;
|
||||
}
|
||||
|
||||
void VisualizationWidget::setClippingColor(QColor const & clippingColor)
|
||||
{
|
||||
m_clippingColor = clippingColor;
|
||||
}
|
||||
|
||||
|
||||
void VisualizationWidget::paintEvent( QPaintEvent * )
|
||||
@@ -122,47 +154,32 @@ void VisualizationWidget::paintEvent( QPaintEvent * )
|
||||
Mixer const * mixer = Engine::mixer();
|
||||
|
||||
float master_output = mixer->masterGain();
|
||||
int w = width()-4;
|
||||
const float half_h = -( height() - 6 ) / 3.0 * master_output - 1;
|
||||
int x_base = 2;
|
||||
const float y_base = height()/2 - 0.5f;
|
||||
|
||||
// p.setClipRect( 2, 2, w, height()-4 );
|
||||
|
||||
|
||||
const fpp_t frames = mixer->framesPerPeriod();
|
||||
Mixer::StereoSample peakValues = mixer->getPeakValues(m_buffer, frames);
|
||||
const float max_level = qMax<float>( peakValues.left, peakValues.right );
|
||||
|
||||
// and set color according to that...
|
||||
if( max_level * master_output < 0.9 )
|
||||
{
|
||||
p.setPen( QColor( 71, 253, 133 ) );
|
||||
}
|
||||
else if( max_level * master_output < 1.0 )
|
||||
{
|
||||
p.setPen( QColor( 255, 192, 64 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( 255, 64, 64 ) );
|
||||
}
|
||||
// Set the color of the line according to the maximum level
|
||||
float const maxLevelWithAppliedMasterGain = max_level * master_output;
|
||||
p.setPen(QPen(determineLineColor(maxLevelWithAppliedMasterGain), 0.7));
|
||||
|
||||
p.setPen( QPen( p.pen().color(), 0.7 ) );
|
||||
|
||||
const float xd = (float) w / frames;
|
||||
p.setRenderHint( QPainter::Antialiasing );
|
||||
|
||||
// now draw all that stuff
|
||||
int w = width() - 4;
|
||||
const qreal xd = static_cast<qreal>(w) / frames;
|
||||
const qreal half_h = -( height() - 6 ) / 3.0 * static_cast<qreal>(master_output) - 1;
|
||||
int x_base = 2;
|
||||
const qreal y_base = height() / 2 - 0.5;
|
||||
|
||||
for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch )
|
||||
{
|
||||
for( int frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
sample_t const clippedSample = Mixer::clip(m_buffer[frame][ch]);
|
||||
m_points[frame] = QPointF(
|
||||
x_base + (float) frame * xd,
|
||||
y_base + ( Mixer::clip(
|
||||
m_buffer[frame][ch] ) *
|
||||
half_h ) );
|
||||
x_base + static_cast<qreal>(frame) * xd,
|
||||
y_base + ( static_cast<qreal>(clippedSample) * half_h ) );
|
||||
}
|
||||
p.drawPolyline( m_points, frames );
|
||||
}
|
||||
@@ -187,7 +204,21 @@ void VisualizationWidget::mousePressEvent( QMouseEvent * _me )
|
||||
}
|
||||
|
||||
|
||||
|
||||
QColor const & VisualizationWidget::determineLineColor(float level) const
|
||||
{
|
||||
if( level < 0.9f )
|
||||
{
|
||||
return normalColor();
|
||||
}
|
||||
else if( level < 1.0f )
|
||||
{
|
||||
return warningColor();
|
||||
}
|
||||
else
|
||||
{
|
||||
return clippingColor();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user