source: src/io/sink_sndfile.h @ 49688ef

feature/crepe
Last change on this file since 49688ef was 0da5208, checked in by Paul Brossier <piem@piem.org>, 6 years ago

[io] sink_sndfile: try guessing format according to file extension

  • Property mode set to 100644
File size: 4.7 KB
RevLine 
[2c3d4ca]1/*
[14ac1db]2  Copyright (C) 2012-2014 Paul Brossier <piem@aubio.org>
[2c3d4ca]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
[6f42c16]21#ifndef AUBIO_SINK_SNDFILE_H
22#define AUBIO_SINK_SNDFILE_H
[2c3d4ca]23
24/** \file
25
[ac20c85]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.
[2c3d4ca]32
[4e3723d]33  \example io/test-sink_sndfile.c
34
[2c3d4ca]35*/
36
[4e3723d]37#ifdef __cplusplus
38extern "C" {
39#endif
40
[14ac1db]41/** sink_sndfile object */
[2c3d4ca]42typedef struct _aubio_sink_sndfile_t aubio_sink_sndfile_t;
[ac20c85]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
[14ac1db]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
[ac20c85]59*/
[ae5d58a]60aubio_sink_sndfile_t * new_aubio_sink_sndfile(const char_t * uri, uint_t samplerate);
[ac20c85]61
62/**
63
[14ac1db]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*/
77uint_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*/
94uint_t aubio_sink_sndfile_preset_channels(aubio_sink_sndfile_t *s, uint_t channels);
95
96/**
97
[0da5208]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*/
126uint_t aubio_sink_sndfile_preset_format(aubio_sink_sndfile_t *s,
127        const char_t* fmt);
128
129/**
130
[14ac1db]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*/
[ae5d58a]137uint_t aubio_sink_sndfile_get_samplerate(const aubio_sink_sndfile_t *s);
[14ac1db]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*/
[ae5d58a]147uint_t aubio_sink_sndfile_get_channels(const aubio_sink_sndfile_t *s);
[14ac1db]148
149/**
150
[ac20c85]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*/
[8aed26d]158void aubio_sink_sndfile_do(aubio_sink_sndfile_t * s, fvec_t * write_data, uint_t write);
[ac20c85]159
160/**
161
[14ac1db]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*/
169void aubio_sink_sndfile_do_multi(aubio_sink_sndfile_t * s, fmat_t * write_data, uint_t write);
170
171/**
172
[a9fd272]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*/
180uint_t aubio_sink_sndfile_close(aubio_sink_sndfile_t * s);
181
182/**
183
[ac20c85]184  close sink and cleanup memory
185
186  \param s sink, created with ::new_aubio_sink_sndfile
187
188*/
[2c3d4ca]189void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s);
190
191#ifdef __cplusplus
192}
193#endif
194
[6f42c16]195#endif /* AUBIO_SINK_SNDFILE_H */
Note: See TracBrowser for help on using the repository browser.