src/pitch/pitchspecacf.c: return NULL if fft creation failed
[aubio.git] / src / pitch / pitchyinfft.h
1 /*
2   Copyright (C) 2003-2015 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 /** \file
22
23   Pitch detection using a spectral implementation of the YIN algorithm
24
25   This algorithm was derived from the YIN algorithm. In this implementation, a
26   Fourier transform is used to compute a tapered square difference function,
27   which allows spectral weighting. Because the difference function is tapered,
28   the selection of the period is simplified.
29
30   Paul Brossier, [Automatic annotation of musical audio for interactive
31   systems](http://aubio.org/phd/), Chapter 3, Pitch Analysis, PhD thesis,
32   Centre for Digital music, Queen Mary University of London, London, UK, 2006.
33
34   \example pitch/test-pitchyinfft.c
35
36 */
37
38 #ifndef AUBIO_PITCHYINFFT_H
39 #define AUBIO_PITCHYINFFT_H
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 /** pitch detection object */
46 typedef struct _aubio_pitchyinfft_t aubio_pitchyinfft_t;
47
48 /** execute pitch detection on an input buffer
49
50   \param o pitch detection object as returned by new_aubio_pitchyinfft
51   \param samples_in input signal vector (length as specified at creation time)
52   \param cands_out pitch period candidates, in samples
53
54 */
55 void aubio_pitchyinfft_do (aubio_pitchyinfft_t * o, const fvec_t * samples_in, fvec_t * cands_out);
56 /** creation of the pitch detection object
57
58   \param samplerate samplerate of the input signal
59   \param buf_size size of the input buffer to analyse
60
61 */
62 aubio_pitchyinfft_t *new_aubio_pitchyinfft (uint_t samplerate, uint_t buf_size);
63 /** deletion of the pitch detection object
64
65   \param o pitch detection object as returned by new_aubio_pitchyinfft()
66
67 */
68 void del_aubio_pitchyinfft (aubio_pitchyinfft_t * o);
69
70 /** get tolerance parameter for YIN algorithm
71
72   \param o YIN pitch detection object
73
74   \return tolerance parameter for minima selection [default 0.15]
75
76 */
77 smpl_t aubio_pitchyinfft_get_tolerance (aubio_pitchyinfft_t * o);
78
79 /** set tolerance parameter for YIN algorithm
80
81   \param o YIN pitch detection object
82   \param tol tolerance parameter for minima selection [default 0.15]
83
84 */
85 uint_t aubio_pitchyinfft_set_tolerance (aubio_pitchyinfft_t * o, smpl_t tol);
86
87 /** get current confidence of YIN algorithm
88
89   \param o YIN pitch detection object
90   \return confidence parameter
91
92 */
93 smpl_t aubio_pitchyinfft_get_confidence (aubio_pitchyinfft_t * o);
94
95 #ifdef __cplusplus
96 }
97 #endif
98
99 #endif /* AUBIO_PITCHYINFFT_H */