• XAudio2学习之调节音调


    频率比有两个地方能够设置。一个是在创建IXAudio2SourceVoice对象的时候。一个是调用IXAudio2SourceVoice::SetFrequencyRatio来调节。

    在创建IXAudio2SourceVoice对象的时候,第三个參数影响音高(音调)和第四个參数会影响频率比的设置。

    HRESULT CreateSourceVoice(
             IXAudio2SourceVoice **ppSourceVoice,
             const WAVEFORMATEX *pSourceFormat,
             UINT32 Flags = 0,
             float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
             IXAudio2VoiceCallback *pCallback = NULL,
             const XAUDIO2_VOICE_SENDS *pSendList = NULL,
             const XAUDIO2_EFFECT_CHAIN *pEffectChain = NULL
    )

    第三个參数指定source voice的行为方式 . 标志位能够是 0 或者 以下一个或者多个的组合:
    Value Description
    XAUDIO2_VOICE_NOPITCH 此voice音高控制不可用.。
    XAUDIO2_VOICE_NOSRC 此voice採样率转换不可用, 此voice的全部输出必须具有同样的採样率。
    注意:
    XAUDIO2_VOICE_NOSRC标志位会导致声音表现得好像 XAUDIO2_VOICE_NOPITCH 标志位也被设置了.
     
    XAUDIO2_VOICE_USEFILTER 音效过滤器在此voice上应有效. 
    XAUDIO2_VOICE_MUSIC 此voice用来播放背景音乐. 系统会自己主动地用用户选择的音乐来替换此 voice。

     

    假设第三个參数中包括XAUDIO2_VOICE_NOPITCH。那么此voice调节就不可用。

    第四个參数表示的是能够在此voice设置的最大频率比。

    取值在XAUDIO2_MIN_FREQ_RATIO 和 XAUDIO2_MAX_FREQ_RATIO之间:

    #define XAUDIO2_MIN_FREQ_RATIO          (1/1024.0f)   // Minimum SetFrequencyRatio argument
    #define XAUDIO2_MAX_FREQ_RATIO          1024.0f       // Maximum MaxFrequencyRatio argument
    #define XAUDIO2_DEFAULT_FREQ_RATIO      2.0f          // Default MaxFrequencyRatio argument

    此參数的最大值被定义为XAUDIO2_MAX_FREQ_RATIO, 其同意音高提升到10 八度音节.假设MaxFrequencyRatio小于1.0,此voice会在创建后立刻使用此比值(而不是默认的1.0)。

    并且对于兴许的调用IXAudio2SourceVoice::SetFrequencyRatio,也就是另外一种能够设置频率比的方法,会被限制XAUDIO2_MIN_FREQ_RATIO 和MaxFrequencyRatio之间。

    注意:XAudio2的内存使用能够通过使用尽可能低的MaxFrequencyRatio来降低。

    HRESULT SetFrequencyRatio(
             float Ratio,
             UINT32 OperationSet = XAUDIO2_COMMIT_NOW
    )

    频率调节能够表示为 源频率/目的频率。改变频率比能够改变voice中音频的速率。比值大于1.0会导致音频播放加快。比值小于1.0会导致音频播放减慢。另外,频率比voice中音频的音调。比如,频率比为1.0对音频没有影响,然而频率比为2.0会提升一个八度音节的音高。而且0.5减少一个八度音节的音高。

    假设调用SetFrequencyRatio设置了一个比值不在有效范围内。此方法会设置一个最接近有效值的比值。

    同一时候在debug模式下回生成一个警告。
    所以调用IXAudio2SourceVoice::SetFrequencyRatio能够调节音调(或者音高)。


    交流QQ:1245178753

    本文地址:http://blog.csdn.net/u011417605/article/details/51044015

  • 相关阅读:
    VUE中全局变量的定义和使用
    Pull Request 工作流——更高效的管理代码
    仓储repository概念
    Mysql存储过程历史表备份
    OpenStack一键安装
    VMware虚拟机设置Win10固定ip
    C#_NPOI_Excel各种设置
    pycharm修改镜像
    C#模拟POST上传文件帮助类(支持https、http)
    Windows安装RabbitMQ
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7358561.html
Copyright © 2020-2023  润新知