python 为什么收到UDP数据包后文件音频不播放?

siv3szwd  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(63)

下面的脚本必须在收到UDP数据包后播放音频文件(.wav),但它不起作用。为什么?为什么?

import pygame
import socket

# set UDP port
UDP_PORT = 5005

# audio (.wav) file path
AUDIO_FILE_PATH = "/home/rpi/mixkit-emergency-alert-alarm-1007.wav"

def play_audio(file_path):
    pygame.mixer.init()
    pygame.mixer.music.load(file_path)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        continue

if __name__ == "__main__":
    # start UDP socket UDP
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind(("", UDP_PORT))
    print("Listening UDP port", UDP_PORT)

    while True:
        data, addr = udp_socket.recvfrom(1024)
        message = data.decode("utf-8")
        print("Message received:", message)

        # if msg received, play audio file
        if message == "play_audio":
            play_audio(AUDIO_FILE_PATH)

字符串
我用以下命令测试了它:
第一个月
已收到消息,但未播放音频。
然后,我只尝试了脚本来测试音频,没有UDP服务器,它的音频文件被正确播放。下面的脚本只测试音频:

import pygame

# Imposta il percorso del file audio (deve essere un file WAV)

AUDIO_FILE_PATH = "/home/rpi/mixkit-emergency-alert-alarm-1007.wav"

def play_audio(file_path):

    pygame.mixer.init()

    pygame.mixer.music.load(file_path)

    pygame.mixer.music.play()

    while pygame.mixer.music.get_busy():

        continue

if __name__ == "__main__":

    play_audio(AUDIO_FILE_PATH)


有没有人可以帮助我理解为什么UDP服务器与音频播放一起的程序不起作用?

rkkpypqq

rkkpypqq1#

我发现了我的错误。
使用echo "play_audio" | nc -u -w1 192.168.8.120 5005不起作用。
使用以下简单的python脚本发送UDP消息确实有效。

UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = "play_audio"

print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
print("message:", MESSAGE)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, UDP_PORT))

字符串

相关问题