X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Faudio-item.hh;h=fd465f9f4cb286e7b177483909fa6a0d1e7ec7a4;hb=8848da24e00c75d7de626b2ecc409fb45e87ce4a;hp=b6b6d33c00bd518f0433fc49b600d70c2c66d978;hpb=0d17e9c759bd61c9b20a7c4d9941a412c2a53f5f;p=lilypond.git diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index b6b6d33c00..9ded5301a1 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -1,88 +1,178 @@ /* - audio-item.hh -- declare Audio_items + This file is part of LilyPond, the GNU music typesetter. - (c) 1996, 1997--1999 Jan Nieuwenhuizen - */ + Copyright (C) 1996--2012 Jan Nieuwenhuizen + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ #ifndef AUDIO_ITEM_HH #define AUDIO_ITEM_HH -#include "lily-proto.hh" -#include "string.hh" #include "audio-element.hh" +#include "moment.hh" +#include "pitch.hh" -/** - Any piece of audio information. - We need virtual constructors, - let's try decentralised factory for specific audio implemenations. - - */ -struct Audio_item : public Audio_element { - Audio_item (Request* req_l); +class Audio_item : public Audio_element +{ +public: + Audio_column *audio_column_; + int channel_; - /// Create a midi-item from myself. - virtual Midi_item* midi_item_p() = 0; + Audio_item (); + Audio_column *get_column () const; - Audio_column* audio_column_l_; - /* - THIS SUX. This ties the output system to the input system. Bad move. - */ - Request* req_l_; + virtual void render (); - -protected: - virtual void do_print () const; - private: - Audio_item (Audio_item const&); - Audio_item& operator=( Audio_item const&); + Audio_item (Audio_item const &); + Audio_item &operator = (Audio_item const &); +}; + +class Audio_dynamic : public Audio_item +{ +public: + Audio_dynamic (); + + Real volume_; + bool silent_; }; -struct Audio_key : public Audio_item { - Audio_key (Request* req_l); - - virtual Midi_item* midi_item_p(); +class Audio_span_dynamic : public Audio_element +{ +public: + Direction grow_dir_; + vector dynamics_; + Real min_volume_; + Real max_volume_; + + virtual void render (); + void add_absolute (Audio_dynamic *); + Audio_span_dynamic (Real min_volume, Real max_volume); }; -struct Audio_instrument : public Audio_item { - Audio_instrument (String instrument_str); - virtual Midi_item* midi_item_p(); - String str_; - +class Audio_key : public Audio_item +{ +public: + Audio_key (int acc, bool major); + + int accidentals_; + bool major_; +}; + +class Audio_instrument : public Audio_item +{ +public: + Audio_instrument (string instrument_string); + + string str_; +}; + +class Audio_note : public Audio_item +{ +public: + Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition, int velocity); + + // with tieWaitForNote, there might be a skip between the tied notes! + void tie_to (Audio_note *, Moment skip = 0); + Audio_note *tie_head (); + virtual string to_string () const; + + Pitch pitch_; + Moment length_mom_; + Pitch transposing_; + Audio_dynamic *dynamic_; + int extra_velocity_; + + Audio_note *tied_; + bool tie_event_; }; - -struct Audio_note : public Audio_item { - - Audio_note (Request* req_l, int transposing_i = 0); - virtual Midi_item* midi_item_p(); - int transposing_i_; + +class Audio_piano_pedal : public Audio_item +{ +public: + string type_string_; + Direction dir_; }; -struct Audio_text : Audio_item { - enum Type { - TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, +class Audio_text : public Audio_item +{ +public: + enum Type + { + TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, MARKER, CUE_POINT }; - - Audio_text (Audio_text::Type type, String text_str); - virtual Midi_item* midi_item_p(); + + Audio_text (Audio_text::Type type, const string &text_string); Type type_; - String text_str_; + string text_string_; +}; + +class Audio_tempo : public Audio_item +{ +public: + Audio_tempo (int per_minute_4); + + int per_minute_4_; }; -struct Audio_tempo : Audio_item { - Audio_tempo (int per_minute_4_i); - virtual Midi_item* midi_item_p(); - - int per_minute_4_i_; +class Audio_time_signature : public Audio_item +{ +public: + Audio_time_signature (int beats, int one_beat); + + int beats_; + int one_beat_; }; -struct Audio_time_signature : Audio_item { - Audio_time_signature (Request* req_l); - virtual Midi_item* midi_item_p(); - +class Audio_control_function_value_change : public Audio_item +{ +public: + // Supported control functions. + enum Control + { + BALANCE = 0, PAN_POSITION, REVERB_LEVEL, CHORUS_LEVEL, + // pseudo value for representing the size of the enum; must be kept last + NUM_CONTROLS + }; + + Audio_control_function_value_change (Control control, Real value); + + // Information about a context property corresponding to a control function + // (name, the corresponding enumeration value, and the allowed range for the + // value of the context property). + struct Context_property + { + const char *name_; + Control control_; + Real range_min_; + Real range_max_; + }; + + // Mapping from supported control functions to the corresponding context + // properties. + static const Context_property context_properties_[]; + + Control control_; + Real value_; }; +int moment_to_ticks (Moment); +Real moment_to_real (Moment); +Moment remap_grace_duration (Moment); + #endif // AUDIO_ITEM_HH