本文整理汇总了C++中Pattern::get_notes方法的典型用法代码示例。如果您正苦于以下问题:C++ Pattern::get_notes方法的具体用法?C++ Pattern::get_notes怎么用?C++ Pattern::get_notes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pattern
的用法示例。
在下文中一共展示了Pattern::get_notes方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: functionClearNotes
void InstrumentLine::functionClearNotes()
{
Hydrogen * pEngine = Hydrogen::get_instance();
int selectedPatternNr = pEngine->getSelectedPatternNumber();
Pattern *pPattern = getCurrentPattern();
Instrument *pSelectedInstrument = pEngine->getSong()->get_instrument_list()->get( m_nInstrumentNumber );
std::list< Note* > noteList;
const Pattern::notes_t* notes = pPattern->get_notes();
FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) {
Note *pNote = it->second;
assert( pNote );
if ( pNote->get_instrument() == pSelectedInstrument ) {
noteList.push_back( pNote );
}
}
示例2: save
void SMFWriter::save( const QString& sFilename, Song *pSong )
{
INFOLOG( "save" );
const int DRUM_CHANNEL = 9;
vector<SMFEvent*> eventList;
SMF smf;
// Standard MIDI format 1 files should have the first track being the tempo map
// which is a track that contains global meta events only.
SMFTrack *pTrack0 = new SMFTrack();
pTrack0->addEvent( new SMFCopyRightNoticeMetaEvent( pSong->__author , 0 ) );
pTrack0->addEvent( new SMFTrackNameMetaEvent( pSong->__name , 0 ) );
pTrack0->addEvent( new SMFSetTempoMetaEvent( pSong->__bpm , 0 ) );
pTrack0->addEvent( new SMFTimeSignatureMetaEvent( 4 , 4 , 24 , 8 , 0 ) );
smf.addTrack( pTrack0 );
// Standard MIDI Format 1 files should have note events in tracks =>2
SMFTrack *pTrack1 = new SMFTrack();
smf.addTrack( pTrack1 );
AutomationPath *vp = pSong->get_velocity_automation_path();
InstrumentList *iList = pSong->get_instrument_list();
// ogni pattern sara' una diversa traccia
int nTick = 1;
for ( unsigned nPatternList = 0 ;
nPatternList < pSong->get_pattern_group_vector()->size() ;
nPatternList++ ) {
// infoLog( "[save] pattern list pos: " + toString( nPatternList ) );
PatternList *pPatternList =
( *(pSong->get_pattern_group_vector()) )[ nPatternList ];
int nStartTicks = nTick;
int nMaxPatternLength = 0;
for ( unsigned nPattern = 0 ;
nPattern < pPatternList->size() ;
nPattern++ ) {
Pattern *pPattern = pPatternList->get( nPattern );
// infoLog( " |-> pattern: " + pPattern->getName() );
if ( ( int )pPattern->get_length() > nMaxPatternLength ) {
nMaxPatternLength = pPattern->get_length();
}
for ( unsigned nNote = 0; nNote < pPattern->get_length(); nNote++ ) {
const Pattern::notes_t* notes = pPattern->get_notes();
FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) {
Note *pNote = it->second;
if ( pNote ) {
float rnd = (float)rand()/(float)RAND_MAX;
if ( pNote->get_probability() < rnd ) {
continue;
}
float fPos = nPatternList + (float)nNote/(float)nMaxPatternLength;
float velocity_adjustment = vp->get_value(fPos);
int nVelocity =
(int)( 127.0 * pNote->get_velocity() * velocity_adjustment );
int nInstr = iList->index(pNote->get_instrument());
Instrument *pInstr = pNote->get_instrument();
int nPitch = pNote->get_midi_key();
eventList.push_back(
new SMFNoteOnEvent(
nStartTicks + nNote,
DRUM_CHANNEL,
nPitch,
nVelocity
)
);
int nLength = 12;
if ( pNote->get_length() != -1 ) {
nLength = pNote->get_length();
}
eventList.push_back(
new SMFNoteOffEvent(
nStartTicks + nNote + nLength,
DRUM_CHANNEL,
nPitch,
nVelocity
)
);
}
}
}
}
nTick += nMaxPatternLength;
}
示例3: 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
}
}
}
}
}
}
}
示例4: copyInstrumentLineToString
QString LocalFileMng::copyInstrumentLineToString(Song *song, int selectedPattern, int selectedInstrument)
{
Instrument *instr = song->get_instrument_list()->get( selectedInstrument );
assert( instr );
QDomDocument doc;
QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild( header );
QDomNode rootNode = doc.createElement( "instrument_line" );
//LIB_ID just in work to get better usability
//writeXmlString( &rootNode, "LIB_ID", "in_work" );
writeXmlString( rootNode, "author", song->get_author() );
writeXmlString( rootNode, "license", song->get_license() );
QDomNode patternList = doc.createElement( "patternList" );
unsigned nPatterns = song->get_pattern_list()->size();
for ( unsigned i = 0; i < nPatterns; i++ )
{
if ((selectedPattern >= 0) && (selectedPattern != i))
continue;
// Export pattern
Pattern *pat = song->get_pattern_list()->get( i );
QDomNode patternNode = doc.createElement( "pattern" );
writeXmlString( patternNode, "pattern_name", pat->get_name() );
QString category;
if ( pat->get_category().isEmpty() )
category = "No category";
else
category = pat->get_category();
writeXmlString( patternNode, "info", pat->get_info() );
writeXmlString( patternNode, "category", category );
writeXmlString( patternNode, "size", QString("%1").arg( pat->get_length() ) );
QDomNode noteListNode = doc.createElement( "noteList" );
const Pattern::notes_t* notes = pat->get_notes();
FOREACH_NOTE_CST_IT_BEGIN_END(notes,it)
{
Note *pNote = it->second;
assert( pNote );
// Export only specified instrument
if (pNote->get_instrument() == instr)
{
QDomNode noteNode = doc.createElement( "note" );
writeXmlString( noteNode, "position", QString("%1").arg( pNote->get_position() ) );
writeXmlString( noteNode, "leadlag", QString("%1").arg( pNote->get_lead_lag() ) );
writeXmlString( noteNode, "velocity", QString("%1").arg( pNote->get_velocity() ) );
writeXmlString( noteNode, "pan_L", QString("%1").arg( pNote->get_pan_l() ) );
writeXmlString( noteNode, "pan_R", QString("%1").arg( pNote->get_pan_r() ) );
writeXmlString( noteNode, "pitch", QString("%1").arg( pNote->get_pitch() ) );
writeXmlString( noteNode, "key", pNote->key_to_string() );
writeXmlString( noteNode, "length", QString("%1").arg( pNote->get_length() ) );
noteListNode.appendChild( noteNode );
}
}
patternNode.appendChild( noteListNode );
patternList.appendChild( patternNode );
}
示例5: writeSong
// Returns 0 on success, passes the TinyXml error code otherwise.
int SongWriter::writeSong( Song *song, const QString& filename )
{
INFOLOG( "Saving song " + filename );
int rv = 0; // return value
// FIXME: has the file write-permssion?
// FIXME: verificare che il file non sia gia' esistente
// FIXME: effettuare copia di backup per il file gia' esistente
QDomDocument doc;
QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild( header );
QDomNode songNode = doc.createElement( "song" );
LocalFileMng::writeXmlString( songNode, "version", QString( get_version().c_str() ) );
LocalFileMng::writeXmlString( songNode, "bpm", QString("%1").arg( song->__bpm ) );
LocalFileMng::writeXmlString( songNode, "volume", QString("%1").arg( song->get_volume() ) );
LocalFileMng::writeXmlString( songNode, "metronomeVolume", QString("%1").arg( song->get_metronome_volume() ) );
LocalFileMng::writeXmlString( songNode, "name", song->__name );
LocalFileMng::writeXmlString( songNode, "author", song->__author );
LocalFileMng::writeXmlString( songNode, "notes", song->get_notes() );
LocalFileMng::writeXmlString( songNode, "license", song->get_license() );
LocalFileMng::writeXmlBool( songNode, "loopEnabled", song->is_loop_enabled() );
LocalFileMng::writeXmlBool( songNode, "patternModeMode", Preferences::get_instance()->patternModePlaysSelected());
LocalFileMng::writeXmlString( songNode, "playbackTrackFilename", QString("%1").arg( song->get_playback_track_filename() ) );
LocalFileMng::writeXmlBool( songNode, "playbackTrackEnabled", song->get_playback_track_enabled() );
LocalFileMng::writeXmlString( songNode, "playbackTrackVolume", QString("%1").arg( song->get_playback_track_volume() ) );
if ( song->get_mode() == Song::SONG_MODE ) {
LocalFileMng::writeXmlString( songNode, "mode", QString( "song" ) );
} else {
LocalFileMng::writeXmlString( songNode, "mode", QString( "pattern" ) );
}
LocalFileMng::writeXmlString( songNode, "humanize_time", QString("%1").arg( song->get_humanize_time_value() ) );
LocalFileMng::writeXmlString( songNode, "humanize_velocity", QString("%1").arg( song->get_humanize_velocity_value() ) );
LocalFileMng::writeXmlString( songNode, "swing_factor", QString("%1").arg( song->get_swing_factor() ) );
// component List
QDomNode componentListNode = doc.createElement( "componentList" );
for (std::vector<DrumkitComponent*>::iterator it = song->get_components()->begin() ; it != song->get_components()->end(); ++it) {
DrumkitComponent* pCompo = *it;
QDomNode componentNode = doc.createElement( "drumkitComponent" );
LocalFileMng::writeXmlString( componentNode, "id", QString("%1").arg( pCompo->get_id() ) );
LocalFileMng::writeXmlString( componentNode, "name", pCompo->get_name() );
LocalFileMng::writeXmlString( componentNode, "volume", QString("%1").arg( pCompo->get_volume() ) );
componentListNode.appendChild( componentNode );
}
songNode.appendChild( componentListNode );
// instrument list
QDomNode instrumentListNode = doc.createElement( "instrumentList" );
unsigned nInstrument = song->get_instrument_list()->size();
// INSTRUMENT NODE
for ( unsigned i = 0; i < nInstrument; i++ ) {
Instrument *instr = song->get_instrument_list()->get( i );
assert( instr );
QDomNode instrumentNode = doc.createElement( "instrument" );
LocalFileMng::writeXmlString( instrumentNode, "id", QString("%1").arg( instr->get_id() ) );
LocalFileMng::writeXmlString( instrumentNode, "name", instr->get_name() );
LocalFileMng::writeXmlString( instrumentNode, "drumkit", instr->get_drumkit_name() );
LocalFileMng::writeXmlString( instrumentNode, "volume", QString("%1").arg( instr->get_volume() ) );
LocalFileMng::writeXmlBool( instrumentNode, "isMuted", instr->is_muted() );
LocalFileMng::writeXmlString( instrumentNode, "pan_L", QString("%1").arg( instr->get_pan_l() ) );
LocalFileMng::writeXmlString( instrumentNode, "pan_R", QString("%1").arg( instr->get_pan_r() ) );
LocalFileMng::writeXmlString( instrumentNode, "gain", QString("%1").arg( instr->get_gain() ) );
LocalFileMng::writeXmlBool( instrumentNode, "applyVelocity", instr->get_apply_velocity() );
LocalFileMng::writeXmlBool( instrumentNode, "filterActive", instr->is_filter_active() );
LocalFileMng::writeXmlString( instrumentNode, "filterCutoff", QString("%1").arg( instr->get_filter_cutoff() ) );
LocalFileMng::writeXmlString( instrumentNode, "filterResonance", QString("%1").arg( instr->get_filter_resonance() ) );
LocalFileMng::writeXmlString( instrumentNode, "FX1Level", QString("%1").arg( instr->get_fx_level( 0 ) ) );
LocalFileMng::writeXmlString( instrumentNode, "FX2Level", QString("%1").arg( instr->get_fx_level( 1 ) ) );
LocalFileMng::writeXmlString( instrumentNode, "FX3Level", QString("%1").arg( instr->get_fx_level( 2 ) ) );
LocalFileMng::writeXmlString( instrumentNode, "FX4Level", QString("%1").arg( instr->get_fx_level( 3 ) ) );
assert( instr->get_adsr() );
LocalFileMng::writeXmlString( instrumentNode, "Attack", QString("%1").arg( instr->get_adsr()->get_attack() ) );
LocalFileMng::writeXmlString( instrumentNode, "Decay", QString("%1").arg( instr->get_adsr()->get_decay() ) );
LocalFileMng::writeXmlString( instrumentNode, "Sustain", QString("%1").arg( instr->get_adsr()->get_sustain() ) );
LocalFileMng::writeXmlString( instrumentNode, "Release", QString("%1").arg( instr->get_adsr()->get_release() ) );
LocalFileMng::writeXmlString( instrumentNode, "randomPitchFactor", QString("%1").arg( instr->get_random_pitch_factor() ) );
LocalFileMng::writeXmlString( instrumentNode, "muteGroup", QString("%1").arg( instr->get_mute_group() ) );
LocalFileMng::writeXmlBool( instrumentNode, "isStopNote", instr->is_stop_notes() );
switch ( instr->sample_selection_alg() ) {
case Instrument::VELOCITY:
//.........这里部分代码省略.........
示例6: savePattern
int LocalFileMng::savePattern( Song *song , const QString& drumkit_name, int selectedpattern , const QString& patternname, const QString& realpatternname, int mode)
{
//int mode = 1 save, int mode = 2 save as
// INSTRUMENT NODE
Instrument *instr = song->get_instrument_list()->get( 0 );
assert( instr );
Pattern *pat = song->get_pattern_list()->get( selectedpattern );
QString sPatternDir = Preferences::get_instance()->getDataDirectory() + "patterns/" + drumkit_name;
INFOLOG( "[savePattern]" + sPatternDir );
// check if the directory exists
QDir dir( sPatternDir );
QDir dirPattern( sPatternDir );
if ( !dir.exists() ) {
dir.mkdir( sPatternDir );// create the drumkit directory
}
QString sPatternXmlFilename;
// create the drumkit.xml file
switch ( mode ){
case 1: //save
sPatternXmlFilename = sPatternDir + "/" + QString( patternname + QString( ".h2pattern" ));
break;
case 2: //save as
sPatternXmlFilename = patternname;
break;
case 3: //"save" but overwrite a existing pattern. mode 3 disable the last file exist check
sPatternXmlFilename = sPatternDir + "/" + QString( patternname + QString( ".h2pattern" ));
break;
case 4: //tmp pattern needed by undo/redo
sPatternXmlFilename = patternname;
default:
WARNINGLOG( "Pattern Save unknown status");
break;
}
//test if the file exists
QFile testfile( sPatternXmlFilename );
if ( testfile.exists() && mode == 1)
return 1;
QDomDocument doc;
QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild( header );
QDomNode rootNode = doc.createElement( "drumkit_pattern" );
//LIB_ID just in work to get better usability
//writeXmlString( &rootNode, "LIB_ID", "in_work" );
writeXmlString( rootNode, "pattern_for_drumkit", drumkit_name );
writeXmlString( rootNode, "author", song->get_author() );
writeXmlString( rootNode, "license", song->get_license() );
// pattern
QDomNode patternNode = doc.createElement( "pattern" );
writeXmlString( patternNode, "pattern_name", realpatternname );
QString category;
if ( pat->get_category().isEmpty() )
category = "No category";
else
category = pat->get_category();
writeXmlString( patternNode, "info", pat->get_info() );
writeXmlString( patternNode, "category", category );
writeXmlString( patternNode, "size", QString("%1").arg( pat->get_length() ) );
QDomNode noteListNode = doc.createElement( "noteList" );
const Pattern::notes_t* notes = pat->get_notes();
FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) {
Note *pNote = it->second;
assert( pNote );
QDomNode noteNode = doc.createElement( "note" );
writeXmlString( noteNode, "position", QString("%1").arg( pNote->get_position() ) );
writeXmlString( noteNode, "leadlag", QString("%1").arg( pNote->get_lead_lag() ) );
writeXmlString( noteNode, "velocity", QString("%1").arg( pNote->get_velocity() ) );
writeXmlString( noteNode, "pan_L", QString("%1").arg( pNote->get_pan_l() ) );
writeXmlString( noteNode, "pan_R", QString("%1").arg( pNote->get_pan_r() ) );
writeXmlString( noteNode, "pitch", QString("%1").arg( pNote->get_pitch() ) );
writeXmlString( noteNode, "key", pNote->key_to_string() );
writeXmlString( noteNode, "length", QString("%1").arg( pNote->get_length() ) );
writeXmlString( noteNode, "instrument", QString("%1").arg( pNote->get_instrument()->get_id() ) );
noteListNode.appendChild( noteNode );
}