🗐 電装工芸日記 - 舞台照明機器の製作とか -

能登半島地震で被災された方々にお見舞い申し上げます。

or 管理画面へ

No.650

Icon of admin
 python-vlc で音源を流す試験をしました。
 単に再生するだけなら簡単。
 ちょっと難儀したのは再生終了を確定する処理。再生後自動的にリセットされませんので、再生が終了したことを確認して後処理をしないといけません。
 vlc.MediaPlayer.is_playing()は再生中かどうかを把握出来ますが、これだけでは再生が終了したフェーズかわかりません。オレフラグ(下記ではis_playing)を併用して再生前か再生後かを判別します。再生後ならstop()を実行します。きちんとstop()しないともう一度再生が出来ないpython-vlc。
 下記は再生終了を確定する試験として繰り返し再生するモノです。

# -*- coding: utf-8 -*-

import time
import vlc

def play() :
 # 音声ファイルを定義
 play_music = ( [ vlc.MediaPlayer() ] )
 try :
  play_music[0].set_mrl( 'C:/音源.mp3' )
 except :
  return -1
 # 再生ボリューム設定
 play_music[0].audio_set_volume( 60 )
 # フラグ定義
 is_playing = 0  # 再生実行済みフラグ

 # Main Loop
 while True :
  try :
   # 予備睡眠
   time.sleep( 0.0001 )  # Ctl-Cの反応を良くするのに少しsleepを入れるといい
   # 停止中
   if( play_music[0].is_playing() == 0 ) :
    # 未開始で停止中
    if( is_playing == 0 ) :
     play_music[0].play()
     while ( play_music[0].is_playing() == 0 ) : # 再生状態が確定するまで待つ
      time.sleep( 0.001 )
     play_music[0].set_time( 0 )
     is_playing = 1
    # 再生終了で停止中
    else :   # if( is_playing == 1 ) :
     play_music[0].stop()  # 再生終了を宣言してインスタンスをリセットする 主にこれをやりたいがための処理
     is_playing = 0
   # 再生中
   else :
    pass   # 再生中に行う処理は書いていないのでとりあえずpass

  # Ctl-Cで終了
  except KeyboardInterrupt :
   play_music[0].stop()
   break
 return 0

if __name__ == "__main__" :
 play()



 python-vlc便利過ぎ。

追記
 vlc.MediaPlayer.get_length()とvlc.MediaPlayer.get_time()を使って再生が最後まで行ったかチェックしました。
 何曲か試しましたが、概ねlengthの-0.1~-0.2秒で終了しています。vlc.MediaPlayer.get_time()は取得単位の1msecで厳密にカウントされているモノでも無さそうなので表示上の誤差かもしれません。トラック別で音繋がり場合は少し不安がありますが、音のお尻には1-2秒の余白があるのが一般的ですし、そこまで突き詰めるシステムではありませんのでいいかなと。
 画面作りをやって LTC Generator と合わせれば完成が見えてきそうです。
 ウィンドウマネージャーはPython標準のtkinterを使う勉強をしています。書式は違いますが、考え方はHTMLとCSSを使ったweb画面作りに酷似していますので、方言的に翻訳が出来れば何とかなりそうです。ただ、ボタン操作や画面の更新をオブジェクト指向のイベント処理(割り込み)で書くので少し面倒ですし、LTC Generator の制御やvlcの部分はバックグラウンドの常駐処理にしたいのでウィンドウ制御とは別スレッドとなり手間がかかるかも。

#Python #タイムコード

■当面の課題

桜のライトアップの季節です。花粉症の季節でもあります。
自分は平気ですが、花粉症の部下は死にそうな顔をしています。

編集

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2023年6月
123
45678910
11121314151617
18192021222324
252627282930

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年5月4日(土) 05時49分51秒