見出し画像

音源再生ライブラリ書き換え(5)

前回、音源の再生。

再生中の音源ファイルの再生位置posを求めるために、playの実行開始と同時にtimeモジュールtime関数で時刻を記録して、posプロパティが呼び出された時の時刻と開始時刻の差を再生位置posとする、というようなやり方をしました。自分でもなんだか「邪道」という気がしていましたよ(^_^;)
 そして後から気が付いたのですが、sounddeviceのStreamには

timeプロパティがあるわけです。
でStreamは、sd.Stream()とやれば求められる。

なら、timeモジュールはつかわないで、sd.Stream().time
を呼ぶべきでしょうね。

というわけで、MyPlayerクラスのplay とstop と pos は

    def play(self):
        if not self.is_playing:
            self.playstarttime = sd.Stream().time
            Thread(target=self.play_audio).start()

    def stop(self):
        if self.is_playing:
            sd.stop()
            self.playstarttime = None

    @property
    def pos(self):
        if self.is_playing:
            return sd.Stream().time - self.playstarttime
        else:
            return None

と書き換えました。これはこれで問題なく動いています。

うーん、今回もあまり進捗が無くてもどかしい。

また、Copilotに聞いてみます。

当方が避けた、timeモジュールの利用を勧めてきましたね。

このコードそのまま実行したらエラーが出たのでエラーメッセージをコピペして「どうにかしてー」と泣きつくと(^_^;)

ちょっとよさそうだったので、sample.mp3に「残業戦士」を入れて、パラメータを少し変更して実行してみると

なるほど、今度はエラーにならず、pauseと同じところからの再開ができているのが確認できました。じゃあ、これを読み解いて・・・と思いましたが眠くなってきたので今日はおしまい。

いいなと思ったら応援しよう!