DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (fddffdeab170)

VCS Links

Line Code
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
/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
 * Copyright (c) 2008 Beyond Access, Inc.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY BEYOND ACCESS, INC. ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL BEYOND ACCESS, INC.  NOR
 * ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @file yin.h
 * @brief Implementation of pitch estimation
 * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
 *
 * This implements part of the YIN algorithm:
 *
 * "YIN, a fundamental frequency estimator for speech and music".
 * Alain de Cheveigné and Hideki Kawahara.  Journal of the Acoustical
 * Society of America, 111 (4), April 2002.
 */

#ifndef __YIN_H__
#define __YIN_H__

#ifdef __cplusplus
extern "C"
#endif
#if 0
} /* Fool Emacs. */
#endif

/* Win32/WinCE DLL gunk */
#include <sphinxbase/sphinxbase_export.h>
#include <sphinxbase/prim_type.h>

/**
 * Frame-based moving-window pitch estimator.
 */
typedef struct yin_s yin_t;

/**
 * Initialize moving-window pitch estimation.
 */
SPHINXBASE_EXPORT
yin_t *yin_init(int frame_size, float search_threshold,
                float search_range, int smooth_window);

/**
 * Free a moving-window pitch estimator.
 */
SPHINXBASE_EXPORT
void yin_free(yin_t *pe);

/**
 * Start processing an utterance.
 */
SPHINXBASE_EXPORT
void yin_start(yin_t *pe);

/**
 * Mark the end of an utterance.
 */
SPHINXBASE_EXPORT
void yin_end(yin_t *pe);

/**
 * Store a frame of data to the pitch estimator.
 *
 * @param pe Pitch estimator.
 * @param frame Frame of <code>frame_size</code> (see
 * yin_init()) samples of audio data.
 */
SPHINXBASE_EXPORT
void yin_store(yin_t *pe, int16 const *frame);

/**
 * Feed a frame of data to the pitch estimator.
 *
 * @param pe Pitch estimator.
 * @param frame Frame of <code>frame_size</code> (see
 * yin_init()) samples of audio data.
 */
SPHINXBASE_EXPORT
void yin_write(yin_t *pe, int16 const *frame);

/**
 * Feed stored frame of data to the pitch estimator.
 * (see yin_store())
 *
 * @param pe Pitch estimator.
 */
SPHINXBASE_EXPORT
void yin_write_stored(yin_t *pe);

/**
 * Read a raw estimated pitch value from the pitch estimator.
 *
 * @param pe Pitch estimator.
 * @param out_period Output: an estimate of the period (*not* the pitch)
 *                  of the signal in samples.
 * @param out_bestdiff Output: the minimum normalized difference value
 *                     associated with <code>*out_pitch</code>, in Q15
 *                     format (i.e. scaled by 32768).  This can be
 *                     interpreted as one minus the probability of voicing.
 * @return Non-zero if enough data was avaliable to return a pitch
 *         estimate, zero otherwise.
 */
SPHINXBASE_EXPORT
int yin_read(yin_t *pe, uint16 *out_period, float *out_bestdiff);

#ifdef __cplusplus
}
#endif

#endif /* __YIN_H__ */