UWP AudioGraph AudioFileInputNode改变音高

时间:2017-01-01 20:41:53

标签: c# audio uwp soundeffect

如何更改UWP应用中SoundEffect soundEffect = //...(load sound effect). SoundEffectInstance soundInstance = soundEffect.CreateInstance(); soundInstance.Pitch = pitch; 节点的音高?

我试图将应用程序从WP7移植到uwp(Windows 10,Mobile)。 在我的WP7应用程序中,我使用代码:

AudioGraph

如何使用1在UWP中执行此操作?

2 个答案:

答案 0 :(得分:0)

到目前为止,您应该共享更多代码,但是您希望使用PlaybackSpeedFactor属性,该属性包含在AudioFileInputNode中:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.audio.audiofileinputnode.playbackspeedfactor

目前,Microsoft的GitHub有使用AudioGraph的最佳示例: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/AudioCreation/cs/AudioCreation

在最后一个链接的FilePlayback场景中,您只需添加此行以加倍音频文件的音高:

 fileInput.PlaybackSpeedFactor = 2;

您可以从程序中的任何位置实时进行此更改(例如,使用控制播放速度的滑块)。对于AudioGraph来说,这根本不是问题。您可以可能通过设置此值为负值向后播放内容!

答案 1 :(得分:0)

您可能需要获取AudioFrame数据,使其通过傅立叶变换运行,将音高乘以某个系数,然后再通过傅立叶变换运行回去。

这里有一些获取框架的代码

定义图形的位置 graph.QuantumStarted += Graph_QuantumStarted;

[ComImport]
[Guid("5B0D3235-4DBA-4D44-865E-8F1D0E4FD04D")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

unsafe interface IMemoryBufferByteAccess
{
    void GetBuffer(out byte* buffer, out uint capacity);
}

private static void Graph_QuantumStarted(AudioGraph sender, object args)
{
    AudioFrame frame = frameOutputNode.GetFrame();
    using (AudioBuffer buffer = frame.LockBuffer(AudioBufferAccessMode.Write))
    using (IMemoryBufferReference reference = buffer.CreateReference())
    {
        //Run Fourier and Adjust here
    }
}