2 Copyright (C) 2012-2013 Paul Brossier <piem@aubio.org>
4 This file is part of aubio.
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.
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.
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/>.
21 #ifndef _AUBIO_SOURCE_H
22 #define _AUBIO_SOURCE_H
26 Media source to read blocks of consecutive audio samples from file
28 Depending on how aubio was compiled, the following file formats will be
31 To write to file, use ::aubio_sink_t.
33 \b \p source_avcodec : libav
35 aubio can be optionally compiled with [libav](http://libav.org), which can
36 read from a very large number of audio and video formats, including over
37 different network protocols such as HTTP.
39 \b \p source_apple_audio : ExtAudioFileRef
41 On Mac and iOS platforms, aubio should be compiled with CoreAudio [Extended
43 (https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html).
44 This provides access to most common audio file formats, including compressed
47 \b \p source_sndfile : libsndfile
49 Also optional, aubio can be built against
50 [libsndfile](http://www.mega-nerd.com/libsndfile/), which can read [most
51 uncompressed formats](http://www.mega-nerd.com/libsndfile/#Features).
53 \b \p source_wavread : native WAV reader
55 A simple source to read from 16-bits PCM RIFF encoded WAV files.
57 \example io/test-source.c
58 \example io/test-source_multi.c
66 /** media source object */
67 typedef struct _aubio_source_t aubio_source_t;
71 create new ::aubio_source_t
73 \param uri the file path or uri to read from
74 \param samplerate sampling rate to view the fie at
75 \param hop_size the size of the blocks to read from
77 Creates a new source object. If `0` is passed as `samplerate`, the sample
78 rate of the original file is used.
80 The samplerate of newly created source can be obtained using
81 ::aubio_source_get_samplerate.
84 aubio_source_t * new_aubio_source(char_t * uri, uint_t samplerate, uint_t hop_size);
88 read monophonic vector of length hop_size from source object
90 \param s source object, created with ::new_aubio_source
91 \param read_to ::fvec_t of data to read to
92 \param read upon returns, equals to number of frames actually read
94 Upon returns, `read` contains the number of frames actually read from the
95 source. `hop_size` if enough frames could be read, less otherwise.
98 void aubio_source_do(aubio_source_t * s, fvec_t * read_to, uint_t * read);
102 read polyphonic vector of length hop_size from source object
104 \param s source object, created with ::new_aubio_source
105 \param read_to ::fmat_t of data to read to
106 \param[out] read upon returns, equals to number of frames actually read
108 Upon returns, `read` contains the number of frames actually read from the
109 source. `hop_size` if enough frames could be read, less otherwise.
112 void aubio_source_do_multi(aubio_source_t * s, fmat_t * read_to, uint_t * read);
116 get samplerate of source object
118 \param s source object, created with ::new_aubio_source
119 \return samplerate, in Hz
122 uint_t aubio_source_get_samplerate(aubio_source_t * s);
126 get channels of source object
128 \param s source object, created with ::new_aubio_source
132 uint_t aubio_source_get_channels (aubio_source_t * s);
138 \param s source object, created with ::new_aubio_source
139 \param pos position to seek to, in frames
141 \return 0 if sucessful, non-zero on failure
144 uint_t aubio_source_seek (aubio_source_t * s, uint_t pos);
150 \param s source object, created with ::new_aubio_source
152 \return 0 if sucessful, non-zero on failure
155 uint_t aubio_source_close (aubio_source_t *s);
159 close source and cleanup memory
161 \param s source object, created with ::new_aubio_source
164 void del_aubio_source(aubio_source_t * s);
170 #endif /* _AUBIO_SOURCE_H */