2

如何更改AudioGraphUWP 应用程序中节点的间距?

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

SoundEffect soundEffect = //...(load sound effect).
SoundEffectInstance soundInstance = soundEffect.CreateInstance();
soundInstance.Pitch = pitch;

如何在 UWP 中使用AudioGraph

4

2 回答 2

0

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

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

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

在最后一个链接的 FilePlayback 场景中,您所要做的就是添加此行以使音频文件的音高加倍:

 fileInput.PlaybackSpeedFactor = 2;

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

于 2017-01-04T21:15:57.810 回答
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
    }
}
于 2018-12-01T15:41:32.540 回答