2013-01-07 8 views
6

मैं एक शिक्षित मल्टीसाइट परियोजना पर काम कर रहा हूं जहां हमें एक कंप्यूटर पर 36 कीबोर्ड और 36 यूएसबी साउंड कार्ड कनेक्ट करने की आवश्यकता है। हम 3.6.3-030603-जेनेरिक कर्नेल के साथ उबंटू लिनक्स 12.04 चला रहे हैं।मेरे सिस्टम पर 32 से अधिक यूएसबी साउंड कार्ड की आवश्यकता है

अब तक हम 36 कीबोर्ड से इनपुट प्राप्त करने में कामयाब रहे हैं, और कर्नेल पैनिक (जो कर्नेल को अपडेट करने से पहले हुआ था) के बिना 36 ध्वनि कार्ड को पहचाना गया है। हम जानते हैं कि 36 ध्वनि कार्ड पहचाने गए हैं क्योंकि $ lsusb | grep "Audio" -c36 आउटपुट करता है।

हालांकि, $ aplay -l कुल में 32 प्लेबैक डिवाइस सूचीबद्ध करता है ("आंतरिक" ध्वनि कार्ड सहित)। इसके अलावा, $ alsamixer -c 32 कहता है "अमान्य कार्ड इंडेक्स: 32" (केवल 0 से 31 तक काम करता है; कुल मिलाकर 32)।

तो मेरा सवाल यह है कि अगर मैं इन आदेशों के साथ सूचीबद्ध नहीं हूं तो मैं अन्य ध्वनि कार्ड कैसे एक्सेस कर सकता हूं? मैं अजगर में एक एप्लीकेशन लिख रहा हूं और कुछ पुस्तकालयों को चुनने के लिए कुछ विकल्प हैं, लेकिन मुझे डर है कि इस वजह से कुल मिलाकर 32 डिवाइस तक सीमित रहेंगे। कोई मार्गदर्शन उपयोगी होगा।

धन्यवाद।

+2

क्या आप डरते हैं या आपने इसका परीक्षण किया है? – Crisfole

+0

मैंने pyudio की कोशिश की, और get_device_count() कुल मिलाकर 32 सूचीबद्ध करता है, जिसमें कुछ उपनाम शामिल हैं (सुनिश्चित नहीं है कि सही शब्द) जैसे "डिफ़ॉल्ट"। तो मैं भी कम उपकरणों तक पहुंच सकते हैं। – picheto

+1

आपने इन सभी उपकरणों को पीसी से कैसे कनेक्ट किया? क्या बस बैंडविड्थ के लिए यह बहुत अधिक नहीं होगा? क्या आप वास्तव में एक ही समय में मौजूदा 31 उपकरणों का उपयोग कर सकते हैं? –

उत्तर

7

आपके द्वारा पेश किया गया प्रश्न मूल रूप से है: क्या एएलएसए द्वारा नियंत्रित सिस्टम में 32 ध्वनि कार्ड अधिक हो सकते हैं? यह स्पष्ट रूप से लगता है कि जब आपके यूएसबी नियंत्रक आपके द्वारा जुड़े सभी ध्वनि कार्ड जानते हैं, तो ALSA सिस्टम नहीं करता है।

चलो कर्नेल स्रोतों में शामिल होने के लिए यहां क्या हो रहा है यह देखने के लिए। /sound/core/sound.c में आप अधिकतम साउंड कार्ड के मुद्दे के बारे में अधिक जानकारी मिल जाएगी:

  1. चर cards_limit एक मॉड्यूल पैरामीटर है:

    39 static int cards_limit = 1; 
        40 
        41 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>"); 
        42 MODULE_DESCRIPTION("Advanced Linux Sound Architecture driver for soundcards."); 
        43 MODULE_LICENSE("GPL"); 
        44 module_param(major, int, 0444); 
        45 MODULE_PARM_DESC(major, "Major # for sound driver."); 
        46 module_param(cards_limit, int, 0444); 
        47 MODULE_PARM_DESC(cards_limit, "Count of auto-loadable soundcards."); 
        48 MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR); 
        49 
        50 /* this one holds the actual max. card number currently available. 
        51 * as default, it's identical with cards_limit option. when more 
        52 * modules are loaded manually, this limit number increases, too. 
        53 */ 
        54 int snd_ecards_limit; 
        55 EXPORT_SYMBOL(snd_ecards_limit); 
    

    कोड और अपनी टिप्पणी से मैं दो बातें पढ़ें। मुझे लगता है कि आपके इंस्टॉलेशन पर यह पैरामीटर 32 पर सेट है। यदि ALSA समर्थन कर्नेल में बनाया गया है तो आप एक कस्टम कर्नेल बना सकते हैं जहां आपने यह विकल्प बदल दिया था। यदि ALSA समर्थन अंतर्निहित नहीं है, लेकिन मॉड्यूल के रूप में लोड किया गया है, तो आप मॉड्यूल लोड के दौरान यह पैरामीटर सेट कर सकते हैं। इसके लिए आप या तो अपने सिस्टम कॉन्फ़िगरेशन (man modprobe.d) को बदलें या मॉड्यूल को अनलोड करें, फिर इसे विकल्प (man modprobe) से पुनः लोड करें।

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

स्रोत: Kernel 2.8 Git

+1

यूएसबी साउंड कार्ड के लिए 'card_limit' से प्रभावित ऑटो-लोडिंग तंत्र का उपयोग नहीं किया जाता है। 'Snd-usb-audio' को मैन्युअल रूप से लोड करना कुछ भी नहीं बदला जा सकता क्योंकि यह सभी 36 उपकरणों के लिए एक ही ड्राइवर है। –

3

साउंड कार्ड सीमा include/sound/core.h में प्रतीक SNDRV_CARDS के रूप में परिभाषित किया गया है।

जब मैं सात साल पहले इस वृद्धि हुई है, मैं क्योंकि कार्ड सूचकांक चर snd_cards_locksound/core/init.c में के लिए एक सा सूचकांक के रूप में प्रयोग किया जाता है 32 से परे जाना नहीं था, और मैं आवश्यकता से अधिक को बदलने के लिए नहीं चाहता था।

यदि आप snd_cards_lock एक 64-बिट चर बनाते हैं, तो 64-बिट प्रकार का उपयोग करने के लिए सभी एक्सेसों को बदलें, और किसी भी अन्य दुष्प्रभाव को समायोजित करें जिसे मैं भूल सकता हूं, आपको कर्नेल को और ALSA प्राप्त करने में सक्षम होना चाहिए पत्ते।

यह सीमा alsa-lib पैकेज में भी मौजूद है; src/control/control_hw.c में आपको कम से कम snd_ctl_hw_open में चेक बदलना होगा।

+0

हम इसे जांच लेंगे, बहुत बहुत धन्यवाद – picheto

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