पायथन के साथ ऑडियो फ़ाइलें खेल रहा है


38

मैं एक अच्छी तरह से बनाए रखा अजगर पुस्तकालय की तलाश कर रहा हूं, जिससे मुझे मानक ऑडियो आउटपुट का उपयोग करके अपने रास्पबेरी पाई पर ऑडियो फाइलें खेलने की अनुमति मिलती है।

अब तक मैंने कई कोशिश की है, लेकिन उनमें से कोई भी काम नहीं कर रहा है। हालांकि pyglet मेरे नियमित कंप्यूटर पर काम करता है, यह रास्पबेरी पाई पर एक त्रुटि का कारण बनता है। क्या एक पायथन लाइब्रेरी है जो उपयोग करने में आसान साबित हुई है?


उपयोग करने में आसान रिश्तेदार की तरह साबित होता है, लेकिन मैंने यहां पर StackOverflow पर इसी तरह के सवाल के लिए pygame का विकल्प पोस्ट किया । मूल रूप से वह विकल्प vlc.py (libVLC Python मॉड्यूल है, जिसे बहुत अच्छी तरह से बनाए रखा गया है)।
बेन

एक सवाल आगे कहा गया है कि पाइगलेट आरपीआई पर काम करता है। क्या आप अपनी त्रुटि के साथ अपडेट कर सकते हैं?
ब्रायन बुल्कोव्स्की

जवाबों:


31

मैं व्यापक रूप से लोकप्रिय Pygame की सलाह देता हूं मैं गलत हो सकता हूं, लेकिन मेरा मानना ​​है कि यह पाई पर पहले से स्थापित है। ऑडियो फाइल चलाने के लिए आप 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 ऑब्जेक्ट बनाना बेहतर है, फिर आप ध्वनि फ़ाइल नाम की परिभाषाओं को एक स्थान पर रख सकते हैं।
फ्रैंकसिन

मैं जो चाहता हूं, लेकिन मेरी मदरबोर्ड साउंड में ड्राइवर नहीं है इसलिए मैं USB साउंड कार्ड का उपयोग करता हूं। यह espeakसिर्फ ठीक खेलता है, लेकिन यह नहीं।
एसडीसोलर

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
यह वास्तव में वास्तव में साफ है। यह adafruit ट्यूटोरियल ध्वनि बजाने के बारे में बात करता है लेकिन इसे रोक नहीं पाता है।
गिदोन

6

एक अन्य विकल्प mpg321यह है कि इसे कमांड लाइन से उपयोग करें और इसे लागू करें ।

apt-get install mpg321

फिर पायथन में:

import os

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

Pygame लगभग निश्चित रूप से अधिक मजबूत है, लेकिन यह निर्भर करता है, मुझे लगता है कि आपकी आवश्यकताओं पर क्या है।


1
मैंने खुद इसके बारे में सोचा था, लेकिन मुझे लगा कि यह बहुत सुरुचिपूर्ण नहीं है, क्योंकि यह रोकना, वॉल्यूम कंट्रोल करना आदि बहुत कठिन है।
स्टीन

यह भयानक रूप से धीमा है।
एलेक्स

3

मैं सिफारिश करेंगे pyglet बजाय pygame अगर आप ग्राफिक्स की जरूरत नहीं है। मेरे विचार में यह सरल, अधिक सुरुचिपूर्ण और बेहतर बनाए रखा गया है। फिर, मुझे उम्मीद है कि यह स्वाद का मामला हो सकता है।


1
तो आप इसका उपयोग कैसे करते हैं?
एसडीसोलर

pyglet केवल तभी प्रदर्शित होता है जब कोई डिस्प्ले उपलब्ध होता है; इसे केवल रिमोट के रूप में या ध्वनि चलाने के उद्देश्य से चलाने से काम नहीं चलता।
ओह 7lzb

0

Pygame आपको ध्वनियों को लोड करने और खेलने का एक अच्छा और आसान तरीका देता है, कई चैनलों पर।


0

आप पाइप के माध्यम से कई बाहरी खिलाड़ियों का उपयोग कर सकते हैं। हालाँकि, आप लगभग हमेशा गति में कमी का अनुभव करेंगे। प्लेबैक कंट्रोल की भी समस्या है।

मैं आपको pyaudio करने की सलाह देता हूं, यह ठीक काम करता है।

यदि आप संपीड़ित फ़ाइलों को भी खेलना चाहते हैं, तो मैं आपको अपने मॉड्यूल डिकोडरफ्रेम की ओर इशारा करूंगा। आप इसे PyPI पर पा सकते हैं।

यह उपप्रकार का भी उपयोग करता है, लेकिन खिलाड़ियों के बजाय डिकोडर्स को कॉल करता है। वे बहुत सारे सीपीयू का उपयोग नहीं करते हैं, और उनमें से कुछ हार्डवेयर त्वरण का उपयोग करना जानते हैं। फिर आप कच्चे ऑडियो डेटा को आउटपुट करने के लिए pyaudio या कुछ का उपयोग कर सकते हैं। यदि आप चाहें, तो आप pygame.sndarray का उपयोग करके भी pygame का उपयोग कर सकते हैं। इस तरह आप pygame समर्थन से अधिक प्रारूपों खेल सकते हैं।

मैंने PyQT GUI परिवेश में pyaudio के साथ और बाहरी खिलाड़ी के रूप में भी aplay का उपयोग करके decoder.py की कोशिश की। वह रास्पबेरी पाई बी पर था।

दोनों मामलों में परिणाम काफी संतोषजनक थे।

सादगी पर सवाल उठाया जा सकता है।

डिकोडरडैम स्वयं बहुत ही सरल है, लेकिन आपको इसे अन्य कामों के साथ संयोजित करना होगा और इससे कोड लाइनें बढ़ेंगी।

डिकोडरफ्रेम के साथ शामिल फ़ाइलों को कैसे खेलें, इस पर एक उदाहरण है।


0

मैं OSMC (डेबियन) चला रहा हूं और मुझे अपने टीवी स्पीकर के माध्यम से खेलने के लिए ध्वनि मिली, जो एचडीएमआई से जुड़ा है। https://youtu.be/p2ljmTE67gs

मेरी विधि @xxmbabanexx द्वारा पोस्ट किए गए उपरोक्त समाधान पर और साथ ही यहां पर आधारित थी । असल में, मुझे जोड़ना dtparam=audio=onथा/boot/config.txt


मुझे लगता है कि "मानक ऑडियो आउटपुट" की चर्चा करते समय टीएस का मतलब 3.5 मिमी जैक था। क्या यह 3.5 जैक के लिए भी काम करता है?
बेक्स

ओह मैं समझा। हम्म यह शायद नहीं होगा, हालांकि मैंने इसकी कोशिश नहीं की है।
jjinking
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.