เล่นไฟล์ mp3 โดยใช้ python

Oct 06 2020

ฉันมีรหัสนี้ชื่อว่าโปรแกรมนับถอยหลัง สิ่งที่โปรแกรมของฉันทำคือ:

  1. นับถอยหลังจาก 60

  2. เล่นไฟล์เสียง ( alarm.wav) เมื่อการนับถอยหลังถึงศูนย์ ซึ่งหมายความว่าโค้ดต้องทำสิ่งต่อไปนี้:

    • time.sleep()หยุดชั่วคราวสำหรับคนที่สองในระหว่างการแสดงแต่ละหมายเลขในการนับถอยหลังโดยการเรียก

    • โทรsubprocess.Popen()เพื่อเปิดไฟล์เสียงด้วยแอปพลิเคชันเริ่มต้น

นี่คือรหัสสำหรับมัน:

import time , subprocess,os
from subprocess import call

def countDown():
    for i in range (10):
        print(i, end='')
        time.sleep(1)

countDown()
subprocess.call([ 'bomb.mp3'])

เมื่อฉันเรียกใช้สิ่งนี้ฉันจะได้รับ:

Error: File not Found

ฉันลองใช้:

subprocess.call([ 'home/username/bomb.mp3']) # location specified

แต่ฉันได้รับ:

Error: Permission denied

จากนั้นฉันลองใช้Popen:

subprocess.Popen(['start', 'bomb.mp3'], shell=True)

แต่ฉันได้รับ:

Error: 0123456789bomb.mp3: 1: start: not found

ฉันไม่ค่อยแน่ใจว่าทำไมโค้ดนี้ถึงใช้ไม่ได้กับ Ubuntu เพราะมันทำงานได้ดีบน Windows

ฉันทำอะไรได้บ้าง? มีวิธีใดบ้างในการเปิดไฟล์ mp3 โดยใช้ Python บน Ubuntu 20.04 LTS หรือฉันพลาดข้อโต้แย้งใด ๆ

ขอบคุณล่วงหน้า.

คำตอบ

3 EliahKagan Oct 07 2020 at 00:32

ใช้:

subprocess.call(['xdg-open', '/home/username/bomb.mp3'])

bomb.mp3(หรือalarm.wav) ไม่ใช่โปรแกรมหรือสคริปต์ที่คุณต้องการเรียกใช้ แต่เป็นไฟล์ที่คุณต้องการเปิด ตามที่เป้าหมายของคุณดูเหมือนจะเปิดขึ้นในแอปพลิเคชันกราฟิกที่ลงทะเบียนไว้เพื่อจัดการกับมันซึ่งเป็นสิ่งที่สคริปต์เวอร์ชันก่อนหน้าอย่างน้อยหนึ่งเวอร์ชันทำเมื่อทำงานใน Windows คุณควรใช้xdg-openคำสั่ง

นอกจากการใช้xdg-openแล้วฉันยังได้เพิ่มการนำ/หน้าไปยังส่วนหน้าของพา ธ โดยที่ไม่มีการแก้ไขเมื่อเทียบกับไดเร็กทอรีปัจจุบัน (ซึ่งน่าจะล้มเหลวยกเว้นเมื่อไดเร็กทอรีปัจจุบันคือ/)


โปรแกรมเวอร์ชันแรกของคุณหรือรุ่นที่คล้ายกันอาจทำงานบน Windows ได้เนื่องจากใน Windows ไฟล์ที่ไม่สามารถเรียกใช้งานได้สามารถเรียกใช้เป็นคำสั่งได้ สิ่งนี้ทำให้พวกเขาเปิดด้วยโปรแกรมอะไรก็ได้ที่เกี่ยวข้องกับประเภทไฟล์ ระบบปฏิบัติการส่วนใหญ่และเชลล์ส่วนใหญ่ไม่ทำงานในลักษณะนี้ ของ Windows นอกจากนี้ยังมีคำสั่งการทำเช่นนี้ (ที่มีความหมายที่แตกต่างกันเล็กน้อย) startที่เรียกว่า แต่ระบบปฏิบัติการอื่น ๆ เช่น Ubuntu startไม่ได้มี ดังนั้นเมื่อคุณลองใช้บน Ubuntu มันก็ไม่ได้ผลเช่นกัน

xdg-openสิ่งที่อูบุนตูมีคือ Ubuntu ไม่ได้อยู่คนเดียวที่นี่ - xdg-openไม่ทำงานใน Windows หรือ macOS แต่ทำงานบนระบบที่มีสภาพแวดล้อมเดสก์ท็อปแบบกราฟิกที่เป็นไปตามมาตรฐานfreedesktop.org ซึ่งรวมถึงเพียงใดเกี่ยวกับระบบ GNU / Linux (และบาง Unix เหมือนระบบปฏิบัติการอื่น ๆ ) หากผู้ใช้มีสภาพแวดล้อมเดสก์ทอปแบบกราฟิกที่ติดตั้ง

เพื่อให้xdg-openคำสั่งประสบความสำเร็จจริงผู้ใช้จะต้องเข้าสู่เซสชันกราฟิก

(บน macOS คุณจะใช้open)