[FFmpeg-soc] [soc] libavsequencer [PATCH 05/08] Instrument handling public API header file.
Sebastian Vater
cdgs.basty at googlemail.com
Tue Jul 13 22:19:33 CEST 2010
Vitor Sessak a écrit :
> On 07/11/2010 10:07 PM, Sebastian Vater wrote:
>> /**
>> * Envelope structure used by instruments to apply volume / panning
>> * or pitch manipulation according to an user defined waveform.
>> * New fields can be added to the end with minor version bumps.
>> * Removal, reordering and changes to existing fields require a major
>> * version bump.
>> */
>> typedef struct AVSequencerEnvelope {
>
> Why not just
>
> typedef struct {
>
> ?
This is a point, where I'm not sure right now:
Is typedef struct { .. } AVSequencerEnevelope;
exactly the same as:
typedef struct AVSequencerEnvelope { .. } AVSequencerEnvelope;
If yes, then I would replace all typedef struct x { .. } with simply
typedef struct { .. } x;
>
>> /** The actual node data of this envelope as signed 16-bit integer.
>
> The comment is cryptic for someone who doesn't know what the node data
> of the envelope might be.
Fixed.
>
>> For a volume envelope, we have a default scale range of -32767
>> to +32767, for panning envelopes the scale range is between -8191
>> to +8191. For slide, vibrato, tremolo, pannolo (and their auto
>> versions), the scale range is between -256 to +256. */
>> int16_t *data;
>> #define AVSEQ_ENVELOPE_SCALE_MAX 0x7FFF
>> #define AVSEQ_ENVELOPE_SCALE_INVALID
>> ((FF_AVSEQ_ENVELOPE_SCALE_MAX) + 1)
>> #define AVSEQ_ENVELOPE_VOLUME_SCALE 0x7FFF
>> #define AVSEQ_ENVELOPE_PANNING_SCALE 0x1FFF
>> #define AVSEQ_ENVELOPE_SLIDE_SCALE 0x0100
>> #define AVSEQ_ENVELOPE_VIBRATO_SCALE 0x0100
>> #define AVSEQ_ENVELOPE_VIBRATO_SCALE 0x0100
>>
>> /** The node points values or 0 if the envelope is empty. */
>> uint16_t *node_points;
>>
>> /** Number of dragable nodes of this envelope (defaults to 12). */
>> uint16_t nodes;
>> #define AVSEQ_ENVELOPE_NODES 12
>>
>> /** Number of envelope points, i.e. node data values which
>> defaults to 64. */
>> uint16_t points;
>> #define AVSEQ_ENVELOPE_POINTS 64
>>
>> /** Instrument envelope flags. Some sequencers feature
>> loop points of various kinds, which have to be taken
>> care specially in the internal playback engine. */
>> uint16_t flags;
>> #define AVSEQ_ENVELOPE_LOOP 0x0001 ///< Envelope uses
>> loop nodes
>> #define AVSEQ_ENVELOPE_SUSTAIN 0x0002 ///< Envelope uses
>> sustain nodes
>> #define AVSEQ_ENVELOPE_PINGPONG 0x0004 ///< Envelope loop is
>> in ping pong mode
>> #define AVSEQ_ENVELOPE_SUSTAIN_PINGPONG 0x0008 ///< Envelope sustain
>> loop is in ping pong mode
>>
>> /** Envelope tempo in ticks (defaults to 1, i.e. change envelope
>> at every frame / tick). */
>> uint16_t tempo;
>> #define AVSEQ_ENVELOPE_TEMPO 1
>>
>> /** Envelope sustain loop start point. */
>> uint16_t sustain_start;
>>
>> /** Envelope sustain loop end point. */
>> uint16_t sustain_end;
>
>> /** Envelope sustain loop repeat counter for loop range. */
>> uint16_t sustain_count;
>>
>> /** Envelope loop repeat start point. */
>> uint16_t loop_start;
>>
>> /** Envelope loop repeat end point. */
>> uint16_t loop_end;
>>
>> /** Envelope loop repeat counter for loop range. */
>> uint16_t loop_count;
>>
>> /** Randomized lowest value allowed. */
>> int16_t value_min;
>>
>> /** Randomized highest value allowed. */
>> int16_t value_max;
>>
>> /** Array of pointers containing every unknown data field where
>> the last element is indicated by a NULL pointer reference. The
>> first 64-bit of the unknown data contains an unique identifier
>> for this chunk and the second 64-bit data is actual unsigned
>> length of the following raw data. Some formats are chunk based
>> and can store information, which can't be handled by some
>> other, in case of a transition the unknown data is kept as is.
>> Some programs write editor settings for envelopes in those
>> chunks, which then won't get lost in that case. */
>> uint8_t **unknown_data;
>> } AVSequencerEnvelope;
>>
>> /**
>> * Keyboard definitions structure used by instruments to map
>> * note to samples. C-0 is first key. B-9 is 120th key.
>> * New fields can be added to the end with minor version bumps.
>> * Removal, reordering and changes to existing fields require a major
>> * version bump.
>> */
>> typedef struct AVSequencerKeyboard {
>> struct AVSequencerKeyboardEntry {
>> /** Sample number for this keyboard note. */
>> uint16_t sample;
>>
>> /** Octave value for this keyboard note. */
>> uint8_t octave;
>>
>> /** Note value for this keyboard note. */
>> uint8_t note;
>> } key[120];
>> } AVSequencerKeyboard;
>>
>> /**
>> * Arpeggio data structure, This structure is actually for one tick
>> * and therefore actually pointed as an array with the amount of
>> * different ticks handled by the arpeggio control.
>> * New fields can be added to the end with minor version bumps.
>> * Removal, reordering and changes to existing fields require a major
>> * version bump.
>> */
>> typedef struct AVSequencerArpeggioData {
>> /** Packed note or 0 if this is an arpeggio note. */
>> uint8_t tone;
>>
>> /** Transpose for this arpeggio tick. */
>> int8_t transpose;
>>
>> /** Instrument number to switch to or 0 for original instrument. */
>> uint16_t instrument;
>>
>> /** The four effect command bytes which are executed. */
>> uint8_t command[4];
>>
>> /** The four data word values of the four effect command bytes. */
>> uint16_t data[4];
>> } AVSequencerArpeggioData;
>>
>> /**
>> * Arpeggio control envelope used by all instrumental stuff.
>> * New fields can be added to the end with minor version bumps.
>> * Removal, reordering and changes to existing fields require a major
>> * version bump.
>> */
>> typedef struct AVSequencerArpeggio {
>> /** AVSequencerArpeggioData pointer to arpeggio data structure. */
>> AVSequencerArpeggioData *data;
>>
>> /** Instrument arpeggio control flags. Some sequencers feature
>> customized arpeggio command control.which have to be taken
>> care specially in the internal playback engine. */
>> uint16_t flags;
>> #define AVSEQ_ARPEGGIO_FLAG_LOOP 0x0001 ///<
>> Arpeggio control is looped
>> #define AVSEQ_ARPEGGIO_FLAG_SUSTAIN 0x0002 ///<
>> Arpeggio control has a sustain loop
>> #define AVSEQ_ARPEGGIO_FLAG_PINGPONG 0x0004 ///<
>> Arpeggio control will be looped in ping pong mpde
>> #define AVSEQ_ARPEGGIO_FLAG_SUSTAIN_PINGPONG 0x0008 ///<
>> Arpeggio control will have sustain loop ping pong mode enabled
>>
>> /** Number of arpeggio ticks handled by this arpeggio control
>> (defaults to 3 points as in normal arpeggio command). */
>> uint16_t entries;
>> #define AVSEQ_ARPEGGIO_FLAG_ENTRIES 3
>>
>> /** Sustain loop start tick of arpeggio control. */
>> uint16_t sustain_start;
>>
>> /** Sustain loop end tick of arpeggio control. */
>> uint16_t sustain_end;
>>
>> /** Sustain loop count number of how often to repeat loop
>> of arpeggio control. */
>> uint16_t sustain_count;
>>
>> /** Loop start tick of arpeggio control. */
>> uint16_t loop_start;
>>
>> /** Loop end tick of arpeggio control. */
>> uint16_t loop_end;
>>
>> /** Loop count number of how often to repeat loop of arpeggio
>> control. */
>> uint16_t loop_count;
>
> This look repeated frequently. Why not a struct for loops?
That's a very good idea! Will fix this!
--
Best regards,
:-) Basty/CDGS (-:
More information about the FFmpeg-soc
mailing list