Skip to content

Commit

Permalink
add play list
Browse files Browse the repository at this point in the history
  • Loading branch information
zephyrzoom committed Nov 17, 2015
1 parent fcd1c6e commit 7a7050b
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 191 deletions.
250 changes: 71 additions & 179 deletions douyu/douyu.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import mplay
from tkinter import font
import shutil
from tkinter import messagebox


class my_gui(Frame):
Expand All @@ -28,24 +29,50 @@ def __init__(self, root):


self.mutex = 0
self.m_list = {}
self.m_list = {} # list from search netcloud
self.selected = False
#self.FOLD = r'E:\m\music'
self.FOLD = 'Documents/sublime/danmu_diange/music'







def initUI(self):
self.MUSIC_LIST='Documents/sublime/danmu_diange/douyu_0.0.3/music_list.json'
with open(self.MUSIC_LIST,'r') as f:
self.play_list = json.loads(f.read()) # list from json
self.root.protocol("WM_DELETE_WINDOW", self.on_closing)

mainframe = ttk.Frame(self.root)
bigFont = font.Font(size=20, weight='bold')
self.text = Text(mainframe, bg="white", width=70, height=25, state=DISABLED, font=bigFont)
bigFont = font.Font(size=12, weight='bold')
self.text = Text(mainframe, bg="white", width=50, height=25, state=DISABLED, font=bigFont)
self.lb_play_list=StringVar()
self.lb_play_list.set(self.play_list_4_show())
print(self.play_list)
self.label = ttk.Label(mainframe, textvariable=self.lb_play_list, font=bigFont, width=20)
mainframe.grid(column=0,row=0)
self.text.grid(column=0,row=0)
self.label.grid(column=1, row=0)



def write_text(self, nick, content):
self.text.config(state=NORMAL)
self.text.insert("end",nick+": "+content+"\n")
self.text.config(state=DISABLED)
self.text.yview('end')

def on_closing(self):
if messagebox.askokcancel("Quit", "Do you want to quit?"):
with open(self.MUSIC_LIST,'w') as f:
json.dump(self.play_list, f)
self.root.destroy()



###############################################################################
def is_exit(self):
self.g_exit
Expand Down Expand Up @@ -342,80 +369,6 @@ def main(self,url='http://www.douyutv.com/im707'):

###############################################################################

"""get music name from the danmu
return -1: wrong pattern
str: music name
"""
def get_music_name(self, content):
contents = content.split(' ')
if len(contents) >= 3 and (contents[0] == 'm' or contents[0] == 'M'):
if contents[1] == 'n' or contents[1] == 'N':
return ' '.join(contents[2:])
return -1


"""get select id from the danmu
return selected: a number > 0
-1: wrong pattern
"""
def get_select_id(self,content):
contents = content.split(' ')
if len(contents) >= 3 and (contents[0] == 'm' or contents[0] == 'M'):
if contents[1] == 's' or contents[1] == 'S':
selected = ''.join(contents[2:])
try:
selected = int(selected)
except Exception as e:
return -1
else:
return selected
return -1

"""dian ge
"""

def get_music(self, nick, content):

if self.mutex == 0:
m_name = self.get_music_name(content)
if m_name != -1:
self.mutex = nick
self.m_list = mplay.search_song_by_name(m_name)
if self.m_list == -1:
self.mutex = 0
self.write_text('系统','没有要查的歌曲')
return
else:
self.show_music_list()
self.selected = False
threading.Thread(target=self.time_count, args=([nick, 30])).start()
return

elif nick == self.mutex:
m_select = self.get_select_id(content)
if m_select != -1:
selected_song = mplay.select(m_select, self.m_list)
if selected_song != -1:
self.write_text('系统','歌曲加载中...')
music_path = mplay.save_song_to_disk(selected_song, self.FOLD)
threading.Thread(target=mplay.playmp3, args=([music_path])).start()
self.selected = True
else:
self.write_text('系统','请按照序号选歌')
return
else:
self.write_text('系统','请选歌,注意格式,例如想选第一首:m s 1')
return
self.mutex = 0
else:
self.write_text('系统','请等待 %s 选歌' % self.mutex)


def time_count(self,nick, times):
time.sleep(10)
#print('系统将在30秒后自动播放第一首')
Expand Down Expand Up @@ -457,7 +410,7 @@ def show_music_list(self):
"""
def analysis_danmu(self, nick, content):
self.write_text('测试',str(self.mutex))
#self.write_text('测试',str(self.mutex))
content = content.split(' ')
if content[0] == '点歌':
if self.mutex == 0:
Expand All @@ -470,7 +423,6 @@ def analysis_danmu(self, nick, content):
else:
self.selected = False
self.show_music_list()

threading.Thread(target=self.time_count, args=([nick, 30])).start()
elif self.mutex == nick:
self.selected = True
Expand All @@ -495,11 +447,21 @@ def analysis_danmu(self, nick, content):
song = mplay.select(selected_song, self.m_list)
if song != -1:
self.selected = True
self.write_text('系统','歌曲加载中...')
music_path = mplay.save_song_to_disk(song, self.FOLD)
threading.Thread(target=mplay.playmp3, args=([music_path])).start()
self.write_text('系统','歌曲开始播放')
self.mutex = 0
music_path = mplay.save_song_to_disk(song, self.FOLD)
# add to list
print(music_path)
print(self.play_list)
self.play_list['music list'].append({'id':nick,'mname':song['name'],'mpath':music_path})
self.lb_play_list.set(self.play_list_4_show())
# with open(self.MUSIC_LIST, 'w') as f:
# json.dump(m_list, f)
print(self.play_list['music list'][-1])

# with open(self.MUSIC_LIST, 'r') as f:
# m_list = json.loads(f.read())
# self.write_text('song',m_list['music list'][1]['mname'])

else:
self.write_text('系统','%s 请按照序号选歌' % nick)
except:
Expand All @@ -509,108 +471,38 @@ def analysis_danmu(self, nick, content):
else:
pass

def play_mp3(self):
while 1:
while self.play_list['music list']:
p = mplay.playmp3(self.play_list['music list'][0]['mpath'])
# while not p.returncode:
# print(p)
# time.sleep(5)
self.f5_list()
self.lb_play_list.set(self.play_list_4_show()) # refresh play list
print(self.play_list)
else:
time.sleep(10)# no music play, wait for sb diange

# def analysis_danmu(self, nick, content):
# content = content.split(' ')
# if self.mutex == 0:
# if content[0] == '点歌':
# self.mutex = nick
# song_name = ''.join(content[1:])
# self.m_list = mplay.search_song_by_name(song_name)
# if self.m_list == -1:
# self.mutex = 0
# self.write_text('系统','%s 没有您要点的歌' % nick)
# else:
# self.selected = False
# self.show_music_list()
# threading.Thread(target=self.time_count, args=([nick, 30])).start()
# elif content[0] == '选歌':
# self.write_text('系统','%s 请先点歌' % nick)
# elif self.mutex == nick:
# if content[0] == '点歌':
# self.selected = True
# song_name = ''.join(content[1:])
# self.m_list = mplay.search_song_by_name(song_name)
# if self.m_list == -1:
# self.mutex = 0
# self.write_text('系统','%s 没有您要点的歌' % nick)
# else:
# self.selected = False
# self.show_music_list()
# threading.Thread(target=self.time_count, args=([nick, 30])).start()
# elif content[0] == '选歌':
# selected_song = ''.join(content[1:])
# try:
# selected_song = int(selected_song)
# song = mplay.select(selected_song, self.m_list)
# if song != -1:
# self.selected = True
# self.write_text('系统','歌曲加载中...')
# music_path = mplay.save_song_to_disk(selected_song, self.FOLD)
# threading.Thread(target=mplay.playmp3, args=([music_path])).start()
# self.mutex = 0
# else:
# self.write_text('系统','%s 请按照序号选歌' % nick)
# except:
# self.write_text('系统', '%s 请注意选歌格式' % nick)
# else:
# if content[0] == '点歌' or content[0] == '选歌':
# self.write_text('系统','%s 请等待 %s 选歌' % ([nick, self.mutex]))
# else:
# pass



# def analysis_danmu(self, nick, content):
# content=content.split(' ')
# if (self.mutex == 0 and content[0] == '点歌') or (self.mutex == nick and content[0] == '点歌'): #第一次点歌
# self.mutex = nick
# song_name = ''.join(content[1:])
# self.m_list = mplay.search_song_by_name(song_name)
# if self.m_list == -1:
# self.mutex = 0 #别人可以点歌
# self.write_text('系统','没有您要点的歌')
# else:
# self.show_music_list()
# self.selected = False
# threading.Thread(target=self.time_count, args=([nick, 30])).start()
# return None
# elif self.mutex == nick and content[0] == '选歌':
# selected_song = ''.join(content[1:])
# try:
# selected_song = int(selected_song)
# song = mplay.select(selected_song, self.m_list)
# if song != -1:
# self.selected = True
# self.write_text('系统','歌曲加载中...')
# music_path = mplay.save_song_to_disk(selected_song, self.FOLD)
# threading.Thread(target=mplay.playmp3, args=([music_path])).start()
# self.mutex = 0
# else:
# self.write_text('系统','请按照序号选歌')
# except:
# self.write_text('系统', '请注意格式')
# elif self.mutex == 0 and content[0] == '选歌':
# self.write_text('系统','%s 请先点歌' % nick)
# elif (self.mutex != nick and content[0] == '点歌') or (self.mutex != nick and content[0] == '选歌'):
# self.write_text('系统','%s 请等待 %s 选歌' % ([nick, self.mutex]))
# else:
# pass

def f5_list(self):
del(self.play_list['music list'][0])

def play_list_4_show(self):
tmp_str=' 播放列表\n\n'
for i,v in enumerate(self.play_list['music list']):
tmp_str=''.join([tmp_str,str(i+1),'. %s:\n %s' % (v['id'],v['mname']), '\n'])
return tmp_str

###############################################################################

def maintk():
try:
root = Tk()
app = my_gui(root)
app.delete_music_start()
threading.Thread(target=app.main).start()
#root.after(2000, app.main)
root.mainloop()
except Exception as e:
print(e)
root = Tk()
app = my_gui(root)
#app.delete_music_start()
threading.Thread(target=app.main).start()
threading.Thread(target=app.play_mp3).start()
#root.after(2000, app.main)
root.mainloop()



Expand Down
32 changes: 20 additions & 12 deletions douyu/mplay.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#coding=utf-8
from subprocess import Popen
from subprocess import call
import time
import threading
Expand All @@ -11,6 +12,7 @@
import random
import os
import sys
import time

"""ffplay path
"""
Expand Down Expand Up @@ -108,10 +110,8 @@ def save_song_to_disk(song, folder):
except Exception as e:
print('音乐获取失败')
return -1
print(fpath)
f = open(fpath, 'wb')
f.write(data)
f.close()
with open(fpath, 'wb') as f:
f.write(data)
return fpath
#threading.Thread(target=playmp3, args=([os.path.join('E:\m\music', name+'.mp3')])).start()

Expand All @@ -136,8 +136,10 @@ def save_song_to_disk(song, folder):
"""
def playmp3(filename):
if os.path.exists(filename):
#p = Popen([FFMPEG, '-autoexit', filename])
call([FFMPEG, '-autoexit', filename])
os.remove(filename)
#return p
else:
return -1

Expand All @@ -161,11 +163,17 @@ def select(select_id, song_list):
return song_js['songs'][0] # 音质?

if __name__ == '__main__':
folder = 'E:\m\music'
name = input('song:')
m_list = search_song_by_name(name)
show_music_list(m_list)
sid = int(input('select:'))
song = select(sid, m_list)
fpath = save_song_to_disk(song, folder)
playmp3(fpath)
# folder = 'E:\m\music'
# name = input('song:')
# m_list = search_song_by_name(name)
# show_music_list(m_list)
# sid = int(input('select:'))
# song = select(sid, m_list)
# fpath = save_song_to_disk(song, folder)
# playmp3(fpath)
p = playmp3('Desktop/m/a.mp3')
print(p.returncode)
time.sleep(3)
p.kill()
print(p.returncode)

1 change: 1 addition & 0 deletions douyu/music_list.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"music list": []}

0 comments on commit 7a7050b

Please sign in to comment.