[ todo ] player version 117
player todo
@[TOC](目次)
# 実験 まずリストを取得
①コンテキストメニューに加えてから、検索無しのフルの状態と検索後の10行くらいの状態で実験
def test():
list= self.ui.treeView.persistentIndexList()
print(len(list))
②1500くらいならトップレベルのみって事になる
```
def searchmodeldate(self,list,target): # 再帰的に書きたいよね
for l_1 in list: # artist
if self.ui.treeView.model().hasChildren(l_1):
for l_2 in range(l_1.rows()): # album
if self.ui.treeView.model().hasChildren(l_2):
for l_3 in range(l_2.rows()): # title
if self.ui.treeView.model().index(0,1,l_3).data() == target : #
print('hit')
return l_3
```
③30000あれば全インデックスだから、リストをイテレータにして検索すれば簡単
for l in list:
if self.ui.treeView.model().data(l) == '' :
print('hit')
break
# リストの更新
・タグを書き換えても自動では反映されない仕様なので、手動で実装してみる
・DBとはもともと独立してるから、mtagenでスキャンして再設定することになる
・変更するのはタイトルとアルバム行だけだから簡単かな??
・まずはタイトル行だけならすごく簡単だ、DB作成ルーチンをそのまま持ってくれば良いような?
・リストのアルバム行を選択してコンテキストで実行させよう
----------
# ツリーのDB更新時の扱い
- リロードルーチン
①現在のtreeの選択行のファイル名を取得
無ければ直下のファイル名
②DBリロード
③検索ボックス反映
④旧選択ファイル名を検索して選択
- ①と④を新たに実装するだけだよね
---
①まず既存のreloadの順番を逆にして実験
②本体にtreeselectを実装
③reloadにコード追加
④リストにコンテキスト追加
```
# DBreload に付加する
# treeの選択行を取得しておく
selected='' # 選択行のファイル名
index=self.ui.tree.selectedIndexes() # リストで返る
if len(index)==1 : # album or artist
if index[0].parent().data(): # album
selected = index[0].child(0, 1).data() # 最初の子供のファイルを取得
else : # artist
# messagebox
pass # ignore --> '' のまま
elif len(index) > 1 : # title 違う場合もあるなあ
selected = index[1].data()
else : # 選択無しもあるよなあ
pass
<既存のreloadルーチン>
<検索語の取得検索ルーチン>
self.treeselect(selected)
-------------------------------------------------------
現在のモデルからファイルを選択してそのインデクスを選択する
# 本体で実装
def treeselect(self,fname): # ファイル名からtreeのアイテムを選択する
targetitem = self.ui.tree.model().findItems(fname,Qt.MatchExactly,1)[0] # リストの一番目
self.ui.tree.setCurrentIndex(targetitem)
# self.ui.tabWidget.widget(r[1][1]).setCurrentIndex( self.ui.tabWidget.widget(r[1][1]).model().index(p,0))
# delrow=self.current['p_list'].model().findItems('▶',Qt.MatchExactly,1)[0].row()
```
- sqlView_mylist のクラスで実装
```
# init
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.listmenu)
# def
def listmenu(self ,e):
menu=QMenu(self)
action = QAction('openfolder', self)
action.triggered.connect(self.openfolder)
menu.addAction(action)
action = QAction('select in tree', self)
action.triggered.connect(self.selecttree)
menu.addAction(action)
menu.addSeparator()
menu.exec_(QCursor.pos ())
def openfolder(self,e):
pass
def selecttree(self,e)
pass
```
----
# もろもろ
- コンテキストメニューは別ファイルにしたいなあ
- リストを作成するときに親を渡して記憶させておくか
- winの再生キーを取得したい
グローバルな感じだが??
- リストへの外部ファイルドロップ
・DDを受け付けること
・対象ファイルをmutagenしてタイトル行とアルバム行を作ればOK
・別にしたリストの派生クラスファイルに実装するか
_
- リストのコンテキスト
フォルダを開く、**treeで表示**
- リストのキー受け付け up down
keypresevent に対して行選択を変更するだけ
今はdellキーに対応してるから増やすだけで良いような?
- コンテキスト
曲をタグエディタに直接渡す
- スライダー
・キー対応
-------------
# タグ無しの場合にファイル名をタイトルとする件
書くのは簡単だと思うけど、根本部分の書き直しだとまた10分くらいかかるな
①コードを書き直し
②DBからタイトルが?のものを削除
③更新を実行
これで少し早くできるか??
まず件数をcontしてみるか
-----
----------
# 音量について
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)
目次実験 まずリストを取得リストの更新ツリーのDB更新時の扱いもろもろタグ無しの場合にファイル名をタイトルとする件音量についてcueシートリプレイゲインPython データの保存 pickle
実験 まずリストを取得
①コンテキストメニューに加えてから、検索無しのフルの状態と検索後の10行くらいの状態で実験
def test():
list= self.ui.treeView.persistentIndexList()
print(len(list))
②1500くらいならトップレベルのみって事になる
def searchmodeldate(self,list,target): # 再帰的に書きたいよね
for l_1 in list: # artist
if self.ui.treeView.model().hasChildren(l_1):
for l_2 in range(l_1.rows()): # album
if self.ui.treeView.model().hasChildren(l_2):
for l_3 in range(l_2.rows()): # title
if self.ui.treeView.model().index(0,1,l_3).data() == target : #
print('hit')
return l_3
③30000あれば全インデックスだから、リストをイテレータにして検索すれば簡単
for l in list:
if self.ui.treeView.model().data(l) == '' :
print('hit')
break
リストの更新
・タグを書き換えても自動では反映されない仕様なので、手動で実装してみる
・DBとはもともと独立してるから、mtagenでスキャンして再設定することになる
・変更するのはタイトルとアルバム行だけだから簡単かな??
・まずはタイトル行だけならすごく簡単だ、DB作成ルーチンをそのまま持ってくれば良いような?
・リストのアルバム行を選択してコンテキストで実行させよう
ツリーのDB更新時の扱い
- リロードルーチン
①まず既存のreloadの順番を逆にして実験
もろもろ
-
コンテキストメニューは別ファイルにしたいなあ
-
リストを作成するときに親を渡して記憶させておくか
-
winの再生キーを取得したい
グローバルな感じだが?? -
リストへの外部ファイルドロップ
・DDを受け付けること
・対象ファイルをmutagenしてタイトル行とアルバム行を作ればOK
・別にしたリストの派生クラスファイルに実装するか
_
-
リストのコンテキスト
フォルダを開く、treeで表示 -
リストのキー受け付け up down
keypresevent に対して行選択を変更するだけ
今はdellキーに対応してるから増やすだけで良いような? -
コンテキスト
曲をタグエディタに直接渡す -
スライダー
・キー対応
タグ無しの場合にファイル名をタイトルとする件
書くのは簡単だと思うけど、根本部分の書き直しだとまた10分くらいかかるな
①コードを書き直し
②DBからタイトルが?のものを削除
③更新を実行
これで少し早くできるか??
まず件数をcontしてみるか
音量について
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をリストに書き出したら保存できるだろう
各種設定も辞書化すれば保存できると、思う
やってみるか??