【问题标题】:How to change the tempo of an audio file using PHP?如何使用 PHP 更改音频文件的速度?
【发布时间】:2016-08-31 06:01:03
【问题描述】:

有没有办法用 PHP 设置音频文件的速度?

下面有

How to detect the BPM of a song in php

我们可以检测到 bpm(获取 bpm),但我找不到设置音频 mp3 文件速度的方法。

【问题讨论】:

  • 嗨@mikeb 我对它进行了研究,但是使用 javascript 我们可以使用网络音频 api 完成,我正在寻找 php 中的那个过程。

标签: php audio mp3


【解决方案1】:

人们不会简单地设置音频文件的速度。如果你提高它的播放速度,同样数量的声波峰值会在更短的时间内被塞满;它们被挤压在一起,波长必须减小,这意味着频率按比例增加,并且正如 Niyaz 和其他人观察到的那样,您会听到更高的“音高”。

如果你想要双倍速度,你需要在一半的时间内将波浪挤压在一起,但是为了将它们设置回原来的宽度,你需要放下一半(二分之一)。 在 PHP 中无法(轻松)完成此操作

例如,您可以使用 SoX or ffmpeg(强调我的)来做到这一点:

FFmpeg 有一个内置的音频过滤器,用于在不改变节奏的情况下 改变音高。我们需要将文件编码为您的某种格式 电话播放。这当然取决于手机。许多现代 AAC 音频等智能手机:

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100

final.m4a

您当然会使用 .mp3,而不是 wma 或 m4a 作为输入和输出。

在 PHP 中,您只需调用 ffmpeg:

$results = shell_exec("/path/to/wherever/is/ffmpeg -i '{$inputFile}' -filter:a 'atempo={$newTempo}' -q:a {$percentQuality} '{$outputFile}' 2>&1");

并检查$results,输出文件是否OK。

【讨论】:

    【解决方案2】:

    最简单的方法是一行 JavaScript。

    document.getElementById("audio").playbackRate=playbackspeed
    

    如果您想使用 php 将视频/音频处理为较慢的速度,您可以使用 ffmpeg。 https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

    请注意,如果您没有大型服务器,使用 php 处理视频/音频可能需要很长时间。

    【讨论】:

    • document.getElementById("audio").playbackRate=playbackspeed 这不会保持歌曲的音高。
    • 您无法保持歌曲的音高并加快速度,这是不可能的。加快声波也就是改变速度也会改变声波的频率。
    • 所以没有办法用javascript做到这一点,对吧?打算从后端服务器做,你能建议我用哪种编程语言来做这个吗?
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 2012-06-30
    • 2011-01-21
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2011-03-20
    相关资源
    最近更新 更多