2013-01-13 10 views
11

स्पष्टीकरण के लिए: मैं MIDI फ़ाइल उत्पन्न नहीं करना चाहता हूं और न ही मैं MIDI फ़ाइल खेलना चाहता हूं, मैं फ्लाई पर MIDI नोट्स खेलना चाहता हूं।मैं जावास्क्रिप्ट के साथ मनमानी MIDI नोट्स कैसे खेलूं?

मैंने MID12 लाइब्रेरी के रूप में https://github.com/mudcube/MIDI.js का उपयोग करने का प्रयास किया, और यह कुछ हद तक काम करता है।

मैं MIDI.noteOn(0,midiNumber,100); पर कॉल करके नोट्स चलाने में सक्षम हूं। हालांकि, यह कुछ सेकंड के लिए एक नोट बजाता है और तब मैं कागजात बंद करता हूं भले ही मैं MIDI.noteOff पर कॉल न करूं।

मुझे विश्वास नहीं है कि एमआईडीआई कैसे काम करने का इरादा रखता है। मैं नोट पर कॉल करने में सक्षम होना चाहता हूं और जब तक नोट को कॉल नहीं किया जाता है तब तक एक नोट प्ले और बनाए रखें।

लक्षित ब्राउज़र: आधुनिक फ़ायरफ़ॉक्स/क्रोम।

var playChannel = function (id) { 
    var note = notes[id]; 
    if (!note) return; 
    var nid = (channel_nid + 1) % channels.length; 
    var time = (new Date()).getTime(); 
    var audio = channels[nid]; 
    channel_map[note.id] = audio; 
    audio.src = MIDI.Soundfont[note.id]; 
    audio.volume = volume; 
    audio.play(); 
    channel_nid = nid; 
}; 

आप playChannel देख सकते हैं किसी दिए गए नोट लोड और यह खेलेंगे:

उत्तर

9

यह एक बग MIDI.js के अपने संस्करण है। चूंकि कोई autoloop विशेषता नहीं है, यह दोहराना नहीं होगा, इसलिए noteOff का कॉल आवश्यक नहीं है। यदि आप audio तत्व ऑटो-लूप पर सेट करते हैं तो आप इसे स्वयं ठीक कर सकते हैं।

+2

वाह। एक बग देखा अच्छा लगा। +1, हालांकि आप पुल अनुरोध नहीं करना चाहते हैं? –

+0

@ एच 2CO3: मैं वर्तमान में अपने पीसी पर नहीं हूं और मुझे अभी भी जिथब इंटरफ़ेस (मैं बिटबकेट पसंद नहीं करता) में उपयोग नहीं किया जाता है। हालांकि, मुझे विश्वास है कि कुछ एप्लिकेशन इस बग का उपयोग करते हैं और काम करना बंद कर देंगे, क्योंकि उन्होंने 'नोटऑफ' का उपयोग नहीं किया है (सभी के बाद संभव हो सकता है)। शायद ~ 11h (21:00 यूटीसी + 1) में। – Zeta

+0

आह, कोड पढ़ने के दौरान मैंने यह बग देखा लेकिन यह सुनिश्चित नहीं था कि फिक्स क्या था। कुछ कार्यान्वयन के रूप में देखकर नोटऑफ में कोई भी कोड नहीं है() यह बग वास्तव में एक इच्छित डिज़ाइन दोष हो सकता है। मैं विरासत उद्देश्यों के लिए कोड संशोधित करने के खिलाफ अपने योग्यता से सहमत हूं। आपको इसके बजाय कांटा अनुरोध करना चाहिए। अभी के लिए मैं सिर्फ बंदर पैच करूँगा और देखें कि यह काम करता है या नहीं। –

1

वेब MIDI API के लिए Google। यह अभी तक सभी ब्राउज़रों में लागू नहीं है, लेकिन क्रिस विल्सन द्वारा गिटहब में एक पॉलीफिल है।

4

वैकल्पिक रूप से, http://mohayonao.github.io/timbre.js/ विभिन्न ध्वनि जनरेटर प्रदान करता है जिसके लिए नोट नोट और नोटऑफ कहा जा सकता है।

2

विभिन्न उपकरण अलग-अलग व्यवहार करते हैं। एक पियानो में एक "आंतरिक" नोट है, लेकिन एक अंग नहीं है।

इसके अलावा, noteOn और noteOff कार्यान्वयन पर निर्भर करता है। एचटीएमएल 5 कार्यान्वयन में modcu.be प्रत्येक नोट के लिए ओजीजी फ़ाइल चलाता है, और यह noteOff पर बिल्कुल ध्यान नहीं देता है। जब ओजीजी समाप्त होता है, तो ध्वनि बंद हो जाती है। और autoloop इस मामले में पियानो के लिए मदद नहीं करेगा।

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