![以编程方式实时更改播放速度(不是音调)](https://linux22.com/image/116673/%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E5%AE%9E%E6%97%B6%E6%9B%B4%E6%94%B9%E6%92%AD%E6%94%BE%E9%80%9F%E5%BA%A6%EF%BC%88%E4%B8%8D%E6%98%AF%E9%9F%B3%E8%B0%83%EF%BC%89.png)
我正在寻找一种能够再现音频文件(如果可能的话,wav 和 mp3)并提供一种实时、完美地改变播放速度的方法的软件。我的意思是,没有任何间隙、爆裂声或噪音。就像采样时钟平滑地改变一样。
我对保持音调恒定不感兴趣(就像这个问题:更慢或更快地播放声音文件)。相反,音高必须遵循新的速度。
我需要以编程方式更改速度,例如从原始速度的 20% 更改为 200%。
有没有什么东西已经准备好了,而无需重新发明轮子?
答案1
mplayer
可以播放wav
和文件,并且您可以使用 键和mp3
交互地更改速度,但 wav 文件的播放速度不能低于其原始速度。可以做同样的事情并设法减慢文件速度。更快的速度会提高频率。[
]
vlc
wav
答案2
您可以使用mplayer -af scaletempo -speed 0.5 filename.mp3
更改播放速度而不更改音频音调。
如果您想实时更改速度(从命令行调用 mplayer 后),您必须在中创建运行播放器从机模式。
参考:
- https://stackoverflow.com/questions/36867732/slave-mode-mplayer-pipe
- https://stackoverflow.com/questions/15856922/python-send-command-to-mplayer-under-slave-mode
class SimpleMplayerPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
args, env = _packagedCmd(["mplayer", "-really-quiet", "-noautosub"])
if isWin:
args += ["-ao", "win32"]
class SimpleMplayerSlaveModePlayer(SimpleMplayerPlayer):
def __init__(self, taskman: TaskManager):
super().__init__(taskman)
self.args.append("-slave")
def _play(self, tag: AVTag) -> None:
assert isinstance(tag, SoundOrVideoTag)
self._process = subprocess.Popen(
self.args + [tag.filename],
env=self.env,
stdin=subprocess.PIPE,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
startupinfo=startup_info(),
)
self._wait_for_termination(tag)
def command(self, *args: Any) -> None:
"""Send a command over the slave interface.
The trailing newline is automatically added."""
str_args = [str(x) for x in args]
if self._process:
self._process.stdin.write(" ".join(str_args).encode("utf8") + b"\n")
self._process.stdin.flush()
def seek_relative(self, secs: int) -> None:
self.command("seek", secs, 0)
def toggle_pause(self) -> None:
self.command("pause")
答案3
对于那些需要从命令行设置速度的人,请使用-speed SPEED
选项:
mplayer -speed 0.1 file
[
注意:您可以使用和键实时更改此速度]
。
当然,mpv
也适用。
学分:https://linuxacademy.com/blog/linux/tutorial-playing-around-with-mplayer/
答案4
正如用户所说
mplayer -af scaletempo file.mp4
正是您所需要的。在保持音高的同时调整节奏(速度)。基本上速度会改变,但当速度更高/更低时,你不会得到花栗鼠/幽灵效果。
有关音阶速度的更多信息这里
现在,使用“[”或“]”您可以即时提高/降低播放速度。
由于无法在设置中预设(或者我找不到如何设置),我决定创建一个桌面入口(LXDE 桌面中应用程序的别名),这样我就可以从文件资源管理器中打开相关文件并加载该代码。
我把它留在这里以防有人需要。
[Desktop Entry]
Type=Application
Name=mplayer scaletempo
GenericName=Media Player
X-GNOME-FullName=MPlayer Media Player
Comment=Play movies and songs
Keywords=Player;Capture;Audio;Music;Song;Video;Movie;Film;Clip;DVD;VCD;CD;Disc;DVB;TV;
Icon=mplayer
#TryExec=gmplayer
Exec=/usr/bin/mplayer -af scaletempo %F
Terminal=false
Categories=GTK;AudioVideo;Audio;Video;Player;TV;
MimeType=application/x-cd-image;application/x-cue;application/x-mpegurl;application/mxf;application/x-netshow-channel;application/ogg;application/ram;application/vnd.adobe.flash.movie;application/vnd.apple.mpegurl;application/vnd.rn-realmedia;application/x-shockwave-flash;application/smil;audio/aac;audio/ac3;audio/x-adpcm;audio/x-aiff;audio/AMR;audio/AMR-WB;audio/x-ape;audio/basic;audio/flac;audio/x-flac;audio/x-flac+ogg;audio/x-m4b;audio/x-matroska;audio/mp2;audio/mp4;audio/mpeg;audio/x-mpegurl;audio/x-ms-asx;audio/x-ms-wma;audio/x-musepack;audio/ogg;audio/vnd.rn-realaudio;audio/x-scpls;audio/x-voc;audio/x-vorbis+ogg;audio/x-wav;audio/x-wavpack;video/3gpp;video/3gpp2;video/dv;video/x-flic;video/x-flv;video/x-matroska;video/mp2t;video/mp4;video/mpeg;video/vnd.mpegurl;video/x-ms-asf;video/x-ms-wmv;video/x-msvideo;video/x-nsv;video/ogg;video/x-ogm+ogg;video/quicktime;video/vnd.rn-realvideo;video/x-theora+ogg;video/webm;x-content/audio-cdda;x-content/audio-dvd;x-content/video-dvd;x-content/video-svcd;x-content/video-vcd;
如果您将其放在文本文件 blah.desktop 中,您就可以从窗口管理器中使用“新”应用程序了。