gpt4 book ai didi

c# - 如何使用4秒的.wav文件根据C#中的progressbar值[0-250]范围在其中播放音调

转载 作者:行者123 更新时间:2023-12-03 02:22:25 26 4
gpt4 key购买 nike

我有一个5秒对角线声音的[wav]文件[低音调为0秒,高音调为4秒]。我想从此.wav文件中提取音调,然后播放该音调以提醒用户进行速度控制以及进度条值范围为[0-250]的值。

因此,如果速度值= 0,则进度条为空,.wav发出的音调应为低音调[0秒]。如果速度值= 10,则进度条值为10,并且来自.wav的音调应稍高一些(例如0.10秒)。如果速度值= 20,则进度条值为20,并且.wav的音调应稍高一些(例如0.20秒),依此类推,直到速度值= 250,然后进度条值为250,并且.wav的音调应为最高音高[说4秒]

我是这种从.wav提取音调的媒体的新手,并根据进度条的值在C#中播放它。请通过整个过程指导我。

我尝试使用.wav切割器将字节数组流中的.wav文件转换。但是并没有根据进度条的值连续播放它。请帮助我提供更好的实现逻辑。

提前致谢

最佳答案

WAV文件包含PCM音频,这意味着每个样本都是该时刻压力水平的度量。假设您在1kHz处有5秒的正弦波,以44.1kHz(CD音频的标准采样率)采样,并且您想将这5秒的播放时间扩展到10秒。如果只是简单地缓慢播放这些样本,以使WAV文件持续更长时间,则可以有效地将可听音调降低一个 Octave ,降低到500Hz,同时将采样率降低一半,降低到22.05kHz。以这个例子为例,考虑一下频率扫描的WAV。即使您知道必须提前播放多长时间,您所做的只是更改扫频的音高和长度。这不是您真正想做的。

您要保持相同的音高,但要改变时间。为此,您必须将PCM音频从时域转换为频域。傅立叶变换(在软件中实现为FFT)可以完成此操作。这几乎就是MP3的工作方式。基本上,不是测量波形的波峰和波谷,而是测量各种频带的电平,然后在短时间内(通常为8ms左右)播放它们。无论如何,这可能是您要做的巨大麻烦。

我建议您随进度条的上升自行生成频率扫描。生成一个简单的正弦波,并且随着进度条的增加,您生成的正弦波的频率也会增加。简单得多。

关于c# - 如何使用4秒的.wav文件根据C#中的progressbar值[0-250]范围在其中播放音调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com