File: ags_fx_notation_audio_processor.h

package info (click to toggle)
gsequencer 8.2.9-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 74,272 kB
  • sloc: ansic: 1,195,333; xml: 31,048; cpp: 9,749; sh: 5,798; makefile: 4,024; perl: 536; sed: 16; python: 11
file content (143 lines) | stat: -rw-r--r-- 5,353 bytes parent folder | download | duplicates (3)
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__*/