[ci] add pip install to readthedocs.yaml
[aubio.git] / src / io / sink_sndfile.h
1 /*
2   Copyright (C) 2012-2014 Paul Brossier <piem@aubio.org>
3
4   This file is part of aubio.
5
6   aubio 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   aubio 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 aubio.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 #ifndef AUBIO_SINK_SNDFILE_H
22 #define AUBIO_SINK_SNDFILE_H
23
24 /** \file
25
26   Write to file using [libsndfile](http://www.mega-nerd.com/libsndfile/)
27
28   Avoid including this file directly! Prefer using ::aubio_sink_t instead to
29   make your code portable.
30
31   To read from file, use ::aubio_source_t.
32
33   \example io/test-sink_sndfile.c
34
35 */
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 /** sink_sndfile object */
42 typedef struct _aubio_sink_sndfile_t aubio_sink_sndfile_t;
43
44 /**
45
46   create new ::aubio_sink_sndfile_t
47
48   \param uri the file path or uri to write to
49   \param samplerate sample rate to write the file at
50
51   \return newly created ::aubio_sink_sndfile_t
52
53   Creates a new sink object.
54
55   If samplerate is set to 0, the creation of the file will be delayed until
56   both ::aubio_sink_preset_samplerate and ::aubio_sink_preset_channels have
57   been called.
58
59 */
60 aubio_sink_sndfile_t * new_aubio_sink_sndfile(const char_t * uri, uint_t samplerate);
61
62 /**
63
64   preset sink samplerate
65
66   \param s sink, created with ::new_aubio_sink_sndfile
67   \param samplerate samplerate to preset the sink to, in Hz
68
69   \return 0 on success, 1 on error
70
71   Preset the samplerate of the sink. The file should have been created using a
72   samplerate of 0.
73
74   The file will be opened only when both samplerate and channels have been set.
75
76 */
77 uint_t aubio_sink_sndfile_preset_samplerate(aubio_sink_sndfile_t *s, uint_t samplerate);
78
79 /**
80
81   preset sink channels
82
83   \param s sink, created with ::new_aubio_sink_sndfile
84   \param channels number of channels to preset the sink to
85
86   \return 0 on success, 1 on error
87
88   Preset the samplerate of the sink. The file should have been created using a
89   samplerate of 0.
90
91   The file will be opened only when both samplerate and channels have been set.
92
93 */
94 uint_t aubio_sink_sndfile_preset_channels(aubio_sink_sndfile_t *s, uint_t channels);
95
96 /**
97
98   preset sink format
99
100   \param s sink, created with ::new_aubio_sink_sndfile
101   \param fmt format of the file to create
102
103   \return 0 on success, 1 on error
104
105   Preset the format of the sink. Supported format strings:
106    - "wav": 16 bit (default)
107    - "aiff": aiff, 16 bit
108    - "flac": flac, 16 bit
109    - "ogg": ogg vorbis stream
110
111   Alternatively, any sndfile format can be set by passing the corresponding
112   integer as a string:
113
114   \code{.c}
115   char_t fmt[10];
116   snprintf(fmt, sizeof(fmt), "%d", SF_FORMAT_FLAC | SF_FORMAT_PCM_24);
117   aubio_sink_sndfile_preset_format(s, fmt);
118   \endcode
119
120   The file should have been created using a samplerate of 0.
121
122   This function should be called before aubio_sink_sndfile_preset_samplerate()
123   and aubio_sink_sndfile_preset_channels().
124
125 */
126 uint_t aubio_sink_sndfile_preset_format(aubio_sink_sndfile_t *s,
127         const char_t* fmt);
128
129 /**
130
131   get samplerate of sink object
132
133   \param s sink object, created with ::new_aubio_sink_sndfile
134   \return samplerate, in Hz
135
136 */
137 uint_t aubio_sink_sndfile_get_samplerate(const aubio_sink_sndfile_t *s);
138
139 /**
140
141   get channels of sink object
142
143   \param s sink object, created with ::new_aubio_sink_sndfile
144   \return number of channels
145
146 */
147 uint_t aubio_sink_sndfile_get_channels(const aubio_sink_sndfile_t *s);
148
149 /**
150
151   write monophonic vector of length hop_size to sink
152
153   \param s sink, created with ::new_aubio_sink_sndfile
154   \param write_data ::fvec_t samples to write to sink
155   \param write number of frames to write
156
157 */
158 void aubio_sink_sndfile_do(aubio_sink_sndfile_t * s, fvec_t * write_data, uint_t write);
159
160 /**
161
162   write polyphonic vector of length hop_size to sink
163
164   \param s sink, created with ::new_aubio_sink_sndfile
165   \param write_data ::fmat_t samples to write to sink
166   \param write number of frames to write
167
168 */
169 void aubio_sink_sndfile_do_multi(aubio_sink_sndfile_t * s, fmat_t * write_data, uint_t write);
170
171 /**
172
173   close sink
174
175   \param s sink_sndfile object, created with ::new_aubio_sink_sndfile
176
177   \return 0 on success, non-zero on failure
178
179 */
180 uint_t aubio_sink_sndfile_close(aubio_sink_sndfile_t * s);
181
182 /**
183
184   close sink and cleanup memory
185
186   \param s sink, created with ::new_aubio_sink_sndfile
187
188 */
189 void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s);
190
191 #ifdef __cplusplus
192 }
193 #endif
194
195 #endif /* AUBIO_SINK_SNDFILE_H */