summaryrefslogtreecommitdiff
path: root/src/io/sink_apple_audio.h
blob: 14d6a8aa5bfcd390cd6d9cae448ab64b0d4db57f (plain)
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/*
  Copyright (C) 2012-2014 Paul Brossier <piem@aubio.org>

  This file is part of aubio.

  aubio 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.

  aubio 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 aubio.  If not, see <http://www.gnu.org/licenses/>.

*/

#ifndef AUBIO_SINK_APPLE_AUDIO_H
#define AUBIO_SINK_APPLE_AUDIO_H

/** \file

  Write to file using Apple AudioToolbox's
  [ExtAudioFileRef](https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html)

  Avoid including this file directly! Prefer using ::aubio_sink_t instead to
  make your code portable.

  To read from file, use ::aubio_source_t.

  \example io/test-sink_apple_audio.c

*/

#ifdef __cplusplus
extern "C" {
#endif

/** sink_apple_audio object */
typedef struct _aubio_sink_apple_audio_t aubio_sink_apple_audio_t;

/**

  create new ::aubio_sink_apple_audio_t

  \param uri the file path or uri to write to
  \param samplerate sample rate to write the file at

  \return newly created ::aubio_sink_apple_audio_t

  Creates a new sink object.

  If samplerate is set to 0, the creation of the file will be delayed until
  both ::aubio_sink_preset_samplerate and ::aubio_sink_preset_channels have
  been called.

*/
aubio_sink_apple_audio_t * new_aubio_sink_apple_audio(const char_t * uri, uint_t samplerate);

/**

  preset sink samplerate

  \param s sink, created with ::new_aubio_sink_apple_audio
  \param samplerate samplerate to preset the sink to, in Hz

  \return 0 on success, 1 on error

  Preset the samplerate of the sink. The file should have been created using a
  samplerate of 0.

  The file will be opened only when both samplerate and channels have been set.

*/
uint_t aubio_sink_apple_audio_preset_samplerate(aubio_sink_apple_audio_t *s, uint_t samplerate);

/**

  preset sink channels

  \param s sink, created with ::new_aubio_sink_apple_audio
  \param channels number of channels to preset the sink to

  \return 0 on success, 1 on error

  Preset the samplerate of the sink. The file should have been created using a
  samplerate of 0.

  The file will be opened only when both samplerate and channels have been set.

*/
uint_t aubio_sink_apple_audio_preset_channels(aubio_sink_apple_audio_t *s, uint_t channels);

/**

  get samplerate of sink object

  \param s sink object, created with ::new_aubio_sink_apple_audio
  \return samplerate, in Hz

*/
uint_t aubio_sink_apple_audio_get_samplerate(const aubio_sink_apple_audio_t *s);

/**

  get channels of sink object

  \param s sink object, created with ::new_aubio_sink_apple_audio
  \return number of channels

*/
uint_t aubio_sink_apple_audio_get_channels(const aubio_sink_apple_audio_t *s);

/**

  write monophonic vector of length hop_size to sink

  \param s sink, created with ::new_aubio_sink_apple_audio
  \param write_data ::fvec_t samples to write to sink
  \param write number of frames to write

*/
void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data, uint_t write);

/**

  write polyphonic vector of length hop_size to sink

  \param s sink, created with ::new_aubio_sink_apple_audio
  \param write_data ::fmat_t samples to write to sink
  \param write number of frames to write

*/
void aubio_sink_apple_audio_do_multi(aubio_sink_apple_audio_t * s, fmat_t * write_data, uint_t write);

/**

  close sink

  \param s sink_apple_audio object, created with ::new_aubio_sink_apple_audio

  \return 0 on success, non-zero on failure

*/
uint_t aubio_sink_apple_audio_close(aubio_sink_apple_audio_t * s);

/**

  close sink and cleanup memory

  \param s sink, created with ::new_aubio_sink_apple_audio

*/
void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s);

#ifdef __cplusplus
}
#endif

#endif /* AUBIO_SINK_APPLE_AUDIO_H */