1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
/* GSequencer - Advanced GTK Sequencer
* Copyright (C) 2005-2024 Joël Krähemann
*
* This file is part of GSequencer.
*
* GSequencer 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.
*
* GSequencer 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 GSequencer. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __AGS_FX_NOTATION_AUDIO_PROCESSOR_H__
#define __AGS_FX_NOTATION_AUDIO_PROCESSOR_H__
#include <glib.h>
#include <glib-object.h>
#include <ags/libags.h>
#include <ags/audio/ags_audio.h>
#include <ags/audio/ags_recall_audio_run.h>
#include <ags/audio/ags_note.h>
#include <ags/audio/midi/ags_midi_util.h>
G_BEGIN_DECLS
#define AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR (ags_fx_notation_audio_processor_get_type())
#define AGS_FX_NOTATION_AUDIO_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR, AgsFxNotationAudioProcessor))
#define AGS_FX_NOTATION_AUDIO_PROCESSOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR, AgsFxNotationAudioProcessorClass))
#define AGS_IS_FX_NOTATION_AUDIO_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR))
#define AGS_IS_FX_NOTATION_AUDIO_PROCESSOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR))
#define AGS_FX_NOTATION_AUDIO_PROCESSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FX_NOTATION_AUDIO_PROCESSOR, AgsFxNotationAudioProcessorClass))
#define AGS_FX_NOTATION_AUDIO_PROCESSOR_DEFAULT_KEY_ON_VELOCITY (127)
typedef struct _AgsFxNotationAudioProcessor AgsFxNotationAudioProcessor;
typedef struct _AgsFxNotationAudioProcessorClass AgsFxNotationAudioProcessorClass;
typedef enum{
AGS_FX_NOTATION_AUDIO_PROCESSOR_KEY_MODE_PLAY,
AGS_FX_NOTATION_AUDIO_PROCESSOR_KEY_MODE_MIDI1_RECORD,
AGS_FX_NOTATION_AUDIO_PROCESSOR_KEY_MODE_MIDI2_RECORD,
AGS_FX_NOTATION_AUDIO_PROCESSOR_KEY_MODE_FEED,
}AgsFxNotationAudioProcessorKeyMode;
struct _AgsFxNotationAudioProcessor
{
AgsRecallAudioRun recall_audio_run;
gdouble delay_completion;
gdouble delay_counter;
guint64 offset_counter;
gdouble current_delay_counter;
guint64 current_offset_counter;
AgsTimestamp *timestamp;
GList *recording_note;
GList *recording_audio_signal;
GList *feeding_note;
GList *feeding_audio_signal;
guint tic_counter; // in the range of default period
guint current_tic_counter;
gdouble note_256th_delay;
guint64 note_256th_offset_lower;
guint64 note_256th_offset_upper;
guint64 note_256th_current_offset_lower;
guint64 note_256th_current_offset_upper;
GList *note_256th;
gboolean has_16th_pulse;
};
struct _AgsFxNotationAudioProcessorClass
{
AgsRecallAudioRunClass recall_audio_run;
void (*key_on)(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void (*key_off)(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void (*key_pressure)(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void (*play)(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void (*midi1_record)(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void (*midi2_record)(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void (*feed)(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void (*counter_change)(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
};
GType ags_fx_notation_audio_processor_get_type();
void ags_fx_notation_audio_processor_key_on(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void ags_fx_notation_audio_processor_key_off(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void ags_fx_notation_audio_processor_key_pressure(AgsFxNotationAudioProcessor *fx_notation_audio_processor,
AgsNote *note,
guint velocity,
guint key_mode);
void ags_fx_notation_audio_processor_play(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void ags_fx_notation_audio_processor_midi1_record(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void ags_fx_notation_audio_processor_midi2_record(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void ags_fx_notation_audio_processor_feed(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
void ags_fx_notation_audio_processor_counter_change(AgsFxNotationAudioProcessor *fx_notation_audio_processor);
/* */
AgsFxNotationAudioProcessor* ags_fx_notation_audio_processor_new(AgsAudio *audio);
G_END_DECLS
#endif /*__AGS_FX_NOTATION_AUDIO_PROCESSOR_H__*/
|