[ todo ] player version 77

2019/06/12 15:28 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
player todo
@[TOC](目次)


- pause
たいおう?

- sql

c.execute('create table IF NOT EXISTS musics(fullpath PRIMARY KEY, mtime ,title,alubum)'

データの削除
c.execute('DELETE FROM テーブル名')
 列のスパン~treeクラスで実装だな
複数タブが面倒だなあ


---------------
# スライダーの実装

```
actionplay()で

dur=int( p.get_length()/1000 )
  # QAbstractSlider.setRange (self, int min, int max)
self.slider.setRange ( 0 , dur )
self.current['dur']='{}:{}'.format( dur // 60 ,  dur % 60 )

------------
def setaction(self): で

self.slider.valueChanged[int].connect(self.changetime)
self.slider.valueChanged[int].connect(self.slidetime)
self.slider.sliderReleased[int].connect(self.settime)

# こっちか??
sliderReleased() Emitted when the user releases the slider. 
------------

# 受けの関数
def changetime(self, time):
self.p.set_time( time*1000 )
def slidetime(self, time):
 self.time.setText( '{}:{}/{}'format(time // 60 , time % 60 , self.current['dur']

def settime(self,time) :
 if self.p.is_playing() :
 self.p.set_time( time*1000 )

```

- 経過時間表示
```
def monitoring(self):
if self.p.is_playing() :
time = int(self.p.get_time()/1000)
self.time.setText( '{}:{}/{}'format(time // 60 , time % 60 , self.current['dur']))
```

----

----
## もろもろ

- リストのクリックでタグ情報を表示
treeclickをコネクトするだけかな?
アルバム行は無視する?
- 画像表示~無かったらフォルダをスキャンすること

- 
- 曲の右クリックからタグエディタに渡して編集させる
- DB更新をメニューに加える
- コンテキストメニュー作り込む必要
- 時間表示これに変えよう  ステータスバーはやめるか!
get_length(self)
 Get the current movie length (in ms). source code  
get_time(self)
 Get the current movie time (in ms). source code  
set_time(self, i_time, b_fast)
 Set the movie time (in ms). source code  
get_position(self)
 Get movie position as percentage between 0.0 and 1.0. 

---------

-------------
## タグ無しの場合にファイル名をタイトルとする件
書くのは簡単だと思うけど、根本部分の書き直しだとまた10分くらいかかるな
①コードを書き直し
②DBからタイトルが?のものを削除
③更新を実行
これで少し早くできるか??
まず件数をcontしてみるか

-----
# DBとの結合

①DB.pyとDBそのものを viewer.py にコピー
②DBのパスを書き換え
  fname=os.path.join(os.path.dirname(__file__) , 'data.DB')
③本体に機能追加


def dbrefresh():
 fname=os.path.join(os.path.dirname(__file__) , 'data.py')
 cmd= 'python' , fname
 p1 = subprocess.Popen( cmd ) 

 << message >>


# DB 更新ルーチン
```
def actionDBrefresh():
  起動(終了待ち)
 終了したら更新するかどうかを聞く
 するならこのコード

def treeload
 if self.model :
  del self.model   
 line='select artist ,album,title ,path from  musics order by artist ,album,title'
 self.model=self.sqlexecute(line)
 self.ui.treeView.setModel(self.model)  # tree

ここ差し替えだな
__init__

  line='select artist ,album,title ,path from  musics order by artist ,album,title'
  self.model=self.sqlexecute(line)
  self.ui.treeView.setModel(self.model)  # tree

  self.model=None
  self.treeload()
```


----------
## リストのアルバム表示ルーチン再検討
A文字列・・・アーチスト+アルバム+-------

--
ドロップ時の処理
 挿入先の行番号を取得
 そこから上に検索してA文字列①を取得

 アルバム行
  A文字列①をまず挿入(分割されるので)
  自分のA文字列②を作成して挿入
  子供のタイトルを取得して下に順次挿入
 タイトル行
  タイトルからA文字列②を作成(親のアルバム行から作成)
  A文字列①と②を比較して同じならpass
   違ったらA文字列①を挿入して②を挿入
  順次タイトル行を下に挿入

--
行削除時の処理
 A文字列
  A文字列以下の下を取得して全て削除
 タイトル
  上に検索してA文字列取得
  A文字列以下の全てが選択されていたらA文字列ごと削除
  残りがあったら選択タイトルのみ削除

-----------------
## コンテキストメニューの作り方あった

https://dungeonneko.hatenablog.com/entry/2017/06/22/151913

右クリックメニューの実装
https://kiwamiden.com/create-right-click-menu-in-qlistview
```
  # これはwidgetの属性
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.contextMenu)

def contextMenu(self, point):
        menu = QtGui.QMenu(self)
         
        for i in range(5):
            action = QtGui.QAction('Menu%s' % i, self)
            menu.addAction(action)
         
        menu.exec_(self.mapToGlobal(point))
```


```
ポイントを引数には出来ないだろう
QPoint  QCursor.pos () [QtGui module]

def dbsubmenu(self,point):
 menu=QtGui.Qmenu(self)
 action = QtGui.QAction('DB_refresh', self)
 < trigger ? >
 menu.addAction(action)
 menu.exec_(self.mapToGlobal(point))
```

- ToolBarにDBのメニューを追加してアクションを上記のようにさらにメニューを出すように書く
DB更新、更新を反映、の二つで良いかな
- 更新は単純に外部スクリプトを呼び出し
その終了を取得してから更新反映ですな
どうやれば終了を取得できるんだろう?
単純に起動すればコンソールが出るからそれでいいかな
新しくモデルを作って現在のモデルと差し替えて古いモデルを破棄する感じかな

----

## 音量について
foobarで低めに設定したデータをvlcで演奏に生かせるのか?

      

目次スライダーの実装もろもろタグ無しの場合にファイル名をタイトルとする件DBとの結合DB 更新ルーチンリストのアルバム表示ルーチン再検討コンテキストメニューの作り方あった音量について

  • pause
    たいおう?

  • sql

c.execute('create table IF NOT EXISTS musics(fullpath PRIMARY KEY, mtime ,title,alubum)'

データの削除
c.execute('DELETE FROM テーブル名')
 列のスパン~treeクラスで実装だな
複数タブが面倒だなあ


スライダーの実装

actionplay()で

dur=int( p.get_length()/1000 )
  # QAbstractSlider.setRange (self, int min, int max)
self.slider.setRange ( 0 , dur )
self.current['dur']='{}:{}'.format( dur // 60 ,  dur % 60 )

------------
def setaction(self): で

self.slider.valueChanged[int].connect(self.slidetime)
self.slider.sliderReleased[int].connect(self.settime)

------------

# 受けの関数
def slidetime(self, time):
 self.time.setText( '{}:{}/{}'format(time // 60 , time % 60 , self.current['dur']

def settime(self,time) :
 if self.p.is_playing() :
 self.p.set_time( time*1000 )

  • 経過時間表示
def monitoring(self):
if self.p.is_playing() :
time = int(self.p.get_time()/1000)
self.time.setText( '{}:{}/{}'format(time // 60 , time % 60 , self.current['dur']))


もろもろ

  • リストのクリックでタグ情報を表示
    treeclickをコネクトするだけかな?
    アルバム行は無視する?

  • 画像表示~無かったらフォルダをスキャンすること

  • 曲の右クリックからタグエディタに渡して編集させる

  • DB更新をメニューに加える

  • コンテキストメニュー作り込む必要

  • 時間表示これに変えよう ステータスバーはやめるか!
    get_length(self)
    Get the current movie length (in ms). source code
    get_time(self)
    Get the current movie time (in ms). source code
    set_time(self, i_time, b_fast)
    Set the movie time (in ms). source code
    get_position(self)
    Get movie position as percentage between 0.0 and 1.0.



タグ無しの場合にファイル名をタイトルとする件

書くのは簡単だと思うけど、根本部分の書き直しだとまた10分くらいかかるな
①コードを書き直し
②DBからタイトルが?のものを削除
③更新を実行
これで少し早くできるか??
まず件数をcontしてみるか


DBとの結合

①DB.pyとDBそのものを viewer.py にコピー
②DBのパスを書き換え
fname=os.path.join(os.path.dirname(file) , 'data.DB')
③本体に機能追加

def dbrefresh():
fname=os.path.join(os.path.dirname(file) , 'data.py')
cmd= 'python' , fname
p1 = subprocess.Popen( cmd )

<< message >>

DB 更新ルーチン

def actionDBrefresh():
  起動(終了待ち)
 終了したら更新するかどうかを聞く
 するならこのコード

def treeload
 if self.model :
  del self.model   
 line='select artist ,album,title ,path from  musics order by artist ,album,title'
 self.model=self.sqlexecute(line)
 self.ui.treeView.setModel(self.model)  # tree

ここ差し替えだな
__init__

  line='select artist ,album,title ,path from  musics order by artist ,album,title'
  self.model=self.sqlexecute(line)
  self.ui.treeView.setModel(self.model)  # tree

  self.model=None
  self.treeload()

リストのアルバム表示ルーチン再検討

A文字列・・・アーチスト+アルバム+-------

--
ドロップ時の処理
 挿入先の行番号を取得
 そこから上に検索してA文字列①を取得

アルバム行
  A文字列①をまず挿入(分割されるので)
  自分のA文字列②を作成して挿入
  子供のタイトルを取得して下に順次挿入
 タイトル行
  タイトルからA文字列②を作成(親のアルバム行から作成)
  A文字列①と②を比較して同じならpass
   違ったらA文字列①を挿入して②を挿入
  順次タイトル行を下に挿入

--
行削除時の処理
 A文字列
  A文字列以下の下を取得して全て削除
 タイトル
  上に検索してA文字列取得
  A文字列以下の全てが選択されていたらA文字列ごと削除
  残りがあったら選択タイトルのみ削除


コンテキストメニューの作り方あった

https://dungeonneko.hatenablog.com/entry/2017/06/22/151913

右クリックメニューの実装
https://kiwamiden.com/create-right-click-menu-in-qlistview

  # これはwidgetの属性
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.contextMenu)

def contextMenu(self, point):
        menu = QtGui.QMenu(self)
         
        for i in range(5):
            action = QtGui.QAction('Menu%s' % i, self)
            menu.addAction(action)
         
        menu.exec_(self.mapToGlobal(point))
ポイントを引数には出来ないだろう
QPoint  QCursor.pos () [QtGui module]

def dbsubmenu(self,point):
 menu=QtGui.Qmenu(self)
 action = QtGui.QAction('DB_refresh', self)
 < trigger ? >
 menu.addAction(action)
 menu.exec_(self.mapToGlobal(point))
  • ToolBarにDBのメニューを追加してアクションを上記のようにさらにメニューを出すように書く
    DB更新、更新を反映、の二つで良いかな
  • 更新は単純に外部スクリプトを呼び出し
    その終了を取得してから更新反映ですな
    どうやれば終了を取得できるんだろう?
    単純に起動すればコンソールが出るからそれでいいかな
    新しくモデルを作って現在のモデルと差し替えて古いモデルを破棄する感じかな

音量について

foobarで低めに設定したデータをvlcで演奏に生かせるのか?