47#define MIXER_STRIP_WIDTH 56
48#define MASTERMIXER_STRIP_WIDTH 126
53 setWindowTitle( tr(
"Mixer" ) );
54 setMaximumHeight( 284 );
55 setMinimumHeight( 284 );
56 setFixedHeight( 284 );
83#ifdef H2CORE_HAVE_LADSPA
90 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
94#ifdef H2CORE_HAVE_LADSPA
95 if ( pEffects !=
nullptr ) {
96 auto pFx = pEffects->getLadspaFX( nFX );
97 if ( pFx !=
nullptr ) {
135#ifndef H2CORE_HAVE_LADSPA
148 QHBoxLayout *pLayout =
new QHBoxLayout();
149 pLayout->setSpacing( 0 );
150 pLayout->setMargin( 0 );
155 this->setLayout( pLayout );
176 pMixerLine->setObjectName(
"MixerLine" );
203 pMixerLine->setObjectName(
"ComponentMixerLine" );
235 pCompo->set_muted( isMuteClicked );
257 pCompo->set_volume( newVolume );
265 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
266 auto pInstrList = pSong->getInstrumentList();
273 for (
int i = 0; i < nInstruments; ++i ) {
275 auto pInstrument = pInstrList->get(i);
276 if ( pInstrument !=
nullptr ) {
291 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
298 if( pMixerLine !=
nullptr ){
309 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
322 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
327 if ( pSelectedInstrument ==
nullptr ) {
328 ERRORLOG(
"No instrument selected" );
332 if ( ! pSelectedInstrument->hasSamples() ) {
333 INFOLOG( QString(
"Instrument [%1] does not contain any samples. No preview available" )
334 .arg( pSelectedInstrument->get_name() ) );
338 Note *pNote =
new Note( pSelectedInstrument, 0, 1.0 );
348 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
353 if ( pSelectedInstrument ==
nullptr ) {
354 ERRORLOG(
"No instrument selected" );
358 Note *pNote =
new Note( pSelectedInstrument, 0, 0.0 );
379 if(it->second == ref) {
410 if ( ! isVisible() ) {
419 std::shared_ptr<Song> pSong = pHydrogen->
getSong();
420 auto pInstrList = pSong->getInstrumentList();
421 auto pDrumkitComponentList = pSong->getComponents();
427 int nInstruments = pInstrList->size();
428 int nCompo = pDrumkitComponentList->size();
431 if ( nInstr >= nInstruments ) {
456 auto pInstr = pInstrList->get( nInstr );
459 float fNewPeak_L = pInstr->get_peak_l();
460 pInstr->set_peak_l( 0.0f );
462 float fNewPeak_R = pInstr->get_peak_r();
463 pInstr->set_peak_r( 0.0f );
465 QString sName = pInstr->get_name();
476 if ( fNewPeak_L >= fOldPeak_L) {
480 pLine->
setPeak_L( fOldPeak_L / fallOff );
482 if ( fNewPeak_R >= fOldPeak_R) {
486 pLine->
setPeak_R( fOldPeak_R / fallOff );
490 float fNewVolume = pInstr->get_volume();
492 if ( fOldVolume != fNewVolume ) {
504 float fPan = pInstr->getPan();
505 if ( fPan != pLine->
getPan() ) {
518 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
519 pLine->
setFXLevel( nFX, pInstr->get_fx_level( nFX ) );
528 for (
auto& pDrumkitComponent : *pDrumkitComponentList) {
543 float fNewPeak_L = pDrumkitComponent->get_peak_l();
544 pDrumkitComponent->set_peak_l( 0.0f );
546 float fNewPeak_R = pDrumkitComponent->get_peak_r();
547 pDrumkitComponent->set_peak_r( 0.0f );
549 bool bMuted = pDrumkitComponent->is_muted();
551 QString sName = pDrumkitComponent->get_name();
561 if ( fNewPeak_L >= fOldPeak_L) {
565 pLine->
setPeak_L( fOldPeak_L / fallOff );
567 if ( fNewPeak_R >= fOldPeak_R) {
571 pLine->
setPeak_R( fOldPeak_R / fallOff );
575 float fNewVolume = pDrumkitComponent->get_volume();
577 if (fOldVolume != fNewVolume) {
591 std::vector<int> IdsToDelete;
594 bool bFoundExistingRelatedComponent =
false;
595 for (
const auto& pComponent : *pDrumkitComponentList ) {
596 if ( pComponent->get_id() == it->first ) {
597 bFoundExistingRelatedComponent =
true;
601 if ( !bFoundExistingRelatedComponent ) {
602 IdsToDelete.push_back( it->first ) ;
606 for (
const int nCompoID : IdsToDelete ) {
631 if (fNewPeak_L >= fOldPeak_L) {
637 if (fNewPeak_R >= fOldPeak_R) {
646 float fNewVolume = pSong->getVolume();
648 if (fOldVolume != fNewVolume) {
654#ifdef H2CORE_HAVE_LADSPA
656 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
660 float fNewPeak_L = 0.0;
661 float fNewPeak_R = 0.0;
663 float fOldPeak_L = 0.0;
664 float fOldPeak_R = 0.0;
667 if (fNewPeak_L < fOldPeak_L) fNewPeak_L = fOldPeak_L / fallOff;
668 if (fNewPeak_R < fOldPeak_R) fNewPeak_R = fOldPeak_R / fallOff;
719 float fPan = ref->
getPan();
735 if ( pSelectedInstrument ==
nullptr ) {
736 ERRORLOG(
"No instrument selected" );
740 pSelectedInstrument->set_fx_level( ref->
getFXLevel(nKnob), nKnob );
742 QString sMessage = tr(
"Set FX %1 level [%2] of instrument" )
745 sMessage.append( QString(
" [%1]" )
747 QString sCaller = QString(
"%1:knobChanged:%2" )
751 showStatusBarMessage( sMessage, sCaller );
765 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
807#ifdef H2CORE_HAVE_LADSPA
810 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
820 QMessageBox::critical(
this,
"Hydrogen", tr(
"LADSPA effects are not available in this version of Hydrogen.") );
828#ifdef H2CORE_HAVE_LADSPA
830 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
838 QMessageBox::critical(
this,
"Hydrogen", tr(
"LADSPA effects are not available in this version of Hydrogen.") );
844#ifdef H2CORE_HAVE_LADSPA
845 for (uint nFX = 0; nFX <
MAX_FX; nFX++) {
848 if ( pFX !=
nullptr ) {
851 QString sMessage = tr(
"Set volume [%1] of FX" )
853 sMessage.append( QString(
" [%1]" ).arg( pFX->
getPluginName() ) );
854 QString sCaller = QString(
"%1:rotaryChanged:%2" )
858 showStatusBarMessage( sMessage, sCaller );
870 ERRORLOG( QString(
"Selected MixerLine [%1] out of bound [0,%2)" )
886 mixerSettingsDialog.exec();
894 setFont( QFont( pPref->getApplicationFontFamily(), 10 ) );
#define MIXER_STRIP_WIDTH
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()
void setPeaks(float fPeak_L, float fPeak_R)
void setVolume(float value)
void setName(QString name)
void setFxBypassed(bool active)
void getPeaks(float *fPeak_L, float *fPeak_R)
void setVolume(float value)
void setPeak_R(float peak)
void setPeak_L(float peak)
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)
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.