2017-11-04 16 views
9

समस्या है:pygame.mixer.music.play() फास्ट ट्रैकर को नहीं पहचानता है (.xm संगीत प्रारूप) दोहराने स्थिति

मैं अनंत लूप में फास्ट ट्रैकर मॉड्यूल खेलने की कोशिश, लेकिन ऐसा करने बस दोहराने की स्थिति का पालन करने के बजाय, शुरुआत से संगीत को फिर से चलाएं।

उदाहरण:

import pygame 

pygame.mixer.init() 
pygame.mixer.music.load('/path/to/zeta_force_level_2.xm') 
pygame.mixer.music.play(-1) 

मैं क्या हासिल करने की कोशिश कर रहा हूँ (यहाँ मॉड्यूल https://api.modarchive.org/downloads.php?moduleid=153915#zeta_force_level_2.xm के लिए स्रोत है): पाश में प्ले मॉड्यूल संगीत, हर बार, बार-बार स्थिति पर पाशन पर नहीं ट्रैक की शुरुआत pygame का उपयोग आवश्यक नहीं है: मैं इसका उपयोग करता हूं क्योंकि मुझे ट्रैकर संगीत

खेलने के लिए उपयुक्त कुछ भी नहीं मिला है।

उत्तर

7

अपडेट: मैंने साइथन में एक साधारण डेमो लिखा है जो सफलतापूर्वक आपकी लिंक की गई .xm फ़ाइल चलाता है। यह मूल रूप से this c demo code का अनुवाद है। इसके लिए मेरा कोड this github page पर पाया जा सकता है। उबंटू में काम करने के लिए, मुझे libxmp-dev पैकेज स्थापित करना पड़ा। ध्यान दें कि फिलहाल सबकुछ खराब हो गया है, इसलिए इसे आपके प्रोजेक्ट में अधिक सीधे उपयोग करने योग्य होने की आवश्यकता होगी।


यह किसी भी तरह का निर्णायक उत्तर नहीं है। मैं इस तरह के कई संभावित नुकसान में भाग गया जिसने मुझे संदेह दिलाया है कि अगर यहां नौकरी के लिए सही उपकरण है, लेकिन मैं अब तक जो कुछ भी पाया है, उसके साथ-साथ कुछ सुझाव भी पेश करूंगा।

यह .xm फास्ट ट्रैकर एमओडी ule प्रारूप है कि में अपने ठेठ wav/ogg/एमपी 3 फ़ाइल के बजाय नमूना डेटा की एक सरणी खेलने से अलग है की तरह लग रहा है, तो आप को बनाने के लिए एक साथ अलग मिडी उपकरणों और नमूने गठजोड़ कर सकते हैं आप संगीत में, प्रश्न में जुड़े (मीठे) chiptune की तरह संगीत।

यह पता चला है कि एसडीएल/पायगम, ऐसी फाइलें चला सकता है, लेकिन सीमित तरीके से। Pygame के music मॉड्यूल को देखते हुए, set_pos फ़ंक्शन है। हालांकि, इसका उपयोग करने की कोशिश करने से मुझे pygame.error: set_pos unsupported for this codec दिया गया। दिलचस्प बात यह है कि, मैं वैकल्पिक start कीवर्ड के साथ pygame.mixer.music.play का उपयोग करके इस पर काम करने में सक्षम था। अधिकांश फ़ाइल प्रारूपों पर start फ़ाइल को शुरू करने से पहले सेकंड में ऑफसेट होता है (केवल गीत की पहली playthrough पर), इसका MOD फ़ाइलों के लिए .xm फ़ाइल जैसे फ़ाइल का अलग अर्थ है। Apparently, यह एमओडी फ़ाइल में pattern नंबर से मेल खाता है। नतीजतन, संभावित प्रारंभिक बिंदुओं की एक सीमित संख्या है जिसका प्रयोग पिगमेम में किया जा सकता है, इस पर आधारित है कि प्रत्येक पैटर्न फ़ाइल में कहां से शुरू होता है।

यदि आपके पास एक विशिष्ट पैटर्न संख्या है जिसे आप दिमाग से शुरू करना चाहते हैं, तो निम्न कोड लूप के लिए पर्याप्त होगा। ध्यान दें कि मैं pygame की घटना प्रणाली का उपयोग जब ध्वनि "लूप" उचित साथ ध्वनि फ़ाइल "पैटर्न ऑफसेट" करने के लिए समाप्त हो गया है देखने के लिए: इस बिंदु पर

import pygame 

pygame.init() 
pygame.mixer.music.load('zeta_force_level_2.xm') 
pattern = 10 
loop_event = pygame.USEREVENT + 1 
pygame.mixer.music.set_endevent(loop_event) 
pygame.mixer.music.play(start=pattern) 

while True: 
    for event in pygame.event.get(): 
     if event.type == loop_event: 
      pygame.mixer.music.play(start=pattern) 

, आप सोच हो सकता है वास्तव में क्या इन patterns कर रहे हैं?आप ffmpeg आपके सिस्टम पर स्थापित किया है, तो आप अपनी फ़ाइल पर ffprobe चलाने के लिए और निम्नलिखित उत्पादन प्राप्त कर सकते हैं:

Input #0, libmodplug, from 'zeta_force_level_2.xm': 
    Metadata: 
    name   : zeta force level 2 
    instrument  : by zabutom -- 
        : bye bye computer.. 
        : see you in a week 
    sample   : zeta force level 2 
    extra info  : 20 patterns, 10 channels, 3/14 instruments, 1/14 sample 
    Duration: 00:01:01.00, bitrate: 3 kb/s 
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s 

ऐसा लगता है कि इस फाइल में 20 पैटर्न जिसमें से आप के लिए प्रारंभिक स्थान के रूप में चुन सकते हैं देखते हैं की तरह पाश। अपने विशेष फाइल के बारे में और अधिक जानकारी प्राप्त करने के लिए आपको MilkyTracker जैसे किसी उपकरण में खोल सकते हैं (और संपादित!) आपकी फ़ाइल और इस तरह एक आउटपुट मिलता है:

enter image description here वहाँ MilkyTracker के लिए कुछ ट्यूटोरियल youtube पर ऑनलाइन कर रहे हैं, लेकिन ऐसा लगता है सॉफ्टवेयर के एक बहुत जटिल टुकड़े की तरह।

libxmp नामक लाइब्रेरी भी दिखाई देता है और इसके संबंधित python binding है। इसे एक साधारण पीसीएम सरणी में एमओडी फ़ाइल डेटा को "प्रस्तुत" करने के लिए आवश्यक रूपांतरण को संभालना चाहिए जिसे लाइब्रेरी में pyaudio या ओपनएएल के लिए बाध्यकारी किसी भी पायथन में खेला जा सकता है। किसी भी तरह से, ऐसा लगता है कि आपके लिए अपना काम खत्म हो गया है!

+0

libxmp-python दिलचस्प लग रहा है, लेकिन मुझे यह जांचने की ज़रूरत है कि यह सही तरीके से दोहराएगा या नहीं। यदि उत्तर दें तो मैं जवाब स्वीकार करूंगा, वैसे भी जवाब देने के लिए धन्यवाद। – MaxLunar

+0

@ मैक्सलुनर मैं शेष सप्ताह (4 और दिन) के लिए बक्षीस खुला रखूंगा, और यह धीरे-धीरे आपके प्रश्न के लिए बड़ी दृश्यता देगा। मैं सुझाव देता हूं कि अंत तक स्वीकृति के साथ प्रतीक्षा करने के लिए यह देखने के लिए कि क्या अन्य उत्तर प्रकट होते हैं, इस पर विचार करते हुए कि अस्वीकार्य प्रश्नों को उत्तर पाने की अधिक संभावना है। –

+0

@MaxLunar बस जिस लाइब्रेरी से मैंने लिंक किया था उसे आजमा रहा था और सोच रहा था कि आप किस ओएस प्लेटफॉर्म और पायथन संस्करण का उपयोग कर रहे हैं? ऐसा लगता है कि libxmp पायथन बाध्यकारी को python2 के साथ दिमाग में लिखा गया हो सकता है ... – CodeSurgeon

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