1 /* GSequencer - Advanced GTK Sequencer 2 * Copyright (C) 2005-2019 Joël Krähemann 3 * 4 * This file is part of GSequencer. 5 * 6 * GSequencer is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * GSequencer is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with GSequencer. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef __AGS_SEQUENCER_H__ 21 #define __AGS_SEQUENCER_H__ 22 23 #include <glib.h> 24 #include <glib-object.h> 25 26 G_BEGIN_DECLS 27 28 #define AGS_TYPE_SEQUENCER (ags_sequencer_get_type()) 29 #define AGS_SEQUENCER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEQUENCER, AgsSequencer)) 30 #define AGS_SEQUENCER_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_SEQUENCER, AgsSequencerInterface)) 31 #define AGS_IS_SEQUENCER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEQUENCER)) 32 #define AGS_IS_SEQUENCER_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_SEQUENCER)) 33 #define AGS_SEQUENCER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_SEQUENCER, AgsSequencerInterface)) 34 35 typedef struct _AgsSequencer AgsSequencer; 36 typedef struct _AgsSequencerInterface AgsSequencerInterface; 37 38 #define AGS_SEQUENCER_MAX_MIDI_CHANNELS (16) 39 40 #define AGS_SEQUENCER_MAX_MIDI_KEYS (128) 41 42 #define AGS_SEQUENCER_DEFAULT_SAMPLERATE (44100.0) 43 #define AGS_SEQUENCER_DEFAULT_BUFFER_SIZE (944) 44 #define AGS_SEQUENCER_DEFAULT_DEVICE "hw:0" 45 #define AGS_SEQUENCER_DEFAULT_BPM (120.0) 46 #define AGS_SEQUENCER_DEFAULT_DELAY_FACTOR (1.0 / 4.0) 47 #define AGS_SEQUENCER_DEFAULT_JIFFIE ((double) AGS_SEQUENCER_DEFAULT_SAMPLERATE / (double) AGS_SEQUENCER_DEFAULT_BUFFER_SIZE) 48 49 #define AGS_SEQUENCER_DEFAULT_TACT (1.0 / 1.0) 50 #define AGS_SEQUENCER_DEFAULT_TACT_JIFFIE (60.0 / AGS_SEQUENCER_DEFAULT_BPM * AGS_SEQUENCER_DEFAULT_TACT) 51 #define AGS_SEQUENCER_DEFAULT_TACTRATE (1.0 / AGS_SEQUENCER_DEFAULT_TACT_JIFFIE) 52 53 #define AGS_SEQUENCER_DEFAULT_SCALE (1.0) 54 #define AGS_SEQUENCER_DEFAULT_DELAY (AGS_SEQUENCER_DEFAULT_JIFFIE * (60.0 / AGS_SEQUENCER_DEFAULT_BPM)) 55 56 #define AGS_SEQUENCER_DEFAULT_PERIOD (64.0) 57 58 #define AGS_SEQUENCER_DEFAULT_LATENCY (400) 59 60 struct _AgsSequencerInterface 61 { 62 GTypeInterface ginterface; 63 64 void (*set_device)(AgsSequencer *sequencer, 65 gchar *card_id); 66 gchar* (*get_device)(AgsSequencer *sequencer); 67 68 void (*list_cards)(AgsSequencer *sequencer, 69 GList **card_id, GList **card_name); 70 71 gboolean (*is_starting)(AgsSequencer *sequencer); 72 gboolean (*is_playing)(AgsSequencer *sequencer); 73 gboolean (*is_recording)(AgsSequencer *sequencer); 74 75 void (*play_init)(AgsSequencer *sequencer, 76 GError **error); 77 void (*play)(AgsSequencer *sequencer, 78 GError **error); 79 80 void (*record_init)(AgsSequencer *sequencer, 81 GError **error); 82 void (*record)(AgsSequencer *sequencer, 83 GError **error); 84 85 void (*stop)(AgsSequencer *sequencer); 86 87 void (*tic)(AgsSequencer *sequencer); 88 void (*offset_changed)(AgsSequencer *sequencer, 89 guint note_offset); 90 91 void* (*get_buffer)(AgsSequencer *sequencer, 92 guint *buffer_length); 93 void* (*get_next_buffer)(AgsSequencer *sequencer, 94 guint *buffer_length); 95 96 void (*lock_buffer)(AgsSequencer *sequencer, 97 void *buffer); 98 void (*unlock_buffer)(AgsSequencer *sequencer, 99 void *buffer); 100 101 void (*set_bpm)(AgsSequencer *sequencer, 102 gdouble bpm); 103 gdouble (*get_bpm)(AgsSequencer *sequencer); 104 105 void (*set_delay_factor)(AgsSequencer *sequencer, 106 gdouble delay_factor); 107 gdouble (*get_delay_factor)(AgsSequencer *sequencer); 108 109 void (*set_start_note_offset)(AgsSequencer *sequencer, 110 guint start_note_offset); 111 guint (*get_start_note_offset)(AgsSequencer *sequencer); 112 113 void (*set_note_offset)(AgsSequencer *sequencer, 114 guint note_offset); 115 guint (*get_note_offset)(AgsSequencer *sequencer); 116 }; 117 118 GType ags_sequencer_get_type(); 119 120 void ags_sequencer_set_device(AgsSequencer *sequencer, 121 gchar *card_id); 122 gchar* ags_sequencer_get_device(AgsSequencer *sequencer); 123 124 void ags_sequencer_list_cards(AgsSequencer *sequencer, 125 GList **card_id, GList **card_name); 126 127 gboolean ags_sequencer_is_starting(AgsSequencer *sequencer); 128 gboolean ags_sequencer_is_playing(AgsSequencer *sequencer); 129 gboolean ags_sequencer_is_recording(AgsSequencer *sequencer); 130 131 void ags_sequencer_play_init(AgsSequencer *sequencer, 132 GError **error); 133 void ags_sequencer_play(AgsSequencer *sequencer, 134 GError **error); 135 136 void ags_sequencer_record_init(AgsSequencer *sequencer, 137 GError **error); 138 void ags_sequencer_record(AgsSequencer *sequencer, 139 GError **error); 140 141 void ags_sequencer_stop(AgsSequencer *sequencer); 142 143 void ags_sequencer_tic(AgsSequencer *sequencer); 144 void ags_sequencer_offset_changed(AgsSequencer *sequencer, 145 guint note_offset); 146 147 void* ags_sequencer_get_buffer(AgsSequencer *sequencer, 148 guint *buffer_length); 149 void* ags_sequencer_get_next_buffer(AgsSequencer *sequencer, 150 guint *buffer_length); 151 152 void ags_sequencer_lock_buffer(AgsSequencer *sequencer, 153 void *buffer); 154 void ags_sequencer_unlock_buffer(AgsSequencer *sequencer, 155 void *buffer); 156 157 void ags_sequencer_set_bpm(AgsSequencer *sequencer, 158 gdouble bpm); 159 gdouble ags_sequencer_get_bpm(AgsSequencer *sequencer); 160 161 void ags_sequencer_set_delay_factor(AgsSequencer *sequencer, 162 gdouble delay_factor); 163 gdouble ags_sequencer_get_delay_factor(AgsSequencer *sequencer); 164 165 void ags_sequencer_set_start_note_offset(AgsSequencer *sequencer, 166 guint start_note_offset); 167 guint ags_sequencer_get_start_note_offset(AgsSequencer *sequencer); 168 169 void ags_sequencer_set_note_offset(AgsSequencer *sequencer, 170 guint note_offset); 171 guint ags_sequencer_get_note_offset(AgsSequencer *sequencer); 172 173 G_END_DECLS 174 175 #endif /*__AGS_SEQUENCER_H__*/ 176