Ejemplo n.º 1
0
NoteNode::NoteNode(Node * parent, const NoteInfo & info)
    : Node(parent)
    , info_(info)
{
    mutable_type() = NODE_TYPE_NOTE;
    mutable_name() = info.name();
    mutable_display_name() = info.name();
}
Ejemplo n.º 2
0
f32 Envelope::Generate(f32 phase, NoteInfo& note){
	if(!(note.envFlags & (1<<id))) return 0.0;
	 
	phase *= ServerLogic::tempo / 60.0;
	auto position = phase - note.beginTime;

	switch(type){
		case EnvelopeType::None: 
			note.envFlags &= ~(1<<id); 
			return 0.0;

		case EnvelopeType::DC: {
			if(!note.held()) note.envFlags &= ~(1<<id);
			return dc;
		}
		case EnvelopeType::Linear: {
			auto o = 1.0-position/release;
			if(o < 0.0) note.envFlags &= ~(1<<id);

			return std::max(o, 0.0);
		}
		case EnvelopeType::AR: {
			auto o = (position < attack)?(position/attack):(1.0-(position-attack)/release);
			if(o < 0.0) note.envFlags &= ~(1<<id);

			return std::min(o, 1.0);
		}

		case EnvelopeType::ADSR:{
			auto end = note.beginTime + attack + decay;
			if(end < note.endTime) end = note.endTime;
			
			auto rpos = phase - end;

			if(position <= attack){
				return std::min(position/attack, 1.f);

			}else if(position-attack <= decay){
				return std::max(1.0 - (position-attack)/decay *(1.0-sustain), 0.0);

			}else if(note.held() || phase < note.endTime){
				return sustain;

			}else if(rpos < release){
				return std::max((1.0-rpos/release)*sustain, 0.0);
			}

			note.envFlags &= ~(1<<id);
			return 0.0;
		}

		default: throw "Invalid envelope";
	}

	return 0.0; // No envelope
}
Ejemplo n.º 3
0
bool ContentManager::addNoteIndex(const NoteInfo & note)
{
    QString path = getSketchDB(note.name());

    // Ensure note has been created.
    ContentNode info;
    getContentNode(info, path, true);

    return NotesManager::addIndex(*database_, note);
}
Ejemplo n.º 4
0
void UIMain::slotUpdateNoteInfo(NoteInfo note)
{
   if (note.getSymbol()!=err){
      updateDrawArea(note.getSemitone());
      double const f = note.getFrequency();
      QString const freq = QString(" (%1 Hz)")
                     .arg(f == 0 ? "?" : QString::number(f,'f',0));
      ui.labelFreq     ->setText(freq);
      ui.labelNote     ->setText(note.getSymbolString()+" ");
      double const rem = note.getRemainder();
      QString sRem = QString::number(rem,'f',2);
      if (rem>=0) sRem.prepend("+");
      ui.labelRemainder->setText(sRem);
   }else{
      updateDrawArea(-100); // move out of sight
      ui.labelFreq     ->setText(" (? Hz)");
      ui.labelNote     ->setText("?");
      ui.labelRemainder->setText("+0.0");
   }
}