Відтворення аудіофайлів з Python


38

Я шукаю доглянуту бібліотеку Python, яка дозволяє мені відтворювати аудіофайли на моєму Raspberry Pi, використовуючи стандартний аудіо вихід.

Поки я спробував декілька, але, схоже, жоден з них не спрацював. Хоча pyglet працює на моєму звичайному комп’ютерному штрафі, він спричиняє помилку на Raspberry Pi. Чи є бібліотека Python, яка була доведена як проста у використанні?


Доведено, що це простий у використанні вид, є відносним, але я розмістив альтернативу піґамі подібному питанню на StackOverflow тут . В основному, альтернативою є vlc.py (модуль libVLC Python, який дуже добре підтримується).
Бен

Питання далі йде, що Pyglet працює над RPi. Чи можете ви оновити свою помилку?
Брайан Булковський

Відповіді:


31

Я рекомендую широко популярну Пігаму. Я можу помилятися, але я вважаю, що він попередньо встановлений на Pi. Для відтворення аудіофайлів можна використовувати музичний модуль мікшера Pygame . Нижче я включив деякі приклади коду.

Якщо припустити, що у нас звуковий файл називається 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

ПРИМІТКА. Якщо цього не вдалося, перейдіть до терміналу та оновіть систему

apt-get update
apt-get upgrade

і спробуйте ще раз.


2
Якщо у вас є кілька звуків для відтворення (що, швидше за все,), тоді краще створити для кожного об'єкт pygame.mixer.Sound, тоді ви можете зберегти визначення звукових імен в одному місці.
francis

Це те, що я хочу, але звук моєї материнської плати не має драйвера, тому я використовую звукову карту USB. Він грає espeakпросто чудово, але не це.
SDsolar

10

Мені знадобився сценарій, щоб відтворити пісню тридцять секунд у фоновому режимі, реагуючи на введення інших користувачів. Тоді я хотів, щоб це закінчило пісню на якійсь події.

Я не думаю, що це особливо елегантно, але я відкрив трубку для фонового процесу MPlayer.

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

Потім, коли я хотів припинити процес MPlayer, я просто написав "q" для виходу в трубу.

player.stdin.write("q")

Перегляньте документацію MPlayer для всіляких команд, які ви можете передати таким чином, щоб керувати відтворенням.

Сподіваємось, це дещо корисно!


1
Це насправді акуратно насправді. Цей підручник з адафрутом розповідає про відтворення звуку, але не зупиняючи його.
gideon

6

Ще один варіант - використовувати mpg321та викликати його з командного рядка.

apt-get install mpg321

Потім у Python:

import os

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

Пігама майже напевно більш міцна, але, я думаю, це залежить від ваших потреб.


1
Я думав про це сам, але думав, що це не дуже елегантно, тому що робить паузу, контроль гучності тощо набагато важче.
Штейн

Це жахливо повільно.
Алекс

3

Я б порекомендував pyglet, а не pygame, якщо вам не потрібна графіка. На мій погляд, він простіший, елегантніший і краще доглядається. Потім я знову думаю, що це може бути справою смаку.


1
То як ти цим користуєшся?
SDsolar

pyglet, здається, працює лише тоді, коли доступний дисплей; запускати його віддалено або як демон тільки для відтворення звуків не працює.
oh7lzb

0

Pygame дає вам приємний та простий спосіб завантажувати та відтворювати звуки на різних каналах.


0

Ви можете використовувати декілька зовнішніх плеєрів через труби. Однак ви майже завжди будете відчувати втрату швидкості. Також існує проблема з контролем відтворення.

Я рекомендую вам pyaudio, це чудово працює.

Якщо ви хочете також відтворити стиснуті файли, я буду так вільно вказати на мій модуль decoder.py. Ви можете знайти його на PyPI.

Він також використовує підпроцес, але викликає декодери замість плеєрів. Вони не використовують багато процесора, і деякі з них знають, як використовувати апаратне прискорення. Потім ви можете використовувати pyaudio або щось подібне для виведення необроблених аудіоданих. Якщо ви хочете, ви навіть можете використовувати pygame, використовуючи pygame.sndarray. Таким чином ви можете грати більше форматів, ніж підтримка пігейму.

Я спробував decoder.py в середовищі PyQT GUI, з pyaudio, а також використовував aplay як зовнішній програвач. Це було на Raspberry Pi B.

Результати були досить задовольняючими в обох випадках.

Простота може бути поставлена ​​під сумнів.

decoder.py сам по собі дуже простий, але вам потрібно поєднувати його з іншими libs, що збільшує кодові рядки.

Є приклад того, як відтворювати файли, що входять до програми decoder.py.


0

Я запускаю OSMC (Debian), і в мене звук відтворюється через мої динаміки телевізора, які підключені HDMI. https://youtu.be/p2ljmTE67gs

Мій метод базувався на вищезазначеному рішенні, опублікованому @xxmbabanexx, а також тут . В принципі, я повинен був додати dtparam=audio=onдо/boot/config.txt


Я думаю, що TS мав на увазі 3,5-мм роз'єм, коли йдеться про "стандартний аудіо вихід". Чи працює це також для роз'єму 3,5?
Бекс

О Я бачу. Хм, це, мабуть, не буде, хоча я не пробував цього.
jjinking
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.