音源再生ライブラリ書き換え(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と同じところからの再開ができているのが確認できました。じゃあ、これを読み解いて・・・と思いましたが眠くなってきたので今日はおしまい。