File: ags_buffer.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 (133 lines) | stat: -rw-r--r-- 3,691 bytes parent folder | download
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
/* GSequencer - Advanced GTK Sequencer
 * Copyright (C) 2005-2025 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_BUFFER_H__
#define __AGS_BUFFER_H__

#include <glib.h>
#include <glib-object.h>

#include <alsa/asoundlib.h>

#include <ags/libags.h>

#include <ags/audio/ags_audio_buffer_util.h>

G_BEGIN_DECLS

#define AGS_TYPE_BUFFER                (ags_buffer_get_type())
#define AGS_BUFFER(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BUFFER, AgsBuffer))
#define AGS_BUFFER_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BUFFER, AgsBufferClass))
#define AGS_IS_BUFFER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_BUFFER))
#define AGS_IS_BUFFER_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_BUFFER))
#define AGS_BUFFER_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_BUFFER, AgsBufferClass))

#define AGS_BUFFER_GET_OBJ_MUTEX(obj) (&(((AgsBuffer *) obj)->obj_mutex))

#define AGS_BUFFER_DEFAULT_TICKS_PER_QUARTER_BUFFER (16.0)

typedef struct _AgsBuffer AgsBuffer;
typedef struct _AgsBufferClass AgsBufferClass;

/**
 * AgsBufferFlags:
 * @AGS_BUFFER_IS_SELECTED: is selected
 *
 * Enum values to control the behavior or indicate internal state of #AgsBuffer by
 * enable/disable as flags.
 */
typedef enum{
  AGS_BUFFER_IS_SELECTED     = 1,
}AgsBufferFlags;

struct _AgsBuffer
{
  GObject gobject;

  AgsBufferFlags flags;

  GRecMutex obj_mutex;

  guint64 x;
  
  guint64 selection_x0;
  guint64 selection_x1;

  guint samplerate;
  guint buffer_size;
  AgsSoundcardFormat format;
  
  void *data;

  AgsAudioBufferUtil *audio_buffer_util;
};

struct _AgsBufferClass
{
  GObjectClass gobject;
};

GType ags_buffer_get_type();
GType ags_buffer_flags_get_type();

GRecMutex* ags_buffer_get_obj_mutex(AgsBuffer *buffer);

void ags_buffer_lock(AgsBuffer *buffer);
void ags_buffer_unlock(AgsBuffer *buffer);

/* flags */
gboolean ags_buffer_test_flags(AgsBuffer *buffer, AgsBufferFlags flags);
void ags_buffer_set_flags(AgsBuffer *buffer, AgsBufferFlags flags);
void ags_buffer_unset_flags(AgsBuffer *buffer, AgsBufferFlags flags);

/* sort */
gint ags_buffer_sort_func(gconstpointer a,
			  gconstpointer b);

/* getter/setter */
guint64 ags_buffer_get_x(AgsBuffer *buffer);
void ags_buffer_set_x(AgsBuffer *buffer, guint64 x);

guint ags_buffer_get_samplerate(AgsBuffer *buffer);
void ags_buffer_set_samplerate(AgsBuffer *buffer,
			       guint samplerate);

guint ags_buffer_get_buffer_size(AgsBuffer *buffer);
void ags_buffer_set_buffer_size(AgsBuffer *buffer,
				guint buffer_size);

AgsSoundcardFormat ags_buffer_get_format(AgsBuffer *buffer);
void ags_buffer_set_format(AgsBuffer *buffer,
			   AgsSoundcardFormat format);

gpointer ags_buffer_get_data(AgsBuffer *buffer);

/* find */
GList* ags_buffer_find_range_x(GList *buffer,
			       guint64 start_x, guint64 end_x);

/* duplicate */
AgsBuffer* ags_buffer_duplicate(AgsBuffer *buffer);

/* instantiate */
AgsBuffer* ags_buffer_new();

G_END_DECLS

#endif /*__AGS_BUFFER_H__*/