本文整理汇总了C++中Hydrogen::getSelectedInstrumentNumber方法的典型用法代码示例。如果您正苦于以下问题:C++ Hydrogen::getSelectedInstrumentNumber方法的具体用法?C++ Hydrogen::getSelectedInstrumentNumber怎么用?C++ Hydrogen::getSelectedInstrumentNumber使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Hydrogen
的用法示例。
在下文中一共展示了Hydrogen::getSelectedInstrumentNumber方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleNoteOffMessage
void MidiInput::handleNoteOffMessage( const MidiMessage& msg )
{
// INFOLOG( "handleNoteOffMessage" );
if ( Preferences::get_instance()->m_bMidiNoteOffIgnore ) {
return;
}
Hydrogen *pEngine = Hydrogen::get_instance();
Song *pSong = pEngine->getSong();
__noteOffTick = pEngine->getTickPosition();
unsigned long notelength = computeDeltaNoteOnOfftime();
int nNote = msg.m_nData1;
//float fVelocity = msg.m_nData2 / 127.0; //we need this in future to controll release velocity
int nInstrument = nNote - 36;
if ( nInstrument < 0 ) {
nInstrument = 0;
}
if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) {
nInstrument = MAX_INSTRUMENTS - 1;
}
Instrument *pInstr = pSong->get_instrument_list()->get( nInstrument );
float fStep = pow( 1.0594630943593, (nNote -36) );
if ( !Preferences::get_instance()->__playselectedinstrument )
fStep = 1;
if ( Preferences::get_instance()->__playselectedinstrument ){
nInstrument = pEngine->getSelectedInstrumentNumber();
pInstr= pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber());
}
bool use_note_off = AudioEngine::get_instance()->get_sampler()->is_instrument_playing( pInstr );
if(use_note_off){
if ( Preferences::get_instance()->__playselectedinstrument ){
AudioEngine::get_instance()->get_sampler()->midi_keyboard_note_off( msg.m_nData1 );
}else
{
if ( pSong->get_instrument_list()->size() < nInstrument +1 )
return;
Note *offnote = new Note( pInstr,
0.0,
0.0,
0.0,
0.0,
-1,
0 );
offnote->set_note_off( true );
AudioEngine::get_instance()->get_sampler()->note_on( offnote );
}
if(Preferences::get_instance()->getRecordEvents())
AudioEngine::get_instance()->get_sampler()->setPlayingNotelength( pInstr, notelength * fStep, __noteOnTick );
}
}
示例2: moveUpBtnClicked
void PatternEditorPanel::moveUpBtnClicked(Button *)
{
Hydrogen *engine = Hydrogen::get_instance();
int nSelectedInstrument = engine->getSelectedInstrumentNumber();
AudioEngine::get_instance()->lock( RIGHT_HERE );
Song *pSong = engine->getSong();
InstrumentList *pInstrumentList = pSong->get_instrument_list();
if ( ( nSelectedInstrument - 1 ) >= 0 ) {
pInstrumentList->swap( nSelectedInstrument -1, nSelectedInstrument );
AudioEngine::get_instance()->unlock();
engine->setSelectedInstrumentNumber( nSelectedInstrument - 1 );
pSong->set_is_modified( true );
}
else {
AudioEngine::get_instance()->unlock();
}
}
示例3: loadLayer
void InstrumentEditor::loadLayer()
{
static QString lastUsedDir = QDir::homePath();
Hydrogen *engine = Hydrogen::get_instance();
AudioFileBrowser *fb = new AudioFileBrowser( NULL );
QStringList filename;
filename << "false" << "false" << "";
if (fb->exec() == QDialog::Accepted) {
filename = fb->selectedFile();
}
delete fb;
if ( filename[2].isEmpty() ) return;
bool fnc = false;
if ( filename[0] == "true" ){
fnc = true;
}
//use auto velocity if we want to work with multiple filenames
if ( filename.size() > 3) filename[1] = "true";
int selectedLayer = m_nSelectedLayer;
int firstSelection = selectedLayer;
if (filename.size() > 2) {
for(int i=2;i < filename.size();++i)
{
selectedLayer = m_nSelectedLayer + i - 2;
if( ( i-2 >= MAX_LAYERS ) || ( selectedLayer + 1 > MAX_LAYERS ) ) break;
Sample *newSample = Sample::load( filename[i] );
H2Core::Instrument *pInstr = NULL;
AudioEngine::get_instance()->lock( RIGHT_HERE );
Song *song = engine->getSong();
InstrumentList *instrList = song->get_instrument_list();
pInstr = instrList->get( engine->getSelectedInstrumentNumber() );
/*
if we're using multiple layers, we start inserting the first layer
at m_nSelectedLayer and the next layer at m_nSelectedLayer+1
*/
H2Core::InstrumentLayer *pLayer = pInstr->get_layer( selectedLayer );
if (pLayer != NULL) {
// delete old sample
Sample *oldSample = pLayer->get_sample();
delete oldSample;
// insert new sample from newInstrument
pLayer->set_sample( newSample );
}
else {
pLayer = new H2Core::InstrumentLayer(newSample);
pInstr->set_layer( pLayer, selectedLayer );
}
if ( fnc ){
QString newFilename = filename[i].section( '/', -1 );
newFilename.replace( "." + newFilename.section( '.', -1 ), "");
m_pInstrument->set_name( newFilename );
}
//set automatic velocity
if ( filename[1] == "true" ){
setAutoVelocity();
}
//pInstr->set_drumkit_name( "" ); // external sample, no drumkit info
AudioEngine::get_instance()->unlock();
}
}
selectedInstrumentChangedEvent(); // update all
selectLayer( firstSelection );
m_pLayerPreview->updateAll();
}
示例4: setPlayingNotelength
void Sampler::setPlayingNotelength( Instrument* instrument, unsigned long ticks, unsigned long noteOnTick )
{
if ( instrument ) { // stop all notes using this instrument
Hydrogen *pEngine = Hydrogen::get_instance();
Song* mSong = pEngine->getSong();
int selectedpattern = pEngine->__get_selected_PatterNumber();
Pattern* currentPattern = NULL;
if ( mSong->get_mode() == Song::PATTERN_MODE ||
( pEngine->getState() != STATE_PLAYING )){
PatternList *pPatternList = mSong->get_pattern_list();
if ( ( selectedpattern != -1 )
&& ( selectedpattern < ( int )pPatternList->size() ) ) {
currentPattern = pPatternList->get( selectedpattern );
}
}else
{
std::vector<PatternList*> *pColumns = mSong->get_pattern_group_vector();
// Pattern *pPattern = NULL;
int pos = pEngine->getPatternPos() +1;
for ( int i = 0; i < pos; ++i ) {
PatternList *pColumn = ( *pColumns )[i];
currentPattern = pColumn->get( 0 );
}
}
if ( currentPattern ) {
int patternsize = currentPattern->get_length();
for ( unsigned nNote = 0; nNote < currentPattern->get_length(); nNote++ ) {
const Pattern::notes_t* notes = currentPattern->get_notes();
FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) {
Note *pNote = it->second;
if ( pNote!=NULL ) {
if( !Preferences::get_instance()->__playselectedinstrument ){
if ( pNote->get_instrument() == instrument
&& pNote->get_position() == noteOnTick ) {
AudioEngine::get_instance()->lock( RIGHT_HERE );
if ( ticks > patternsize )
ticks = patternsize - noteOnTick;
pNote->set_length( ticks );
Hydrogen::get_instance()->getSong()->__is_modified = true;
AudioEngine::get_instance()->unlock(); // unlock the audio engine
}
}else
{
if ( pNote->get_instrument() == pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber())
&& pNote->get_position() == noteOnTick ) {
AudioEngine::get_instance()->lock( RIGHT_HERE );
if ( ticks > patternsize )
ticks = patternsize - noteOnTick;
pNote->set_length( ticks );
Hydrogen::get_instance()->getSong()->__is_modified = true;
AudioEngine::get_instance()->unlock(); // unlock the audio engine
}
}
}
}
}
}
}
示例5: updateMixer
void Mixer::updateMixer()
{
Preferences *pPref = Preferences::get_instance();
bool bShowPeaks = pPref->showInstrumentPeaks();
Hydrogen *pEngine = Hydrogen::get_instance();
Song *pSong = pEngine->getSong();
InstrumentList *pInstrList = pSong->get_instrument_list();
std::vector<DrumkitComponent*>* compoList = pSong->get_components();
uint nSelectedInstr = pEngine->getSelectedInstrumentNumber();
float fallOff = pPref->getMixerFalloffSpeed();
uint nMuteClicked = 0;
int nInstruments = pInstrList->size();
int nCompo = compoList->size();
for ( unsigned nInstr = 0; nInstr < MAX_INSTRUMENTS; ++nInstr ) {
if ( nInstr >= nInstruments ) { // unused instrument! let's hide and destroy the mixerline!
if ( m_pMixerLine[ nInstr ] ) {
delete m_pMixerLine[ nInstr ];
m_pMixerLine[ nInstr ] = NULL;
int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo );
if ( m_pFaderPanel->width() != newWidth ) {
m_pFaderPanel->resize( newWidth, height() );
}
}
continue;
}
else {
if ( m_pMixerLine[ nInstr ] == NULL ) {
// the mixerline doesn't exists..I'll create a new one!
m_pMixerLine[ nInstr ] = createMixerLine( nInstr );
m_pFaderHBox->insertWidget( nInstr, m_pMixerLine[ nInstr ] );
int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo );
if ( m_pFaderPanel->width() != newWidth ) {
m_pFaderPanel->resize( newWidth, height() );
}
}
MixerLine *pLine = m_pMixerLine[ nInstr ];
Instrument *pInstr = pInstrList->get( nInstr );
assert( pInstr );
float fNewPeak_L = pInstr->get_peak_l();
pInstr->set_peak_l( 0.0f ); // reset instrument peak
float fNewPeak_R = pInstr->get_peak_r();
pInstr->set_peak_r( 0.0f ); // reset instrument peak
float fNewVolume = pInstr->get_volume();
bool bMuted = pInstr->is_muted();
QString sName = pInstr->get_name();
float fPan_L = pInstr->get_pan_l();
float fPan_R = pInstr->get_pan_r();
// fader
float fOldPeak_L = pLine->getPeak_L();
float fOldPeak_R = pLine->getPeak_R();
if (!bShowPeaks) {
fNewPeak_L = 0.0f;
fNewPeak_R = 0.0f;
}
if ( fNewPeak_L >= fOldPeak_L) { // LEFT peak
pLine->setPeak_L( fNewPeak_L );
}
else {
pLine->setPeak_L( fOldPeak_L / fallOff );
}
if ( fNewPeak_R >= fOldPeak_R) { // Right peak
pLine->setPeak_R( fNewPeak_R );
}
else {
pLine->setPeak_R( fOldPeak_R / fallOff );
}
// fader position
pLine->setVolume( fNewVolume );
// mute
if ( bMuted ) {
nMuteClicked++;
}
pLine->setMuteClicked( bMuted );
// instr name
pLine->setName( sName );
// pan
float fPanValue = 0.0;
if (fPan_R == 1.0) {
fPanValue = 1.0 - (fPan_L / 2.0);
}
//.........这里部分代码省略.........