⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soundtouch.h

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 H
字号:
/***************************************************************************** * * A main class for tempo/pitch/rate adjusting routines.  * * Initialize the object by setting up the sound stream parameters with the * 'setSampleRate' and 'setChannels' functions, and set the desired * tempo/pitch/rate settings with the corresponding functions. * * Notes: * * This class behaves like an first-in-first-out pipe: The samples to be  *  processed are fed into one of the pipe with the 'putSamples' function, *  and the ready, processed samples are read from the other end with the  *  'receiveSamples' function.  * * * The tempo/pitch/rate control parameters may freely be altered during  * processing. * * * The processing routines introduce a certain 'latency' between the * input and output, so that the inputted samples aren't immediately  * transferred to the output, and neither the number of output samples  * immediately available after inputting some samples isn't in direct  * relationship to the number of previously inputted samples. * * * This class utilizes classes 'tempochanger' to change tempo of the * sound (without changing pitch) and 'transposer' to change rate * (that is, both tempo and pitch) of the sound. The third available control  * 'pitch' (change pitch but maintain tempo) is produced by suitably  * combining the two preceding controls. * * Author        : Copyright (c) Olli Parviainen * Author e-mail : oparviai @ iki.fi * * Last changed  : $Date: 2004/10/26 19:09:39 $ * File revision : $Revision: 1.2 $ * * $Id: SoundTouch.h,v 1.2 2004/10/26 19:09:39 vjohnson Exp $ * * License : * *  SoundTouch sound processing library *  Copyright (c) Olli Parviainen * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public *  License as published by the Free Software Foundation; either *  version 2.1 of the License, or (at your option) any later version. * *  This library 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 *  Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * *****************************************************************************/#ifndef SoundTouch_H#define SoundTouch_H#include "FIFOSamplePipe.h"#include "STTypes.h"namespace soundtouch{/// Soundtouch library version string#define SOUNDTOUCH_VERSION          "1.2.2"/// SoundTouch library version id#define SOUNDTOUCH_VERSION_ID       010202//// Available setting IDs for the 'setSetting' & 'get_setting' functions:/// Enable/disable anti-alias filter in pitch transposer (0 = disable)#define SETTING_USE_AA_FILTER       0/// Pitch transposer anti-alias filter length (8 .. 128 taps, default = 32)#define SETTING_AA_FILTER_LENGTH    1/// Enable/disable quick seeking algorithm in tempo changer routine/// (enabling quick seeking lowers CPU utilization but causes a minor sound///  quality compromising)#define SETTING_USE_QUICKSEEK       2/// Time-stretch algorithm single processing sequence length in milliseconds. This determines /// to how long sequences the original sound is chopped in the time-stretch algorithm. /// See "STTypes.h" or README for more information.#define SETTING_SEQUENCE_MS         3/// Time-stretch algorithm seeking window length in milliseconds for algorithm that finds the /// best possible overlapping location. This determines from how wide window the algorithm /// may look for an optimal joining location when mixing the sound sequences back together. /// See "STTypes.h" or README for more information.#define SETTING_SEEKWINDOW_MS       4/// Time-stretch algorithm overlap length in milliseconds. When the chopped sound sequences /// are mixed back together, to form a continuous sound stream, this parameter defines over /// how long period the two consecutive sequences are let to overlap each other. /// See "STTypes.h" or README for more information.#define SETTING_OVERLAP_MS          5class SoundTouch : public FIFOProcessor{private:    /// Rate transposer class instance    class RateTransposer *pRateTransposer;    /// Time-stretch class instance    class TDStretch *pTDStretch;    /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.    float virtualRate;    /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.    float virtualTempo;    /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.    float virtualPitch;    /// Flag: Has sample rate been set?    BOOL  bSrateSet;    /// Calculates effective rate & tempo valuescfrom 'virtualRate', 'virtualTempo' and     /// 'virtualPitch' parameters.    void calcEffectiveRateAndTempo();protected :    /// Number of channels    uint  channels;    /// Effective 'rate' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'    float rate;    /// Effective 'tempo' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'    float tempo;public:    SoundTouch();    virtual ~SoundTouch();    /// Get SoundTouch library version string    static const char *getVersionString();    /// Get SoundTouch library version Id    static uint SoundTouch::getVersionId();    /// Sets new rate control value. Normal rate = 1.0, smaller values    /// represent slower rate, larger faster rates.    void setRate(float newRate);    /// Sets new tempo control value. Normal tempo = 1.0, smaller values    /// represent slower tempo, larger faster tempo.    void setTempo(float newTempo);    /// Sets new rate control value as a difference in percents compared    /// to the original rate (-50 .. +100 %)    void setRateChange(float newRate);    /// Sets new tempo control value as a difference in percents compared    /// to the original tempo (-50 .. +100 %)    void setTempoChange(float newTempo);    /// Sets new pitch control value. Original pitch = 1.0, smaller values    /// represent lower pitches, larger values higher pitch.    void setPitch(float newPitch);    /// Sets pitch change in octaves compared to the original pitch      /// (-1.00 .. +1.00)    void setPitchOctaves(float newPitch);    /// Sets pitch change in semi-tones compared to the original pitch    /// (-12 .. +12)    void setPitchSemiTones(int newPitch);    void setPitchSemiTones(float newPitch);    /// Sets the number of channels, 1 = mono, 2 = stereo    void setChannels(uint numChannels);    /// Sets sample rate.    void setSampleRate(uint srate);    /// Flushes the last samples from the processing pipeline to the output.    /// Clears also the internal processing buffers.    //    /// Note: This function is meant for extracting the last samples of a sound    /// stream. This function may introduce additional blank samples in the end    /// of the sound stream, and thus it's not recommended to call this function    /// in the middle of a sound stream.    void flush();    /// Adds 'numSamples' pcs of samples from the 'samples' memory position into    /// the input of the object. Notice that sample rate _has_to_ be set before    /// calling this function, otherwise throws a runtime_error exception.    virtual void putSamples(            const soundtouch::SAMPLETYPE *samples,  ///< Pointer to sample buffer.            uint numSamples                         ///< Number of samples in buffer. Notice                                                    ///< that in case of stereo-sound a single sample                                                    ///< contains data for both channels.            );    /// Clears all the samples in the object's output and internal processing    /// buffers.    virtual void clear();    /// Changes a setting controlling the processing system behaviour. See the    /// 'SETTING_...' defines for available setting ID's.    ///     /// \return 'TRUE' if the setting was succesfully changed    BOOL setSetting(uint settingId,   ///< Setting ID number. see SETTING_... defines.                    uint value        ///< New setting value.                    );    /// Reads a setting controlling the processing system behaviour. See the    /// 'SETTING_...' defines for available setting ID's.    ///    /// \return the setting value.    uint getSetting(uint settingId    ///< Setting ID number, see SETTING_... defines.                    ) const;};}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -