以编程方式实时更改播放速度(不是音调)

以编程方式实时更改播放速度(不是音调)

我正在寻找一种能够再现音频文件(如果可能的话,wav 和 mp3)并提供一种实时、完美地改变播放速度的方法的软件。我的意思是,没有任何间隙、爆裂声或噪音。就像采样时钟平滑地改变一样。

我对保持音调恒定不感兴趣(就像这个问题:更慢或更快地播放声音文件)。相反,音高必须遵循新的速度。

我需要以编程方式更改速度,例如从原始速度的 20% 更改为 200%。

有没有什么东西已经准备好了,而无需重新发明轮子?

答案1

mplayer可以播放wav和文件,并且您可以使用 键和mp3交互地更改速度,但 wav 文件的播放速度不能低于其原始速度。可以做同样的事情并设法减慢文件速度。更快的速度会提高频率。[]vlcwav

答案2

您可以使用mplayer -af scaletempo -speed 0.5 filename.mp3更改播放速度而不更改音频音调

如果您想实时更改速度(从命令行调用 mplayer 后),您必须在中创建运行播放器从机模式

参考:

  1. https://stackoverflow.com/questions/36867732/slave-mode-mplayer-pipe
  2. https://stackoverflow.com/questions/15856922/python-send-command-to-mplayer-under-slave-mode

https://github.com/ankitects/anki/blob/484377b8091179504b21b29be1de6925c70af4bd/qt/aqt/sound.py#L374-L404

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 中,您就可以从窗口管理器中使用“新”应用程序了。

相关内容