簡體   English   中英

Pygame 不會播放音頻,但只能在作為守護進程運行時播放

[英]Pygame won't play audio, but only when running as a daemon

一點背景知識:我有一個運行 Raspbian(Debian) 9.11 的 Raspberry Pi 3b。 這個原始的 Pi 運行一個 Python 3 腳本,該腳本從手持掃描儀捕獲文本輸入並將其發送到 MySQL 數據庫,然后播放 wav 文件,以便員工掃描知道它是成功的。 我守護了這個過程,所以它更容易重新啟動(有時掃描儀與他們的 USB 加密狗失去同步)。 守護進程文件中的主線是這樣的

ExecStart=/usr/bin/python3 /home/pi/Desktop/scanner.py

我不得不為我被要求創建的新實例稍微更改流程,所以我將 Raspbian 10.4(最新版本)加載到另一個 Pi 3b 上,並通過現在插入到本地 Maria DB(MySQL 基本上是)。 守護進程運行得很好......除了沒有音頻播放(但數據庫插入仍然發生)。 真正奇怪的是,當我在 Thonny 中加載它時,它可以很好地播放文件。 系統日志中沒有任何內容表明 Python 或 Pygame 正在生成任何錯誤。

這里的相關代碼(縮寫)是

import pygame.mixer
# sets up sound
pygame.mixer.init()
goodscan = pygame.mixer.Sound('/home/pi/Desktop/goodscan.wav')
duplicatescan = pygame.mixer.Sound('/home/pi/Desktop/duplicateScan.wav')
badscan = pygame.mixer.Sound('/home/pi/Desktop/badScan.wav')

#function that the USB listener calls
def scan(scanner):
    #some scanner processing codes here
    if prevScan == x:
        duplicatescan.play()
        print("Duplicate Scan")
        continue;
                 
     else:
        splits = x.split('-')
        if(len(splits) < 3):
            print("No prefix provided")
            #write to error log
            badscan.play();
            continue;
        prefix = splits[0][0] + splits[0][1]
        po = splits[1] + '-' + splits[2]
        scanner_number = splits[0][2] + splits[0][3]
        polist.extend([po, prefixes[prefix], scanner_number])
        goodscan.play()
        
        #DB insert (this always works)                
        scans = {
           "timestamp": time_str,
           "ponum": x,
           "status": polist[1],
           "scanner": polist[2]
        }
        statusUpdate.databaseUpdate(polist)

我如何調試為什么這在守護進程模式下不起作用?

我猜這與從 Raspberry Pi OS 轉向 Linux 內核 5.4(舊的 Pi 運行內核 4.19)有關。 我使用 pip 升級到 Pygame 1.9.6,它在停止或重新啟動服務時將此錯誤添加到系統日志中

9 月 3 日 08:40:46 raspberrypi 內核:[164439.999815] bcm2835_audio bcm2835_audio:未能關閉 VCHI 服務連接(狀態 = 1)

Kingsley 在評論中詢問它在哪個用戶下運行,答案是 root(我從未在系統服務文件中指定用戶)。 但是,我注意到 Thonny 在“pi”用戶下運行。 我想試一試可能會奏效,所以我補充說

User=pi

到我的服務文件,現在 Pygame 音頻再次在服務中工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM