Memutar file audio dengan Python

39

Saya mencari pustaka Python terawat dengan baik memungkinkan saya untuk memutar file audio pada Raspberry Pi saya menggunakan output audio standar.

Sejauh ini saya sudah mencoba beberapa, tetapi tidak satupun yang berhasil. Meskipun pyglet berfungsi dengan baik di komputer saya, itu menyebabkan kesalahan pada Raspberry Pi. Apakah ada perpustakaan Python yang telah terbukti mudah digunakan?

Gelas bir
sumber
Terbukti mudah digunakan adalah jenis relatif, tapi saya memposting alternatif untuk pygame ke pertanyaan serupa di StackOverflow di sini . Pada dasarnya alternatif itu adalah vlc.py (modul libVLC Python, yang dipelihara dengan sangat baik).
Ben
Sebuah pertanyaan lebih lanjut mengatakan bahwa Pyglet bekerja pada RPi. Bisakah Anda memperbarui dengan kesalahan Anda?
Brian Bulkowski

Jawaban:

32

Saya merekomendasikan Pygame yang sangat populer . Saya mungkin salah, tapi saya percaya itu sudah diinstal pada Pi. Anda dapat menggunakan Modul Musik Mixer Pygame untuk memutar file audio. Saya telah memasukkan beberapa contoh kode di bawah ini.

Dengan asumsi bahwa kita memiliki file audio bernama myFile.wav.

import pygame
pygame.mixer.init()
pygame.mixer.music.load("myFile.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
    continue

CATATAN: Jika ini gagal, silakan pergi ke terminal dan perbarui sistem Anda dengan

apt-get update
apt-get upgrade

dan coba lagi.

xxmbabanexx
sumber
2
Jika Anda memiliki lebih dari satu suara untuk diputar (yang kemungkinan) maka lebih baik untuk membuat objek pygame.mixer. Mendengar masing-masing, maka Anda dapat menyimpan definisi nama file suara di satu tempat.
francis
Itu yang saya inginkan, tetapi suara motherboard saya tidak memiliki driver jadi saya menggunakan kartu suara USB. Itu bermain dengan espeakbaik, tapi bukan ini.
SDsolar
11

Saya membutuhkan skrip untuk memutar lagu dari tiga puluh detik di latar belakang saat menanggapi input pengguna lain. Saya kemudian ingin itu mengakhiri lagu di beberapa acara.

Saya tidak mengira itu sangat elegan, tapi saya membuka pipa untuk proses MPlayer latar belakang.

import subprocess
player = subprocess.Popen(["mplayer", "song.mp3", "-ss", "30"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Kemudian, ketika saya ingin menghentikan proses MPlayer, saya hanya menulis "q" untuk berhenti ke pipa.

player.stdin.write("q")

Lihatlah dokumentasi MPlayer untuk semua jenis perintah yang dapat Anda lewati dengan cara ini untuk mengontrol pemutaran.

Semoga itu agak membantu!

pengguna1616681
sumber
1
Ini sebenarnya sangat rapi. Tutorial AdWords ini berbicara tentang memainkan suara tetapi tidak menghentikannya.
gideon
6

Pilihan lain adalah menggunakan mpg321dan memintanya dari baris perintah.

apt-get install mpg321

Kemudian dengan Python:

import os

os.system('mpg321 foo.mp3 &')

Pygame hampir pasti lebih kuat, tetapi saya rasa tergantung pada apa kebutuhan Anda.

Brandorf
sumber
1
Saya memikirkan hal ini sendiri, tetapi saya pikir itu tidak terlalu elegan, karena itu membuat jeda, kontrol volume, dll. Jauh lebih sulit.
Stein
Ini sangat lambat.
Alex
3

Saya akan merekomendasikan pyglet daripada pygame jika Anda tidak membutuhkan grafik. Dalam pandangan saya itu lebih sederhana, lebih elegan, dan lebih terawat. Kemudian lagi, saya berharap itu mungkin masalah selera.

Bex
sumber
1
Jadi bagaimana Anda menggunakannya?
SDsolar
pyglet hanya tampak berjalan ketika tampilan tersedia; menjalankannya dari jarak jauh atau sebagai dasmon hanya untuk tujuan memutar suara tidak bekerja.
oh7lzb
0

Pygame memberi Anda cara yang bagus dan mudah untuk memuat dan memutar suara, di berbagai saluran.

mrpi64
sumber
0

Anda dapat menggunakan sejumlah pemain eksternal melalui pipa. Namun, Anda hampir selalu mengalami kehilangan kecepatan. Ada juga masalah dengan kontrol pemutaran.

Saya sarankan Anda pyaudio, itu berfungsi dengan baik.

Jika Anda ingin memutar file terkompresi juga, saya akan sangat bebas untuk mengarahkan Anda ke decoder.py modul saya. Anda dapat menemukannya di PyPI.

Itu juga menggunakan subproses, tetapi panggilan decoder bukan pemain. Mereka tidak menggunakan banyak CPU, dan beberapa dari mereka tahu cara menggunakan akselerasi perangkat keras. Anda kemudian dapat menggunakan pyaudio atau sesuatu untuk menampilkan data audio mentah. Jika mau, Anda bahkan bisa menggunakan pygame dengan memanfaatkan pygame.sndarray. Dengan cara itu Anda bisa memainkan lebih banyak format daripada dukungan pygame.

Saya mencoba decoder.py di lingkungan PyQT GUI, dengan pyaudio dan juga menggunakan aplay sebagai pemain eksternal. Itu pada Raspberry Pi B.

Hasilnya cukup memuaskan dalam kedua kasus.

Kesederhanaan bisa dipertanyakan.

decoder.py itu sendiri sangat sederhana, tetapi Anda harus menggabungkannya dengan lib lain dan yang meningkatkan baris kode.

Ada contoh tentang cara memutar file yang disertakan dengan decoder.py.

Dalen
sumber
0

Saya menjalankan OSMC (Debian) dan saya dapat memutar melalui speaker TV saya, yang terhubung dengan HDMI. https://youtu.be/p2ljmTE67gs

Metode saya didasarkan pada solusi di atas yang diposting oleh @xxmbabanexx dan juga di sini . Pada dasarnya, aku harus menambahkan dtparam=audio=onuntuk/boot/config.txt

jjinking
sumber
Saya pikir TS berarti jack 3,5 mm ketika mengacu pada "output audio standar". Apakah ini berfungsi untuk jack 3,5 juga?
Bex
Oh begitu. Hmm mungkin tidak, meskipun saya belum mencobanya.
jjinking