50 setWindowTitle( tr(
"Mixer" ) );
53 const int nFXFrameWidth = 213;
56 setMinimumSize( nMinimumFaderPanelWidth +
68 m_pFaderPanel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
69 m_pFaderPanel->setMinimumSize( nMinimumFaderPanelWidth, nFixedHeight );
87#ifdef H2CORE_HAVE_LADSPA
92 m_pFXFrame->setFixedSize( nFXFrameWidth, nFixedHeight );
93 m_pFXFrame->setPixmap(
"/mixerPanel/background_FX.png" );
94 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
98#ifdef H2CORE_HAVE_LADSPA
99 if ( pEffects !=
nullptr ) {
100 auto pFx = pEffects->getLadspaFX( nFX );
101 if ( pFx !=
nullptr ) {
102 m_pLadspaFXLine[nFX]->setFxBypassed( pEffects->getLadspaFX( nFX )->isEnabled() );
138#ifndef H2CORE_HAVE_LADSPA
151 QHBoxLayout *pLayout =
new QHBoxLayout();
152 pLayout->setSpacing( 0 );
153 pLayout->setContentsMargins( 0, 0, 0, 0 );
159 QWidget* pMainWidget =
new QWidget();
160 pMainWidget->setLayout( pLayout );
161 pMainWidget->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
162 pMainWidget->setMinimumSize( nMinimumFaderPanelWidth +
164 pMainWidget->setMaximumSize( 16777215, nFixedHeight );
166 auto pMainScrollArea =
new QScrollArea();
167 pMainScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
168 pMainScrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
169 pMainScrollArea->setWidget( pMainWidget );
170 pMainScrollArea->setWidgetResizable(
true );
172 auto pMainLayout =
new QHBoxLayout();
173 pMainLayout->setSpacing( 0 );
174 pMainLayout->setContentsMargins( 0, 0, 0, 0 );
175 pMainLayout->addWidget( pMainScrollArea );
176 setLayout( pMainLayout );
197 pMixerLine->setObjectName(
"MixerLine" );
224 pMixerLine->setObjectName(
"ComponentMixerLine" );
256 pCompo->set_muted( isMuteClicked );
278 pCompo->set_volume( newVolume );
286 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
287 auto pInstrList = pSong->getInstrumentList();
294 for (
int i = 0; i < nInstruments; ++i ) {
296 auto pInstrument = pInstrList->get(i);
297 if ( pInstrument !=
nullptr ) {
298 m_pMixerLine[i]->setSoloClicked( pInstrument->is_soloed() );
312 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
319 if( pMixerLine !=
nullptr ){
330 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
343 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
348 if ( pSelectedInstrument ==
nullptr ) {
349 ERRORLOG(
"No instrument selected" );
353 if ( ! pSelectedInstrument->hasSamples() ) {
354 INFOLOG( QString(
"Instrument [%1] does not contain any samples. No preview available" )
355 .arg( pSelectedInstrument->get_name() ) );
359 Note *pNote =
new Note( pSelectedInstrument, 0, 1.0 );
369 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
374 if ( pSelectedInstrument ==
nullptr ) {
375 ERRORLOG(
"No instrument selected" );
379 Note *pNote =
new Note( pSelectedInstrument, 0, 0.0 );
400 if(it->second == ref) {
431 if ( ! isVisible() ) {
440 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
441 auto pInstrList = pSong->getInstrumentList();
442 auto pDrumkitComponentList = pSong->getComponents();
448 int nInstruments = pInstrList->size();
449 int nCompo = pDrumkitComponentList->size();
452 if ( nInstr >= nInstruments ) {
477 auto pInstr = pInstrList->get( nInstr );
480 float fNewPeak_L = pInstr->get_peak_l();
481 pInstr->set_peak_l( 0.0f );
483 float fNewPeak_R = pInstr->get_peak_r();
484 pInstr->set_peak_r( 0.0f );
486 QString sName = pInstr->get_name();
497 if ( fNewPeak_L >= fOldPeak_L) {
501 pLine->
setPeak_L( fOldPeak_L / fallOff );
503 if ( fNewPeak_R >= fOldPeak_R) {
507 pLine->
setPeak_R( fOldPeak_R / fallOff );
511 float fNewVolume = pInstr->get_volume();
513 if ( fOldVolume != fNewVolume ) {
525 float fPan = pInstr->getPan();
526 if ( fPan != pLine->
getPan() ) {
539 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
540 pLine->
setFXLevel( nFX, pInstr->get_fx_level( nFX ) );
549 for (
auto& pDrumkitComponent : *pDrumkitComponentList) {
564 float fNewPeak_L = pDrumkitComponent->get_peak_l();
565 pDrumkitComponent->set_peak_l( 0.0f );
567 float fNewPeak_R = pDrumkitComponent->get_peak_r();
568 pDrumkitComponent->set_peak_r( 0.0f );
570 bool bMuted = pDrumkitComponent->is_muted();
572 QString sName = pDrumkitComponent->get_name();
582 if ( fNewPeak_L >= fOldPeak_L) {
586 pLine->
setPeak_L( fOldPeak_L / fallOff );
588 if ( fNewPeak_R >= fOldPeak_R) {
592 pLine->
setPeak_R( fOldPeak_R / fallOff );
596 float fNewVolume = pDrumkitComponent->get_volume();
598 if (fOldVolume != fNewVolume) {
612 std::vector<int> IdsToDelete;
615 bool bFoundExistingRelatedComponent =
false;
616 for (
const auto& pComponent : *pDrumkitComponentList ) {
617 if ( pComponent->get_id() == it->first ) {
618 bFoundExistingRelatedComponent =
true;
622 if ( !bFoundExistingRelatedComponent ) {
623 IdsToDelete.push_back( it->first ) ;
627 for (
const int nCompoID : IdsToDelete ) {
652 if (fNewPeak_L >= fOldPeak_L) {
658 if (fNewPeak_R >= fOldPeak_R) {
667 float fNewVolume = pSong->getVolume();
669 if (fOldVolume != fNewVolume) {
675#ifdef H2CORE_HAVE_LADSPA
677 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
681 float fNewPeak_L = 0.0;
682 float fNewPeak_R = 0.0;
684 float fOldPeak_L = 0.0;
685 float fOldPeak_R = 0.0;
688 if (fNewPeak_L < fOldPeak_L) fNewPeak_L = fOldPeak_L / fallOff;
689 if (fNewPeak_R < fOldPeak_R) fNewPeak_R = fOldPeak_R / fallOff;
740 float fPan = ref->
getPan();
756 if ( pSelectedInstrument ==
nullptr ) {
757 ERRORLOG(
"No instrument selected" );
761 pSelectedInstrument->set_fx_level( ref->
getFXLevel(nKnob), nKnob );
763 QString sMessage = tr(
"Set FX %1 level [%2] of instrument" )
766 sMessage.append( QString(
" [%1]" )
768 QString sCaller = QString(
"%1:knobChanged:%2" )
772 showStatusBarMessage( sMessage, sCaller );
786 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
828#ifdef H2CORE_HAVE_LADSPA
831 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
841 QMessageBox::critical(
this,
"Hydrogen", tr(
"LADSPA effects are not available in this version of Hydrogen.") );
849#ifdef H2CORE_HAVE_LADSPA
851 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
859 QMessageBox::critical(
this,
"Hydrogen", tr(
"LADSPA effects are not available in this version of Hydrogen.") );
865#ifdef H2CORE_HAVE_LADSPA
866 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
869 if ( pFX !=
nullptr ) {
872 QString sMessage = tr(
"Set volume [%1] of FX" )
874 sMessage.append( QString(
" [%1]" ).arg( pFX->
getPluginName() ) );
875 QString sCaller = QString(
"%1:rotaryChanged:%2" )
879 showStatusBarMessage( sMessage, sCaller );
891 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
907 mixerSettingsDialog.exec();
915 setFont( QFont( pPref->getApplicationFontFamily(), 10 ) );
void setMuteClicked(bool isClicked)
void setSoloClicked(bool isClicked)
void setVolume(float value)
void setName(QString name)
void setPeak_R(float peak)
void setPeak_L(float peak)
The audio engine deals with two distinct TransportPosition.
float getMasterPeak_L() const
void setMasterPeak_R(float value)
float getMasterPeak_R() const
Sampler * getSampler() const
void setMasterPeak_L(float value)
virtual const char * class_name() const
bool setStripVolume(int nStrip, float fVolumeValue, bool bSelectStrip)
bool setStripPanSym(int nStrip, float fValue, bool bSelectStrip)
bool setStripIsMuted(int nStrip, bool isMuted)
bool setMasterVolume(float masterVolumeValue)
bool setStripIsSoloed(int nStrip, bool isSoloed)
static Effects * get_instance()
Returns a pointer to the current Effects singleton stored in __instance.
LadspaFX * getLadspaFX(int nFX) const
std::shared_ptr< Song > getSong() const
Get the current song.
int getSelectedInstrumentNumber() const
void setSelectedInstrumentNumber(int nInstrument, bool bTriggerEvent=true)
static Hydrogen * get_instance()
Returns the current Hydrogen instance __instance.
AudioEngine * getAudioEngine() const
std::shared_ptr< Instrument > getSelectedInstrument() const
void setIsModified(bool bIsModified)
Wrapper around Song::setIsModified() that checks whether a song is set.
CoreActionController * getCoreActionController() const
void setEnabled(bool bEnabled)
const QString & getPluginName() const
void setVolume(float fVolume)
A note plays an associated instrument with a velocity left and right pan.
void set_note_off(bool value)
__note_off setter
Manager for User Preferences File (singleton)
float getMixerFalloffSpeed()
static Preferences * get_instance()
Returns a pointer to the current Preferences singleton stored in __instance.
void setFXTabVisible(bool value)
void setInstrumentPeaks(bool value)
bool showInstrumentPeaks()
Changes
Bitwise or-able options showing which part of the Preferences were altered using the PreferencesDialo...
@ Font
Either the font size or font family have changed.
void noteOff(Note *pNote)
Stop playing a note.
void noteOn(Note *pNote)
Start playing a note.
void addEventListener(EventListener *pListener)
static HydrogenApp * get_instance()
Returns the instance of HydrogenApp class.
void showMixer(bool bShow)
void preferencesChanged(H2Core::Preferences::Changes changes)
Propagates a change in the Preferences through the GUI.
static InstrumentEditorPanel * get_instance()
static constexpr int nWidth
static constexpr int nHeight
void setMuteClicked(bool isClicked)
void setSelected(bool bIsSelected)
void setSoloClicked(bool isClicked)
void setPlayClicked(bool clicked)
void setFXLevel(uint nFX, float fValue)
void setVolume(float value)
void setName(QString name)
float getFXLevel(uint nFX)
void setPeak_R(float peak)
static constexpr int nWidth
void setActivity(uint value)
void setPeak_L(float peak)
void hideEvent(QHideEvent *ev) override
hide event
void openMixerSettingsDialog()
QScrollArea * m_pFaderScrollArea
PixmapWidget * m_pFXFrame
void masterVolumeChanged(MasterMixerLine *)
uint findCompoMixerLineByRef(ComponentMixerLine *ref)
LadspaFXMixerLine * m_pLadspaFXLine[MAX_FX]
void panChanged(MixerLine *ref)
void noteOffClicked(MixerLine *ref)
Play sample button, right-clicked (note off)
void noteOnClicked(MixerLine *ref)
void resizeEvent(QResizeEvent *ev) override
MixerLine * m_pMixerLine[MAX_INSTRUMENTS]
void onPreferencesChanged(H2Core::Preferences::Changes changes)
void muteClicked(MixerLine *ref)
void showPeaksBtnClicked()
Button * m_pOpenMixerSettingsBtn
void closeEvent(QCloseEvent *event) override
void getPeaksInMixerLine(uint nMixerLine, float &fPeak_L, float &fPeak_R)
virtual void noteOnEvent(int nInstrument) override
bool isSoloClicked(uint nLine)
void ladspaEditBtnClicked(LadspaFXMixerLine *ref)
void showEvent(QShowEvent *ev) override
show event
Button * m_pShowFXPanelBtn
MasterMixerLine * m_pMasterLine
std::map< int, ComponentMixerLine * > m_pComponentMixerLine
MixerLine * createMixerLine(int)
void showFXPanelClicked()
void nameSelected(MixerLine *ref)
void knobChanged(MixerLine *ref, int nKnob)
void ladspaBypassBtnClicked(LadspaFXMixerLine *ref)
void nameClicked(MixerLine *ref)
uint findMixerLineByRef(MixerLine *ref)
void soloClicked(uint nLine)
used in PatternEditorInstrumentList
void ladspaVolumeChanged(LadspaFXMixerLine *ref)
void volumeChanged(MixerLine *ref)
QHBoxLayout * m_pFaderHBox
ComponentMixerLine * createComponentMixerLine(int)
#define MAX_INSTRUMENTS
Maximum number of instruments allowed in Hydrogen.
#define MAX_FX
Maximum number of effects.