summaryrefslogtreecommitdiff
path: root/src/io/source_apple_audio.h
blob: 0ad5569408eb749cb19c03f1607dbd4b72b7b355 (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
/*
  Copyright (C) 2012-2013 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_SOURCE_APPLE_AUDIO_H
#define AUBIO_SOURCE_APPLE_AUDIO_H

/** \file

  Read from file using CoreAudio Extended Audio File Services
  [ExtAudioFileRef](https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html)

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

  To write to file, use ::aubio_sink_t.

  \example io/test-source_apple_audio.c

*/

#ifdef __cplusplus
extern "C" {
#endif

/** apple audio media source object */
typedef struct _aubio_source_apple_audio_t aubio_source_apple_audio_t;

/**

  create new ::aubio_source_apple_audio_t

  \param uri the file path or uri to read from
  \param samplerate sampling rate to view the fie at
  \param hop_size the size of the blocks to read from

  Creates a new source object. If `0` is passed as `samplerate`, the sample
  rate of the original file is used.

  The samplerate of newly created source can be obtained using
  ::aubio_source_apple_audio_get_samplerate.

*/
aubio_source_apple_audio_t * new_aubio_source_apple_audio(const char_t * uri, uint_t samplerate, uint_t hop_size);

/**

  read monophonic vector of length hop_size from source object

  \param s source object, created with ::new_aubio_source_apple_audio
  \param read_to ::fvec_t of data to read to
  \param read upon returns, equals to number of frames actually read

  Upon returns, `read` contains the number of frames actually read from the
  source. `hop_size` if enough frames could be read, less otherwise.

*/
void aubio_source_apple_audio_do(aubio_source_apple_audio_t * s, fvec_t * read_to, uint_t * read);

/**

  read polyphonic vector of length hop_size from source object

  \param s source object, created with ::new_aubio_source_apple_audio
  \param read_to ::fmat_t of data to read to
  \param read upon returns, equals to number of frames actually read

  Upon returns, `read` contains the number of frames actually read from the
  source. `hop_size` if enough frames could be read, less otherwise.

*/
void aubio_source_apple_audio_do_multi(aubio_source_apple_audio_t * s, fmat_t * read_to, uint_t * read);

/**

  get samplerate of source object

  \param s source object, created with ::new_aubio_source_apple_audio
  \return samplerate, in Hz

*/
uint_t aubio_source_apple_audio_get_samplerate(const aubio_source_apple_audio_t * s);

/**

  get channels of source object

  \param s source object, created with ::new_aubio_source_apple_audio
  \return number of channels

*/
uint_t aubio_source_apple_audio_get_channels(const aubio_source_apple_audio_t * s);

/**

  get the duration of source object, in frames

  \param s source object, created with ::new_aubio_source_apple_audio
  \return number of frames in file

*/
uint_t aubio_source_apple_audio_get_duration(const aubio_source_apple_audio_t * s);

/**

  seek source object

  \param s source object, created with ::new_aubio_source
  \param pos position to seek to, in frames

  \return 0 if sucessful, non-zero on failure

*/
uint_t aubio_source_apple_audio_seek (aubio_source_apple_audio_t * s, uint_t pos);

/**

  close source

  \param s source object, created with ::new_aubio_source_apple_audio

  \return 0 if sucessful, non-zero on failure

*/
uint_t aubio_source_apple_audio_close(aubio_source_apple_audio_t * s);

/**

  close source and cleanup memory

  \param s source object, created with ::new_aubio_source_apple_audio

*/
void del_aubio_source_apple_audio(aubio_source_apple_audio_t * s);

#ifdef __cplusplus
}
#endif

#endif /* AUBIO_SOURCE_APPLE_AUDIO_H */