파이썬 모스크의 첫 뮤직비디오 연속 재생 - 노래 목록 스크롤 -
17177 단어 BlueStacksPython
개시하다
파이썬의 장르를 독학하기 위해 저는 스크스터의 뮤직비디오 연속 재생 기능을 선택했습니다. 그러나 완성된 프로그램은 뮤직비디오의 순환 재생만 있지만 실제로는 한 곡만 재생할 수 없습니다. 연속 재생 기능이라기보다는 너무 거칠습니다.
이번에는 재생이 끝난 후 곡 리스트를 아래로 보내는 동작을 시도해 봤다.
마지막 기사: 첫 파이썬 스타의 뮤직비디오를 연속으로 들려드리도록 하겠습니다.
설계
위와 같은 이미지의 레드박스 안쪽을 클릭하면 곡을 보낼 수 있지만, 곡 일람을 보면 곡마다 공통점이 완전히 다르고, 공통분으로 사용할 수 있는 범위도 다른 곡과 겹치기 때문에 유일한 부분을 선택하기가 어려울 것 같다.
여기서 화면에서 고유한 부분의 좌표를 가져온 다음 Offset 부분을 더한 좌표를 클릭합니다.
위 그림의 파란색 상자로 둘러싸인 부분을 대상으로 합니다.
소스 코드
pydef.py# coding:utf-8
MAIN_PATH:str=".\\MVPlay\\"
FILE_TYPE:str="*.png"
#引数用定数
FILES:int=0
FILEEVENTS:int=1
WAITTIME:int=2
#X,Y座標取得用定数
X:int=0
Y:int=1
#イベント定義用定数
CLICK:int=0
SWIPE:int=1
RECURE:int=2
EXIT:int=3
#ファイルイベント用定数
FILE:int=0
EVENT:int=1
ARG1:int=2
ARG2:int=3
ARG3:int=4
#ファイルイベントを定義
FILEEVENTS_MAIN:list=[
#ファイル名とマッチした画像の時、座標が指定された値分Offsetされた位置をクリックする
[".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
]
pyfunc.py# coding:utf-8
from pydef import*
#ファイルイベントを取得
def getFileEvent(fn:str,fev):
for tmpl in fev:
if tmpl[FILE]==fn:
return tmpl
return None
#画像認識が成功する度増え続け、全てのファイルが終わったら最初に戻る
def sequentialCount(i:int,maxcount:int):
if i>=maxcount:
return 0
else:
return i+1
main.py# coding:utf-8
import pyautogui
import glob
import time
from pydef import*
from pyfunc import*
#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
#受け取ったファイルリストとファイルイベントリストを元に
#イベントを実行し続ける
def main(arg:list):
i:int=0
while True:
#画像認識チェック
loc=pyautogui.locateCenterOnScreen(arg[FILES][i])
if not(loc==None):
time.sleep(arg[WAITTIME])
#ファイルイベント実行
fileEvent(getFileEvent(arg[FILES][i],arg[FILEEVENTS]),loc)
i=sequentialCount(i,len(arg[FILES])-1)
time.sleep(arg[WAITTIME])
flist=glob.glob(MAIN_PATH+FILE_TYPE)
main([flist,FILEEVENTS_MAIN,0.5])
지난번과 비교하면 한꺼번에 길어졌지만 거의 상수적인 선언이었다.
간단한 설명
pydef.py [".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
이 정의는'.\MVPlay\03 scroll.png'과 같은 이름의 파일을 읽을 때 이미지 인식에 일치하는 X 좌표와 Y 좌표에 각각 220620을 추가하고 클릭한다는 뜻이다.
main.py#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
파일에 정의된 이벤트는 새로 추가된 fileEvent 함수를 통해 처리됩니다.
CLICK 이외의 활동이 필요할 수 있기 때문에 지금은 특별한 의미가 없다.
총평가
이렇게 되면 뮤직비디오 버튼→재생 버튼→뮤직비디오를 틀고 곡 리스트 화면으로 돌아간 뒤 다음 곡으로 이동하는 일련의 작업이 자동화된다.
이번에 팀에서 생각한 것은list가 너무 편리하다는 것이다. 듣기도 잘 모르겠지만 만져보면 실감이 나고 파일 활동이 정의된 곳에서 호출 함수를 호출하는 디자인도 재미있다.
최후
곡 리스트의 모빌리티 기능으로 인해 자신의 이상에 가까운 연속 재생에 가까워진 느낌은 들었지만, 아직 미완성 곡과 뮤직비디오가 실장되지 않은 곡에서 재생을 중단하는 문제가 남아있다.
이어서 이 문제를 해결하고 싶다.
Reference
이 문제에 관하여(파이썬 모스크의 첫 뮤직비디오 연속 재생 - 노래 목록 스크롤 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kznSk2/items/e9e2779b445389181dd4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
위와 같은 이미지의 레드박스 안쪽을 클릭하면 곡을 보낼 수 있지만, 곡 일람을 보면 곡마다 공통점이 완전히 다르고, 공통분으로 사용할 수 있는 범위도 다른 곡과 겹치기 때문에 유일한 부분을 선택하기가 어려울 것 같다.
여기서 화면에서 고유한 부분의 좌표를 가져온 다음 Offset 부분을 더한 좌표를 클릭합니다.
위 그림의 파란색 상자로 둘러싸인 부분을 대상으로 합니다.
소스 코드
pydef.py# coding:utf-8
MAIN_PATH:str=".\\MVPlay\\"
FILE_TYPE:str="*.png"
#引数用定数
FILES:int=0
FILEEVENTS:int=1
WAITTIME:int=2
#X,Y座標取得用定数
X:int=0
Y:int=1
#イベント定義用定数
CLICK:int=0
SWIPE:int=1
RECURE:int=2
EXIT:int=3
#ファイルイベント用定数
FILE:int=0
EVENT:int=1
ARG1:int=2
ARG2:int=3
ARG3:int=4
#ファイルイベントを定義
FILEEVENTS_MAIN:list=[
#ファイル名とマッチした画像の時、座標が指定された値分Offsetされた位置をクリックする
[".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
]
pyfunc.py# coding:utf-8
from pydef import*
#ファイルイベントを取得
def getFileEvent(fn:str,fev):
for tmpl in fev:
if tmpl[FILE]==fn:
return tmpl
return None
#画像認識が成功する度増え続け、全てのファイルが終わったら最初に戻る
def sequentialCount(i:int,maxcount:int):
if i>=maxcount:
return 0
else:
return i+1
main.py# coding:utf-8
import pyautogui
import glob
import time
from pydef import*
from pyfunc import*
#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
#受け取ったファイルリストとファイルイベントリストを元に
#イベントを実行し続ける
def main(arg:list):
i:int=0
while True:
#画像認識チェック
loc=pyautogui.locateCenterOnScreen(arg[FILES][i])
if not(loc==None):
time.sleep(arg[WAITTIME])
#ファイルイベント実行
fileEvent(getFileEvent(arg[FILES][i],arg[FILEEVENTS]),loc)
i=sequentialCount(i,len(arg[FILES])-1)
time.sleep(arg[WAITTIME])
flist=glob.glob(MAIN_PATH+FILE_TYPE)
main([flist,FILEEVENTS_MAIN,0.5])
지난번과 비교하면 한꺼번에 길어졌지만 거의 상수적인 선언이었다.
간단한 설명
pydef.py [".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
이 정의는'.\MVPlay\03 scroll.png'과 같은 이름의 파일을 읽을 때 이미지 인식에 일치하는 X 좌표와 Y 좌표에 각각 220620을 추가하고 클릭한다는 뜻이다.
main.py#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
파일에 정의된 이벤트는 새로 추가된 fileEvent 함수를 통해 처리됩니다.
CLICK 이외의 활동이 필요할 수 있기 때문에 지금은 특별한 의미가 없다.
총평가
이렇게 되면 뮤직비디오 버튼→재생 버튼→뮤직비디오를 틀고 곡 리스트 화면으로 돌아간 뒤 다음 곡으로 이동하는 일련의 작업이 자동화된다.
이번에 팀에서 생각한 것은list가 너무 편리하다는 것이다. 듣기도 잘 모르겠지만 만져보면 실감이 나고 파일 활동이 정의된 곳에서 호출 함수를 호출하는 디자인도 재미있다.
최후
곡 리스트의 모빌리티 기능으로 인해 자신의 이상에 가까운 연속 재생에 가까워진 느낌은 들었지만, 아직 미완성 곡과 뮤직비디오가 실장되지 않은 곡에서 재생을 중단하는 문제가 남아있다.
이어서 이 문제를 해결하고 싶다.
Reference
이 문제에 관하여(파이썬 모스크의 첫 뮤직비디오 연속 재생 - 노래 목록 스크롤 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kznSk2/items/e9e2779b445389181dd4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# coding:utf-8
MAIN_PATH:str=".\\MVPlay\\"
FILE_TYPE:str="*.png"
#引数用定数
FILES:int=0
FILEEVENTS:int=1
WAITTIME:int=2
#X,Y座標取得用定数
X:int=0
Y:int=1
#イベント定義用定数
CLICK:int=0
SWIPE:int=1
RECURE:int=2
EXIT:int=3
#ファイルイベント用定数
FILE:int=0
EVENT:int=1
ARG1:int=2
ARG2:int=3
ARG3:int=4
#ファイルイベントを定義
FILEEVENTS_MAIN:list=[
#ファイル名とマッチした画像の時、座標が指定された値分Offsetされた位置をクリックする
[".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
]
# coding:utf-8
from pydef import*
#ファイルイベントを取得
def getFileEvent(fn:str,fev):
for tmpl in fev:
if tmpl[FILE]==fn:
return tmpl
return None
#画像認識が成功する度増え続け、全てのファイルが終わったら最初に戻る
def sequentialCount(i:int,maxcount:int):
if i>=maxcount:
return 0
else:
return i+1
# coding:utf-8
import pyautogui
import glob
import time
from pydef import*
from pyfunc import*
#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
#受け取ったファイルリストとファイルイベントリストを元に
#イベントを実行し続ける
def main(arg:list):
i:int=0
while True:
#画像認識チェック
loc=pyautogui.locateCenterOnScreen(arg[FILES][i])
if not(loc==None):
time.sleep(arg[WAITTIME])
#ファイルイベント実行
fileEvent(getFileEvent(arg[FILES][i],arg[FILEEVENTS]),loc)
i=sequentialCount(i,len(arg[FILES])-1)
time.sleep(arg[WAITTIME])
flist=glob.glob(MAIN_PATH+FILE_TYPE)
main([flist,FILEEVENTS_MAIN,0.5])
pydef.py
[".\\MVPlay\\03scroll.png",CLICK,[220,630],None,None]
이 정의는'.\MVPlay\03 scroll.png'과 같은 이름의 파일을 읽을 때 이미지 인식에 일치하는 X 좌표와 Y 좌표에 각각 220620을 추가하고 클릭한다는 뜻이다.main.py
#イベントに対応した処理を実行
#main関数を再帰的に呼び出すのでpyfuncではなくmainに記述
def fileEvent(arg:list,loc:list):
#何もないときはクリック
if arg==None:
pyautogui.click(loc[X],loc[Y])
#クリックイベント
elif arg[EVENT]==CLICK:
loc=[x+y for (x,y) in zip(loc,arg[ARG1])]
pyautogui.click(loc[X],loc[Y])
#スワイプイベント
elif arg[EVENT]==SWIPE:
_n=None #未実装
#再帰処理イベント
elif arg[EVENT]==RECURE:
flist=glob.glob(arg[ARG1]+FILE_TYPE)
main([flist,arg[ARG2],arg[ARG3]])
#終了イベント
elif arg[EVENT]==EXIT:
exit()
파일에 정의된 이벤트는 새로 추가된 fileEvent 함수를 통해 처리됩니다.CLICK 이외의 활동이 필요할 수 있기 때문에 지금은 특별한 의미가 없다.
총평가
이렇게 되면 뮤직비디오 버튼→재생 버튼→뮤직비디오를 틀고 곡 리스트 화면으로 돌아간 뒤 다음 곡으로 이동하는 일련의 작업이 자동화된다.
이번에 팀에서 생각한 것은list가 너무 편리하다는 것이다. 듣기도 잘 모르겠지만 만져보면 실감이 나고 파일 활동이 정의된 곳에서 호출 함수를 호출하는 디자인도 재미있다.
최후
곡 리스트의 모빌리티 기능으로 인해 자신의 이상에 가까운 연속 재생에 가까워진 느낌은 들었지만, 아직 미완성 곡과 뮤직비디오가 실장되지 않은 곡에서 재생을 중단하는 문제가 남아있다.
이어서 이 문제를 해결하고 싶다.
Reference
이 문제에 관하여(파이썬 모스크의 첫 뮤직비디오 연속 재생 - 노래 목록 스크롤 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kznSk2/items/e9e2779b445389181dd4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
곡 리스트의 모빌리티 기능으로 인해 자신의 이상에 가까운 연속 재생에 가까워진 느낌은 들었지만, 아직 미완성 곡과 뮤직비디오가 실장되지 않은 곡에서 재생을 중단하는 문제가 남아있다.
이어서 이 문제를 해결하고 싶다.
Reference
이 문제에 관하여(파이썬 모스크의 첫 뮤직비디오 연속 재생 - 노래 목록 스크롤 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kznSk2/items/e9e2779b445389181dd4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)