如何按精确比例同时改变播放速度和音高
要同时改变播放速度和音高,请应用一个速度乘数 r,且不保留音高。每个频率都会变为原值的 r 倍,而时长会变为原时长除以 r。例如,以 1.25× 播放会将 440 Hz 的音调提高到 550 Hz,并将 60 秒缩短为 48 秒。
本指南适用于希望在导出的音频文件中实现这种联动变化的音频编辑者。你将计算比例,用合适的工具应用它,并检查结果是否符合预期的时长和音高。Audacity 在其更改速度和音高手册中说明了这种行为。
同时改变速度和音高是什么意思?
进行联动速度变化时,录音中的事件会加快或减慢,频率也会按比例升高或降低。Audacity 的更改速度和音高效果会明确地同时改变节奏、音高和频率内容。其单独的更改音高效果则保持时长不变。请选择符合所需结果的操作。来源:更改速度和音高、更改音高。
对于此任务,将比例定义为新播放速度 ÷ 原播放速度。比例大于 1 时,录音会加快,音高会升高。比例介于 0 和 1 之间时,录音会减慢,音高会降低。输入数值前,请明确写出变化方向:“新速度是原速度的 5/4”比“按 5:4 更改”更清楚。
如何计算精确比例?
从你实际已知的条件入手。以下公式描述理想的恒定联动速度变化;示例仅用于说明计算,并非实测的编辑结果。
| 已知条件 | 计算速度乘数 r | 计算示例 |
|---|---|---|
| 直接速度比例 | r = 新速度 ÷ 原速度 | 5/4 = 1.25 |
| 原频率和目标频率 | r = 目标频率 ÷ 原频率 | 550 ÷ 440 = 1.25 |
| 原时长和目标时长 | r = 原时长 ÷ 目标时长 | 60 ÷ 48 = 1.25 |
| 原节拍和目标节拍 | r = 目标 BPM ÷ 原 BPM | 120 ÷ 96 = 1.25 |
得到 r 后,计算预期结果:新时长 = 原时长 ÷ r,新频率 = 原频率 × r。时长关系直接来自以新速度播放同一段音频事件序列。
如果效果要求输入百分比变化,请输入 100 × (r − 1)。因此,1.25× 表示 +25%,而 0.8× 表示 −20%。Audacity 手册使用了相同的乘数与百分比换算关系。来源:更改速度和音高。
一个常见错误是混淆播放百分比和百分比变化。“原速度的 125%”表示 1.25×。“速度提高 125%”则表示 2.25×。另一个常见错误是把时长公式写反:要将 60 秒缩短到 48 秒,需要加快播放,因此乘数必须大于 1。
如何将音乐音程换算为速度比例?
对于 n 个十二平均律半音的音程,使用 r = 2^(n/12)。n 为正数时音高升高;n 为负数时音高降低。要从已有比例求出对应音程,使用 n = 12 × log₂(r)。这些关系来自将一个八度(频率比为 2:1)划分为十二个相等的半音比例。来源:新南威尔士大学,音名、MIDI 数值和频率。
下表将这些公式应用于一段示例性的 60 秒录音。显示的小数已四舍五入。
| 速度乘数 | 百分比变化 | 新时长 | 音程 |
|---|---|---|---|
| 0.5× | −50% | 120 秒 | −12 个半音 |
| 0.8× | −20% | 75 秒 | 约 −3.863 个半音 |
| 1.25× | +25% | 48 秒 | 约 +3.863 个半音 |
| 1.5× | +50% | 40 秒 | 约 +7.020 个半音 |
| 2× | +100% | 30 秒 | +12 个半音 |
| 约 1.059463094× | 约 +5.946309% | 约 56.632459 秒 | +1 个半音 |
请先确定目标是数值比例还是十二平均律音程。3:2 的比例恰好是 1.5,而七个十二平均律半音需要 2^(7/12),约为 1.498307077。这两个设置很接近,但结果不同。请在编辑记录中保留定义比例的分数或公式,避免四舍五入后的显示值成为唯一记录。
如何在 Audacity 中应用比例?
在提供该效果的版本中,选中所需音频并打开 效果 → 音高和节奏 → 更改速度和音高。在速度乘数或对应的百分比变化控件中输入比例。对话框会将这些控件与选区变化后的长度关联起来。来源:Audacity 的更改速度和音高手册。
对于示例中的 5/4 换算,请输入 1.25 或 +25%,并检查 60 秒的选区是否变为 48 秒。先试听,再应用效果,并导出到单独的输出文件。保留原始文件,以便后续修改可以从同一来源开始。
不同版本的菜单名称和可用控件可能有所不同。请确认所选操作会将速度和音高关联起来。当前的 Audacity 手册说明,更改音高会保留时长,因此单独在该效果中输入音程无法完成此任务。来源:Audacity 的更改音高手册。
请以界面实际保留的数值作为你的设置。如果它对你输入的比例进行了舍入,请在开始长时间导出前,根据保留的数值计算结果。像 1.25 这样的比例是有限小数;而一个十二平均律半音对应的有限小数输入都只是近似值。
如何用 FFmpeg 进行可重复的转换?
FFmpeg 还提供了另一种方法:asetrate 会在不改变 PCM 样本数据的情况下更改采样率,从而同时改变播放速度和音高。随后,aresample 会将结果转换为所需的交付采样率。来源:FFmpeg 滤镜文档源文件、FFmpeg 滤镜文档。
以下完整示例要求已安装 FFmpeg,且可在终端中通过 ffmpeg 调用。请在可写目录中运行,并确保文件名尚未被使用。第一条命令会以 48,000 Hz 生成一段 10 秒、440 Hz 的测试音;第二条命令会应用 5/4 比例,并写入一个 48,000 Hz 的 WAV 文件。FFmpeg 文档中的 sine 源提供了样本数据。来源:FFmpeg 滤镜文档源文件。
ffmpeg -n -f lavfi -i "sine=frequency=440:sample_rate=48000:duration=10" -c:a pcm_s16le ratio-input.wav
ffmpeg -n -i ratio-input.wav -af "asetrate=60000,aresample=48000" -c:a pcm_s24le ratio-output.wav
中间采样率为 48,000 × 1.25 = 60,000 Hz。预期输出时长为 8 秒,音调频率为 550 Hz。通过重采样将交付采样率恢复为 48,000 Hz,会保留改变后的播放时长。这些命令已对照文档检查;由于研究环境中没有 FFmpeg,因此未实际执行。
要改用此示例,请先确定源文件的采样率。对于采样率为 S 的源文件,中间采样率必须为 S × r。如果源文件不是 48,000 Hz,却仍使用 60,000 Hz,比例就会改变。请确认你的版本和滤镜链支持该中间采样率,尤其是在变化幅度较大时。
数字文件中的精确比例有多精确?
需要区分三个问题:你想要的比例、工具接受的数值,以及导出样本数所能表示的时长。像 5/4 这样的精确分数可以写成有限小数。许多音乐音程比例以数值输入时则需要近似。
如果基于采样率的转换将其中间采样率舍入,也需要仔细检查。举例来说,将 48,000 Hz 的源文件升高一个十二平均律半音,数学上需要的采样率约为 50,854.228529 Hz。如果选用 50,854 Hz,实际应用的比例就是 50,854/48,000,而不是完整的数学目标。计算 1200 × log₂(实际比例 ÷ 目标比例),可得误差约为 −0.00778 音分。音分关系见新南威尔士大学的频率和音名参考资料。
时长还有单独的限制:数字文件包含整数个采样帧。在 48,000 Hz 下,一个采样帧的时长约为 20.833 微秒。如果计算出的目标时长落在两个采样边界之间,就必须用邻近的边界来表示。对于上述 10 秒测试,预期的 8 秒输出对应每个声道恰好 384,000 个采样帧。
这些计算可以帮助你做出判断:保留定义比例的依据,记录实际应用的数值,并将结果差异与项目所需的精度进行比较。不要把经过舍入的设置描述成与目标在数学上完全相同。
如何验证导出的结果?
请检查导出的文件本身。一个实用的诊断顺序是先检查时长,再检查频率,最后试听完整录音。
- 比较时长。 计算原时长 ÷ r。对于生成的示例,预期时长为 10 ÷ 1.25 = 8 秒。请检查整个文件,包括结尾。
- 比较已知频率。 以 1.25× 播放时,440 Hz 的测试音应变为 550 Hz。请使用分辨率足以满足预期比较要求的频率分析器。
- 检查实际保留的设置。 记录实际使用的乘数或中间采样率,包括任何舍入。
- 完整试听结果。 检查开头、结尾、过渡部分,以及处理的是否为目标选区。
不匹配的模式有助于缩小问题范围。时长正确但音高未变,可能说明使用了保留音高的处理。音高正确但时长未变,可能说明单独使用了音高处理。如果两项变化都按相同错误比例偏离,请重新检查比例方向;如果采用基于采样率的处理,也要检查源采样率。这些诊断判断是根据联动变化公式推得的。
如果同时有时长目标和音高目标,请在编辑前比较它们所需的比例。将一段 60 秒录音缩短到 48 秒需要 r = 1.25;而将音高提高一倍则需要 r = 2。一次恒定的联动变化无法同时满足这两个目标。你需要调整其中一个目标,或选择能独立控制音高和时长的处理方式。
要获得可靠的转换结果,请记下比例,计算预期时长和频率,应用一次联动变化,并根据这些预测验证导出文件。这样可以得到可重复的结果,也能清楚说明其中涉及的任何舍入。
