Phát tệp mp3 bằng python

Oct 06 2020

Tôi có mã này được gọi là Chương trình CountDown. Những gì chương trình của tôi làm là:

  1. Đếm ngược từ 60.

  2. Phát tệp âm thanh ( alarm.wav) khi bộ đếm ngược về không. Điều này có nghĩa là mã cần thực hiện những điều sau:

    • Tạm dừng một giây giữa việc hiển thị từng số trong bộ đếm ngược bằng cách gọi time.sleep().

    • Gọi subprocess.Popen()để mở tệp âm thanh bằng ứng dụng mặc định.

Đây là mã cho nó:

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'])

Khi tôi chạy cái này, tôi nhận được:

Error: File not Found

Tôi đã thử với:

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

Nhưng tôi nhận được:

Error: Permission denied

Sau đó, tôi đã thử với Popen:

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

Nhưng tôi nhận được:

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

Tôi không hoàn toàn chắc chắn tại sao mã này không hoạt động trên Ubuntu, vì nó hoạt động tốt trên Windows.

Tôi có thể làm gì cho việc này? Có phương pháp nào để mở tệp mp3 bằng Python trên Ubuntu 20.04 LTS hay tôi bỏ lỡ bất kỳ đối số nào không?

Cảm ơn trước.

Trả lời

3 EliahKagan Oct 07 2020 at 00:32

Sử dụng:

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

bomb.mp3(hoặc alarm.wav) không phải là chương trình hoặc tập lệnh bạn muốn chạy, mà là một tệp bạn muốn mở. Vì mục tiêu của bạn dường như là mở nó trong bất kỳ ứng dụng đồ họa nào hiện được đăng ký để xử lý nó - đó là điều mà ít nhất một trong những phiên bản trước đó của tập lệnh của bạn đã làm khi chạy trong Windows - bạn nên sử dụng xdg-openlệnh.

Bên cạnh việc sử dụng xdg-open, tôi cũng đã thêm một đầu /vào phía trước của đường dẫn, nếu không có nó sẽ được giải quyết liên quan đến thư mục hiện tại (có lẽ sẽ không thành công ngoại trừ khi thư mục hiện tại bị /).


Phiên bản đầu tiên của chương trình của bạn, hoặc một cái gì đó tương tự, có thể đã hoạt động trên Windows vì trên Windows, các tệp không thực thi có thể được chạy dưới dạng lệnh. Điều này khiến chúng có thể được mở bằng bất kỳ chương trình nào mà loại tệp của chúng được liên kết. Hầu hết các hệ điều hành và hầu hết các shell không hoạt động theo cách này. Windows cũng cung cấp một lệnh để thực hiện việc này (với ngữ nghĩa hơi khác) được gọi start. Nhưng các hệ điều hành khác, chẳng hạn như Ubuntu, không có start. Vì vậy, khi bạn thử điều đó trên Ubuntu, nó cũng không hoạt động.

Những gì Ubuntu có là xdg-open. Ubuntu không đơn độc ở đây - xdg-openkhông hoạt động trong Windows hoặc macOS, nhưng nó hoạt động trên các hệ thống có môi trường máy tính để bàn đồ họa tuân theo các tiêu chuẩn freedesktop.org . Điều này chỉ bao gồm bất kỳ hệ thống GNU / Linux nào (và một số hệ điều hành giống Unix khác) nếu người dùng đã cài đặt môi trường màn hình đồ họa .

Để xdg-openlệnh thực sự thành công , người dùng phải đăng nhập vào một phiên đồ họa.

(Trên macOS, bạn sẽ sử dụng open.)