美文网首页物联网IOT创意开发
躺着控制设备上的音乐播放(U型遥控器,Python 3)

躺着控制设备上的音乐播放(U型遥控器,Python 3)

作者: TypeY | 来源:发表于2020-04-21 22:46 被阅读0次

    DIY一个用手机遥控的音乐播放器控制器!

    准备工作

    1.准备一个音乐文件夹,并且创建我们的脚本,如图:


    音乐文件夹

    2.安装pygame库(windows 在 cmd 执行,linux 在终端执行,这是一个非常有用的库):

    pip install pygame
    

    3.在手机上安装U型遥控器

    从酷安下载

    直接上脚本和注释

    Python 脚本的后缀由.py修改为.pyw可以在Windows平台实现无弹窗运行

    import os
    from pygame import mixer #从pygame里面导入我们的音乐播放器
    from socket import *
    
    
    host = ''
    shoujiip = '手机的ip'
    port = 123  #设备接收端口一会填到手机
    sendport = 9999 #手机的接收端口
    bufsize = 1024
    addr = (host,port)
    addr1 = (shoujiip,sendport)
    udpClient = socket(AF_INET,SOCK_DGRAM) 
    udpServer = socket(AF_INET,SOCK_DGRAM)
    udpServer.bind(addr)
    
    
    
    def findmus(): #找当前目录下的音乐,mp3和flac格式,aac不支持
        L=[]
        l=os.listdir()
        for f in l:
            if f.find(".mp3")==len(f)-4 or f.find(".flac")==len(f)-5:
                L.append(f)  
        return(L)
    
    def play(x): #播放函数,防止无法载入造成奔溃,这里用了try和except
        try:
            mixer.music.load(x)
            mixer.music.play()
            return 0
        except:
            return 1
    
    
    def send(sdata): #向手机发送消息的函数
        sdata = sdata.encode()
        udpClient.sendto(sdata,addr1)
    
    def Is_Int(s): #判断str是否可以转换为int
        try: 
            int(s)
            return True
        except ValueError:
            return False
    
    L=findmus() #创建一个空的列表用来存放所有找到的音乐
    mixer.init() #启动播放器
    nowplaying=0 #用来定位当前正在播放的歌曲
    print("播放器已启动")
    print("找到以下歌曲:")
    n=0
    for i in L: #列一个歌单
        n=n+1
        print(str(n)+"."+i)
    
    while 1: #熟悉的循环,大家可以自定义对接收到的命令的处理
        data,addr = udpServer.recvfrom(bufsize)
        data=data.decode()
        if data=="退出":
            udpServer.close()
            mixer.quit()
            exit(0)
            
        elif data=="有什么歌":
            n=0
            for i in L:
                n=n+1
                send(str(n)+"."+i)
                
        elif Is_Int(data):
            if play(L[int(data)-1])==0:
                nowplaying=int(data)-1
                send("正在播放:"+L[nowplaying])
            
        elif data=="播放":
            try:
                mixer.music.play()
            except:
                play(L[nowplaying])
                send("正在播放"+L[nowplaying])
    
        elif data=="暂停":
            mixer.music.pause()
    
        elif data=="停":
            mixer.music.stop()
    
        elif data=="下一首":
            nowplaying=nowplaying+1
            if nowplaying>=len(L):
                nowplaying=0
            play(L[nowplaying])
            send("正在播放"+L[nowplaying])
    
        elif data=="上一首":
            nowplaying=nowplaying-1
            if nowplaying<0:
                nowplaying=len(L)-1
            play(L[nowplaying])
            send("正在播放"+L[nowplaying])
        else:
            send("对不起,现在只支持这些指令:有什么歌,数字点播,播放,暂停,停,下一首,上一首,退出")
    
    

    理论上,上面的脚本复制粘贴,改好ip地址和端口即可运行在任何平台


    执行结果(Windows) 执行结果(U型遥控器)

    当然,最方便的还是把命令都做成按键啦

    按键式遥控器

    本教程到此就结束:)

    APP下载

    从酷安下载

    相关文章

      网友评论

        本文标题:躺着控制设备上的音乐播放(U型遥控器,Python 3)

        本文链接:https://www.haomeiwen.com/subject/zaamihtx.html