web-dev-qa-db-ja.com

プログラムで再生速度を(ピッチではなく)リアルタイムで変更する

オーディオファイル(可能であればwavとmp3)を再生し、再生速度をリアルタイムで完璧に変更する方法を提供するソフトウェアを探しています。つまり、ギャップ、ポップ、ノイズはありません。サンプリングクロックのようにスムーズに変化します。

私はピッチを一定に保つことに興味がありません(この質問のように: サウンドファイルを遅くまたは速く再生する )。代わりに、ピッチは新しい速度に従わなければなりません。

プログラムで速度を変更する必要があります。たとえば、元の速度の20%から200%に変更します。

車輪の再発明をせずに、何か準備ができていますか?

3
Mark

mplayerwavおよびmp3ファイルを再生できます。また、キー[および]を使用してインタラクティブに速度を変更できますが、wavファイルは低速で再生できません元の速度よりも。 vlcも同じことができ、wavファイルの速度も低下します。より速い速度は周波数を上げます。

2
meuh

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")
0
user

コマンドラインから速度を設定する必要がある場合は、-speed SPEEDオプションを使用します。

mplayer -speed 0.1 file

注:この速度は、[キーと]キーを使用してリアルタイムで変更できます。

もちろん、mpvでも機能します。

クレジット: https://linuxacademy.com/blog/linux/tutorial-playing-around-with-mplayer/

0
pevik