python 3.7 使用MP3play 模塊


  因工作需要,做了一個QQ機器人語音播報程序。主要思路 是通過 酷Q 獲取QQ消息取出有效信息。

根據信息在百度AI上合成語音,然后本地播放。

      在播放語音的時候用了好幾個模塊  pygame 、pymedia  、系統os 等,試聽效果都不怎么理想,最后發現MP3play 蠻好(開始用的python2.7)

  移植到新環境的時候mp3play 報錯了。無法播放,根據提示查看源碼,修改了兩處地方,可正常運行。

  mp3play 根目錄下  有兩個文件  __init__.py 和 windows.py  根目錄可以通過 pip install  mp3play  查看(沒安裝的會安裝,安裝了會顯示安裝路徑)

  修改windows.py 兩處代碼

 

class _mci:
    def __init__(self):
        self.w32mci = windll.winmm.mciSendStringA
        self.w32mcierror = windll.winmm.mciGetErrorStringA

    def send(self, command):
        buffer = c_buffer(255)
        command=command.encode(encoding="utf-8")  #添加的將str 轉bytes
        
        errorcode = self.w32mci(command, buffer, 254, 0)  # 默認的str(command) 不要str
        if errorcode:
            
            return errorcode, self.get_error(errorcode)
        else:
            return errorcode, buffer.value

    def get_error(self, error):
        error = int(error)
        buffer = c_buffer(255)
        self.w32mcierror(error, buffer, 254)
        return buffer.value

    def directsend(self, txt):
        (err, buf) = self.send(txt)
        if err != 0:
            print ('Error %s for "%s": %s' % (str(err), txt, buf))        # print 添加一個()
        return (err, buf)

    改了兩處測試可以使用。然后看了下MP3play  發現他主要是調用了系統 windll.winmm.mciSendStringA  函數

 from ctypes import windll, c_buffer

    核心調用 windll.winmm.mciSendStringA(b"play aa.mp3", 0, 0, 0)  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM