[ todo ] player version 62
player todo
@[TOC](目次)
- 時間表示の書式
```
time=326.195632
time1=int((time-int(time))*100)
time2='{}:{}.{}'.format(int(time//60),int(time%60),time1)
print(time2)
```
- 実行ファイルのパス
```
import os
print( os.path.dirname(__file__) )
絶対パス
path.abspath(__file__)
join()
```
## 次の曲を演奏するために全体の仕組みを少し変える
- 作業の順番
①def removeplay() を実装、stopで動作確認
②def play を書き換え
③monitoring関係を書き換え
まずタイマーのオールバックを変更してから
④残り全て、autoplayフラグとか
self.autoplay <=== 自動演奏フラグ、初期値は False
タイマールーチンは monitoring にしよう
メニューからplayは消す
def リストのDClick
行取得、ファイル取得、アルバム行なら何もしない
演奏中
removeplay
stop、 play
演奏中で無い
play 、タイマースタート、autoplay=True
def ストップ
removeplay、演奏stop、media解放?、autoplay=False
def monitoring()
isplaying
演奏時間の表示、スライダーの設定
isplaying=NO
次の曲を演奏
removeplay
次の行を取得してファイルを取得して play
(最後の曲なら冒頭に戻る)
def play(file,row)
ファイルをメディアにセットしてplay、▶を表示
def removeplay()
delrow=list.model().findItems('▶',Qt.MatchExactly,1)[0].row()
list.model().setItem(delrow,1,QStandardItem(''))
return delrow
- データ内の検索はこれで簡単にできるのかな??
----
## リストの保存読み込み
import sqlite3 , os
class listsaver():
def __init__()
< make db path >
def save(model):
def load(model):
----------------------------------
<< save routine >>
conn = sqlite3.connect(<pass>)
c = conn.cursor()
< save-routine >
c.execute('create table musiclists(name, title ,path)')
c.execute( "INSERT INTO musiclists (name, title ,path) VALUES (?,?,?)" , (p,q,r))
conn.commit()
conn.close()
----------------------------------
<< load routine >>
conn = sqlite3.connect(<pass>)
c = conn.cursor()
for l in c.execute('select * from musiclists '):
model.appendRow([QStandardItem(l[1]), QStandardItem(''), QStandardItem(l[2]) ])
c.close()
conn.close()
----------------------------------
アルバム行のスパンが必要
----
## もろもろ
-
- 曲の右クリックからタグエディタに渡して編集させる
- 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との結合
本体に完全に取り込むのはやめる方向
・watcdogで監視する必要は無いように思えてきた
・起動時に毎回スキャンし直すのも無駄なような?
・本体に更新ボタンをつけて、終わったらDBを再読み込み
・現在のDB作成pyファイルはそのままにして本体に取り込まない、外部プロセスとして実行する
・DB更新終了のタイミングをどう把握するか??通常15秒程度かかっている
・DB作成pyで、DBファイルのパスを実行ファイル名から獲るようにする
----------
## リストのアルバム表示ルーチン再検討
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))
```
- ToolBarにDBのメニューを追加してアクションを上記のようにさらにメニューを出すように書く
DB更新、更新を反映、の二つで良いかな
- 更新は単純に外部スクリプトを呼び出し
その終了を取得してから更新反映ですな
どうやれば終了を取得できるんだろう?
単純に起動すればコンソールが出るからそれでいいかな
新しくモデルを作って現在のモデルと差し替えて古いモデルを破棄する感じかな
----
## 音量について
foobarで低めに設定したデータをvlcで演奏に生かせるのか?
目次次の曲を演奏するために全体の仕組みを少し変えるリストの保存読み込みもろもろタグ無しの場合にファイル名をタイトルとする件DBとの結合リストのアルバム表示ルーチン再検討コンテキストメニューの作り方あった音量について
- 時間表示の書式
time=326.195632
time1=int((time-int(time))*100)
time2='{}:{}.{}'.format(int(time//60),int(time%60),time1)
print(time2)
- 実行ファイルのパス
import os
print( os.path.dirname(__file__) )
絶対パス
path.abspath(__file__)
join()
次の曲を演奏するために全体の仕組みを少し変える
- 作業の順番
①def removeplay() を実装、stopで動作確認
②def play を書き換え
③monitoring関係を書き換え
まずタイマーのオールバックを変更してから
④残り全て、autoplayフラグとか
self.autoplay <=== 自動演奏フラグ、初期値は False
タイマールーチンは monitoring にしよう
メニューからplayは消す
def リストのDClick
行取得、ファイル取得、アルバム行なら何もしない
演奏中
removeplay
stop、 play
演奏中で無い
play 、タイマースタート、autoplay=True
def ストップ
removeplay、演奏stop、media解放?、autoplay=False
def monitoring()
isplaying
演奏時間の表示、スライダーの設定
isplaying=NO
次の曲を演奏
removeplay
次の行を取得してファイルを取得して play
(最後の曲なら冒頭に戻る)
def play(file,row)
ファイルをメディアにセットしてplay、▶を表示
def removeplay()
delrow=list.model().findItems('▶',Qt.MatchExactly,1)[0].row()
list.model().setItem(delrow,1,QStandardItem(''))
return delrow
- データ内の検索はこれで簡単にできるのかな??
リストの保存読み込み
import sqlite3 , os
class listsaver():
def init()
< make db path >
def save(model):
def load(model):
<< save routine >>
conn = sqlite3.connect(<pass>)
c = conn.cursor()
< save-routine >
c.execute('create table musiclists(name, title ,path)')
c.execute( "INSERT INTO musiclists (name, title ,path) VALUES (?,?,?)" , (p,q,r))
conn.commit()
conn.close()
<< load routine >>
conn = sqlite3.connect(<pass>)
c = conn.cursor()
for l in c.execute('select * from musiclists '):
model.appendRow([QStandardItem(l[1]), QStandardItem(''), QStandardItem(l[2]) ])
c.close()
conn.close()
アルバム行のスパンが必要
もろもろ
-
曲の右クリックからタグエディタに渡して編集させる
-
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との結合
本体に完全に取り込むのはやめる方向
・watcdogで監視する必要は無いように思えてきた
・起動時に毎回スキャンし直すのも無駄なような?
・本体に更新ボタンをつけて、終わったらDBを再読み込み
・現在のDB作成pyファイルはそのままにして本体に取り込まない、外部プロセスとして実行する
・DB更新終了のタイミングをどう把握するか??通常15秒程度かかっている
・DB作成pyで、DBファイルのパスを実行ファイル名から獲るようにする
リストのアルバム表示ルーチン再検討
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))
- ToolBarにDBのメニューを追加してアクションを上記のようにさらにメニューを出すように書く
DB更新、更新を反映、の二つで良いかな - 更新は単純に外部スクリプトを呼び出し
その終了を取得してから更新反映ですな
どうやれば終了を取得できるんだろう?
単純に起動すればコンソールが出るからそれでいいかな
新しくモデルを作って現在のモデルと差し替えて古いモデルを破棄する感じかな
音量について
foobarで低めに設定したデータをvlcで演奏に生かせるのか?