2010-01-24 14 views
7

से संगीत/अन्य ध्वनियों को बाधित करने के बिना मैं पाइथन में एक टाइमर पर काम कर रहा हूं जो प्रतीक्षा समय खत्म होने पर एक चीज लगता है। मैं निम्नलिखित कोड का उपयोग करता हूं:पाइथन में ध्वनि कैसे खेलें

from wave import open as wave_open 
from ossaudiodev import open as oss_open 

def _play_chime(): 
    """ 
    Play a sound file once. 

    """ 
    sound_file = wave_open('chime.wav','rb') 
    (nc,sw,fr,nf,comptype, compname) = sound_file.getparams() 
    dsp = oss_open('/dev/dsp','w') 
    try: 
     from ossaudiodev import AFMT_S16_NE 
    except ImportError: 
     if byteorder == "little": 
     AFMT_S16_NE = ossaudiodev.AFMT_S16_LE 
     else: 
     AFMT_S16_NE = ossaudiodev.AFMT_S16_BE 
    dsp.setparameters(AFMT_S16_NE, nc, fr) 
    data = sound_file.readframes(nf) 
    sound_file.close() 
    dsp.write(data) 
    dsp.close() 

यह बहुत अच्छा काम करता है, जब तक कि कोई अन्य डिवाइस पहले से ही ध्वनि आउटपुट नहीं कर रहा हो।

मैं मूल रूप से वही (लिनक्स के तहत) कैसे कर सकता हूं बिना शर्त के कि कोई आवाज नहीं चल रही है?

आपको लगता प्रक्रिया सॉफ्टवेयर मिश्रण सुनिश्चित करने के लिए एक API की आवश्यकता होगी, तो एक तरीका है :) समर्थन :)

+0

कोई आधुनिक ध्वनि प्रणाली एक समय में केवल एक स्ट्रीम को संभाल सकती है। जानकारी के लिए –

उत्तर

8

आसान जवाब है के लिए

Thx सुझाव है तो कृपया "ओएसएस से पल्सऑडियो में स्विच करें।" (या डीएमआईक्स का उपयोग करने के लिए एएलएसए सेट करें, या बेहतर लिनक्स ड्राइवरों के साथ साउंडकार्ड प्राप्त करें ...)

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

+0

Thx। मुझे लगता है कि सवाल जोड़कर बढ़ता जा रहा है "अगर समाधान को एपीआई को सॉफ़्टवेयर मिश्रण सुनिश्चित करने की आवश्यकता होती है, तो यह क्या होना चाहिए?" चीयर्स – Morlock

+1

यही कारण है कि मैंने पल्सऑडियो का सुझाव दिया। डिफ़ॉल्ट रूप से, pulseaudio डिमन आपके लिए सॉफ़्टवेयर मिश्रण को संभालता है। – clee

+0

ठीक है, मुझे आपका जवाब दो बार पढ़ना चाहिए था। मैं पल्सऑडियो देखता हूं। Thx – Morlock

1

आधुनिक हार्डवेयर और ड्राइवर एकाधिक धाराओं का समर्थन करते हैं। तो जब तक कि आप प्राचीन हार्डवेयर या क्रैपी ड्राइवर के साथ नहीं चल रहे हैं, वैसे भी इसे काम करना चाहिए।

यह कहकर कि, एएलएसए आपको ओएसएस से अधिक नियंत्रण दे सकता है। आजकल भेजे गए अधिकांश कर्नल दोनों का समर्थन करते हैं।

+0

मैं निश्चित रूप से आल्सा आज़माउंगा। मैंने अभी सत्यापित किया है और यही मेरा साउंड कार्ड उपयोग कर रहा है। – Morlock

संबंधित मुद्दे