[ todo ] player version 127

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

--------
- リストからの検索、ファイル名だけにする

- リロード時もファイル名検索だけにする
アーティスト、アルバムを選択している場合は子供の最初のファイル名で検索する仕様にするか

------------
# デレゲート


①ビューにモデルセットしたタイミングでデレゲートをセット
View.setModel(model)
delegate = hogetta()
tableView.setItemDelegate(delegate)
②あとはサブクラス化したデレゲートを書く、ペイントだけ
とりあえずクラスだけ書いてpassしてどうなるか見てみよう
```
QStyledItemDelegate こっちの方が良いような??
QStyledItemDelegate.paint (self, QPainter painter, QStyleOptionViewItem option, QModelIndex index)
QStyleOptionViewItem
    QFont font

class hogetta(QtGui.QItemDelegate):
 
    def paint(self,painter,option,index):
        #通常時の表示
        num = index.data()
        #Barの表示
        #Column 2 の時だけBarを表示する
 
        if index.column() == 0:
            box = QtGui.QStyleOptionComboBox()
            box.rect = option.rect
            box.currentText = str(num)
            QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ComboBoxLabel, box, painter)
 
        if index.column() == 1:
            bar = QtGui.QStyleOptionProgressBar()
            bar.rect = option.rect
            bar.rect.setHeight(option.rect.height() - 1)
            bar.rect.setTop(option.rect.top() + 1)
            bar.minimum = 0
            bar.maximum = 100
            bar.progress = int(num)
            bar.textVisible = True
            bar.text = str(num) + '%'
            bar.textAlignment = QtCore.Qt.AlignCenter
            QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ProgressBar, bar, painter
```


----
コード使えるかな?
http://mukaimame.blog111.fc2.com/blog-entry-952.html

ここを参考に
http://flame-blaze.net/archives/4257



-------
# リストの更新
・タグを書き換えても自動では反映されない仕様なので、手動で実装してみる
・DBとはもともと独立してるから、mtagenでスキャンして再設定することになる
・変更するのはタイトルとアルバム行だけだから簡単かな??
・まずはタイトル行だけならすごく簡単だ、DB作成ルーチンをそのまま持ってくれば良いような?
・リストのアルバム行を選択してコンテキストで実行させよう

----------
# リロードルーチン修正

- pyファイル保存してからにしよう

最初に検索を呼ぶ方が良いけど、制御自体はそのあとのDBリロードが完了しないと戻らないから結局は同じ
DBリロードを別スレッドにするなら意味がある
ここら辺結構ややこしいんだよなあ

検索ボックスのチェックルーチンを作る
英数一文字なら何もしない
```
def isSearchBox(): # true if need search
 ヌルか英数一文字なら false

def makeModel():
# self.modelが既にあれば削除してからDBをロードしてself.model作成する
# isSearchBox()がfalseならモデルにセットする
# スレッド化して呼ぶ
# initからも呼ぶ

def reloadModel():
# watchDogした後に呼ぶ想定
# isSearchBox()ならsearch()する
# そのあとでmakeModel()をスレッドで呼ぶ
```

# thread

クラスの中でメソッドをスレッドで呼ぶ

import threading

class jikkenn():
 def hogeta(self):
   print('2')

 def gothread(self):
  thread = threading.Thread( target= self.hogeta )
  thread.start()


jikkenn().gothread()



----
# もろもろ

- コンテキストメニューは別ファイルにしたいなあ
- リストを作成するときに親を渡して記憶させておくか
- winの再生キーを取得したい
グローバルな感じだが??

- リストへの外部ファイルドロップ
・DDを受け付けること
・対象ファイルをmutagenしてタイトル行とアルバム行を作ればOK
・別にしたリストの派生クラスファイルに実装するか


_
- リストのコンテキスト
フォルダを開く、**treeで表示**

- リストのキー受け付け up down
keypresevent に対して行選択を変更するだけ
今はdellキーに対応してるから増やすだけで良いような?
- コンテキスト
曲をタグエディタに直接渡す
- スライダー
・キー対応
-------------
# タグ無しの場合にファイル名をタイトルとする件

DBからタイトルが?のものを削除
sqllite3 のコンソールで出来そう
そのあと普通に更新
---
- watchdog に対象ファイルを加えて実行したらどうだろう?
あるいは一回削除してゴミ箱から戻すとか
- 変更コードはこんな感じ
スクリプトは二つあるから両方ね
- もし変更日が同じで何もしてくれなかったら、
削除→更新
戻す→更新
- **削除のログも出したい**
削除前にカウント掛けるか??
```
            try:
                title += m['title'][0] 
            except:
                title='?'
```
ここの部分を

```
            try:
                title += m['title'][0] 
            except:
                title=os.path.split(p[0][1]  # ここ
```
こう変えるだけでいいような?
タイトルだけ変えても意味ないのかな?
意味はあるよな


-----




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



# cueシート
どう対応して良いのやら全然わからない
曲の再生は出来るが問題は
・tree表示 cueを解析してtreeに加える事は出来るな
・リスト表示はtree情報を表示するだけだよな
あとは再生か
スライダーを曲単位に設定
曲情報をどこに置くか
vlcにcueを直接渡したらどうなるんだろう?


# リプレイゲイン
この機能が無いとやはり効きづらい
そうなってしまったんだなあ


ReplayGain(リプレイゲイン)と、その対応ソフト
http://reika788.blog.fc2.com/blog-entry-11.html
こうなってるけど対応してなさそうなんだけど??
_
_
_
https://www.olivieraubert.net/vlc/python-ctypes/doc/
タグだから読み込んで自分でボリューム設定してやれば良いの?
libvlc_audio_set_volume(p_mi, i_volume) 

メインボリュームを記録しておいて、それにゲインを加味して曲毎に設定してやれば良い
**のか???**

# Python データの保存 pickle


pickleってのを知ったので使ってみたいんだけど使えない
丁度foobarのaternativeを作っていてプレイリストにQstandardItemModelを使ってるのでpickleしてみたらエラーで怒られた┐('д')┌

foobarのライブラリを実現するためにsqlも使い出したので、sqlで保存したら簡単にイケた
しかし特にデータベースとしての利用は無い保存だけの目的でsqlを利用するのってどうなんだろう?
単にテキストとかcsvで書き出すのとどう違うんだろう?
sqlにしておけばCSVへは変換できたな
プレイリストが複数になって曲も大量になるようだとsqlの安心感が出てくるんだけど

もろもろの設定もsqlのデータベースに保存してしまおうかと思う
ソフトの位置、最後の曲、プレイリストの数など
プレイリストとテーブルは分けるにしても項目に対してデータが一つだけだとsqlじゃないな
こういうのはiniが普通だと思うけど、iniとDBを分けるのも・・・
仕方ないのかな

やはりpickleを使いたい
pickleなら全て一つで保存できそうな
プレイリストに関してはQstandardItemModelをリストに書き出したら保存できるだろう
各種設定も辞書化すれば保存できると、思う

やってみるか??



----
→ [pythonでfoobarのalternativeを作る 目次](https://mimemo.io/m/3kyw8o3neWG6Lrg)

      

目次デレゲートリストの更新リロードルーチン修正threadもろもろタグ無しの場合にファイル名をタイトルとする件DBからタイトルが?のものを削除 sqllite3 のコンソールで出来そう そのあと普通に更新音量についてcueシートリプレイゲインPython データの保存 pickle


  • リストからの検索、ファイル名だけにする

  • リロード時もファイル名検索だけにする
    アーティスト、アルバムを選択している場合は子供の最初のファイル名で検索する仕様にするか


デレゲート

①ビューにモデルセットしたタイミングでデレゲートをセット
View.setModel(model)
delegate = hogetta()
tableView.setItemDelegate(delegate)
②あとはサブクラス化したデレゲートを書く、ペイントだけ
とりあえずクラスだけ書いてpassしてどうなるか見てみよう

QStyledItemDelegate こっちの方が良いような??
QStyledItemDelegate.paint (self, QPainter painter, QStyleOptionViewItem option, QModelIndex index)
QStyleOptionViewItem
    QFont font

class hogetta(QtGui.QItemDelegate):
 
    def paint(self,painter,option,index):
        #通常時の表示
        num = index.data()
        #Barの表示
        #Column 2 の時だけBarを表示する
 
        if index.column() == 0:
            box = QtGui.QStyleOptionComboBox()
            box.rect = option.rect
            box.currentText = str(num)
            QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ComboBoxLabel, box, painter)
 
        if index.column() == 1:
            bar = QtGui.QStyleOptionProgressBar()
            bar.rect = option.rect
            bar.rect.setHeight(option.rect.height() - 1)
            bar.rect.setTop(option.rect.top() + 1)
            bar.minimum = 0
            bar.maximum = 100
            bar.progress = int(num)
            bar.textVisible = True
            bar.text = str(num) + '%'
            bar.textAlignment = QtCore.Qt.AlignCenter
            QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ProgressBar, bar, painter

コード使えるかな?
http://mukaimame.blog111.fc2.com/blog-entry-952.html

ここを参考に
http://flame-blaze.net/archives/4257


リストの更新

・タグを書き換えても自動では反映されない仕様なので、手動で実装してみる
・DBとはもともと独立してるから、mtagenでスキャンして再設定することになる
・変更するのはタイトルとアルバム行だけだから簡単かな??
・まずはタイトル行だけならすごく簡単だ、DB作成ルーチンをそのまま持ってくれば良いような?
・リストのアルバム行を選択してコンテキストで実行させよう


リロードルーチン修正

  • pyファイル保存してからにしよう

最初に検索を呼ぶ方が良いけど、制御自体はそのあとのDBリロードが完了しないと戻らないから結局は同じ
DBリロードを別スレッドにするなら意味がある
ここら辺結構ややこしいんだよなあ

検索ボックスのチェックルーチンを作る
英数一文字なら何もしない

def isSearchBox(): # true if need search
 ヌルか英数一文字なら false

def makeModel():
# self.modelが既にあれば削除してからDBをロードしてself.model作成する
# isSearchBox()がfalseならモデルにセットする
# スレッド化して呼ぶ
# initからも呼ぶ

def reloadModel():
# watchDogした後に呼ぶ想定
# isSearchBox()ならsearch()する
# そのあとでmakeModel()をスレッドで呼ぶ

thread

クラスの中でメソッドをスレッドで呼ぶ

import threading

class jikkenn():
def hogeta(self):
print('2')

def gothread(self):
thread = threading.Thread( target= self.hogeta )
thread.start()

jikkenn().gothread()


もろもろ

  • コンテキストメニューは別ファイルにしたいなあ

  • リストを作成するときに親を渡して記憶させておくか

  • winの再生キーを取得したい
    グローバルな感じだが??

  • リストへの外部ファイルドロップ
    ・DDを受け付けること
    ・対象ファイルをmutagenしてタイトル行とアルバム行を作ればOK
    ・別にしたリストの派生クラスファイルに実装するか

_

  • リストのコンテキスト
    フォルダを開く、treeで表示

  • リストのキー受け付け up down
    keypresevent に対して行選択を変更するだけ
    今はdellキーに対応してるから増やすだけで良いような?

  • コンテキスト
    曲をタグエディタに直接渡す

  • スライダー
    ・キー対応


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

DBからタイトルが?のものを削除
sqllite3 のコンソールで出来そう
そのあと普通に更新

  • watchdog に対象ファイルを加えて実行したらどうだろう?
    あるいは一回削除してゴミ箱から戻すとか
  • 変更コードはこんな感じ
    スクリプトは二つあるから両方ね
  • もし変更日が同じで何もしてくれなかったら、
    削除→更新
    戻す→更新
  • 削除のログも出したい
    削除前にカウント掛けるか??
            try:
                title += m['title'][0] 
            except:
                title='?'

ここの部分を

            try:
                title += m['title'][0] 
            except:
                title=os.path.split(p[0][1]  # ここ

こう変えるだけでいいような?
タイトルだけ変えても意味ないのかな?
意味はあるよな



音量について

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

cueシート

どう対応して良いのやら全然わからない
曲の再生は出来るが問題は
・tree表示 cueを解析してtreeに加える事は出来るな
・リスト表示はtree情報を表示するだけだよな
あとは再生か
スライダーを曲単位に設定
曲情報をどこに置くか
vlcにcueを直接渡したらどうなるんだろう?

リプレイゲイン

この機能が無いとやはり効きづらい
そうなってしまったんだなあ

ReplayGain(リプレイゲイン)と、その対応ソフト
http://reika788.blog.fc2.com/blog-entry-11.html
こうなってるけど対応してなさそうなんだけど??
_
_
_
https://www.olivieraubert.net/vlc/python-ctypes/doc/
タグだから読み込んで自分でボリューム設定してやれば良いの?
libvlc_audio_set_volume(p_mi, i_volume)

メインボリュームを記録しておいて、それにゲインを加味して曲毎に設定してやれば良い
のか???

Python データの保存 pickle

pickleってのを知ったので使ってみたいんだけど使えない
丁度foobarのaternativeを作っていてプレイリストにQstandardItemModelを使ってるのでpickleしてみたらエラーで怒られた┐('д')┌

foobarのライブラリを実現するためにsqlも使い出したので、sqlで保存したら簡単にイケた
しかし特にデータベースとしての利用は無い保存だけの目的でsqlを利用するのってどうなんだろう?
単にテキストとかcsvで書き出すのとどう違うんだろう?
sqlにしておけばCSVへは変換できたな
プレイリストが複数になって曲も大量になるようだとsqlの安心感が出てくるんだけど

もろもろの設定もsqlのデータベースに保存してしまおうかと思う
ソフトの位置、最後の曲、プレイリストの数など
プレイリストとテーブルは分けるにしても項目に対してデータが一つだけだとsqlじゃないな
こういうのはiniが普通だと思うけど、iniとDBを分けるのも・・・
仕方ないのかな

やはりpickleを使いたい
pickleなら全て一つで保存できそうな
プレイリストに関してはQstandardItemModelをリストに書き出したら保存できるだろう
各種設定も辞書化すれば保存できると、思う

やってみるか??


→ pythonでfoobarのalternativeを作る 目次