0

我有一个 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 文件转换为字节数组流。但是不理解根据进度条值连续播放它。请帮助我更好的实现逻辑。

提前致谢

4

1 回答 1

0

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

你要求保持音高不变,但改变时间。为此,您必须将 PCM 音频从时域转换为频域。傅立叶变换(在软件中作为 FFT 实现)可以做到这一点。这几乎就是 MP3 的工作方式。基本上,不是通过波峰和波谷来测量波形,而是测量各个频段的电平,然后在很短的时间内播放它们,通常是 8ms 左右。无论如何,这对于您需要做的事情来说可能是一个巨大的麻烦。

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

于 2012-04-30T00:37:30.823 回答