2013-09-04 9 views
5

मैं MIDI फ़ाइल को पकड़ना, इसे पढ़ना चाहता हूं, और फिर डेटा को किसी प्रकार की डेटा संरचना में संग्रहीत करना चाहता हूं।MIDI से जावा डेटा संरचना (सूची, हैश मानचित्र, ???)

Reading MIDI Files

अब मुझे लगता है कि उत्पादन पकड़ें और उसे स्टोर करने के लिए एक तरह से यह पता लगाने की जरूरत है: इस साइट का उपयोग मैं फ़ाइल है, जो एक आकर्षण की तरह काम करता पढ़ने के लिए एक आसान तरीका मिल गया। एक हैश मैप आदर्श प्रतीत नहीं होता है क्योंकि कुंजी को अद्वितीय होने की आवश्यकता होती है और ऑब्जेक्ट की एक सूची बहुत अच्छी नहीं लगती है। मेरा सबसे अच्छा विकल्प क्या हो सकता है पर कोई विचार। मुझे लगता है कि मैं इसे एक पाठ या सीएसवी में आउटपुट कर सकता हूं ... विचार?

अपडेट: मेरे पास पहले से मौजूद कुछ और विवरण हैं।

यहाँ उत्पादन मैं (System.out.println के माध्यम से) हो रही है है:

@0 Channel: 1 Note on, E5 key=76 velocity: 127 
@192 Channel: 1 Note off, E5 key=76 velocity: 64 
@192 Channel: 1 Note on, D#5 key=75 velocity: 127 
@384 Channel: 1 Note off, D#5 key=75 velocity: 64 
@384 Channel: 1 Note on, E5 key=76 velocity: 127 

अब मैं सिर्फ इस सूचना के संचय का सबसे अच्छा तरीका खोजने की जरूरत है। मुझे शायद "क्यों" के बारे में पता होना चाहिए, मैं इसे भी करने की कोशिश कर रहा हूं। मैं एक और डेवलपर के साथ काम कर रहा हूं जो इस डेटा को लेने जा रहा है और स्क्रीन पर इसे प्रदर्शित करने के लिए बटिक (जिसे मैं कुछ भी नहीं जानता) का उपयोग कर रहा हूं।

सभी प्रतिक्रिया के लिए धन्यवाद ... मैं उनमें से प्रत्येक के आज रात को बारीकी से देखें देंगे ...

+1

पहले मिडी फ़ाइल संरचना की

जानकारी आप डेटा संरचना के बारे में सोच से पहले वस्तुओं और तरीकों की जरूरत है, मुझे लगता है, के बारे में सोच की जरूरत है। आपकी समस्या के संज्ञा और क्रियाएं क्या हैं? –

+0

यदि आप बस सीएसवी आउटपुट करना चाहते हैं, तो आउटपुट सीएसवी। आपको इसे डेटा संरचना में क्यों डालने की आवश्यकता है और फिर आउटपुट सीएसवी? – Bill

+0

होवरक्राफ्ट, मैंने थोड़ा और विस्तार दिखाने के लिए अपना प्रश्न संपादित किया है। मुझे लगता है कि मेरी समस्या का संज्ञा और क्रियाएं मिडी घटनाएं (नोट ऑन, नोट ऑफ, वेग, ट्रैक, आदि) और "स्टोर" या "लिखना" होगी। मैं पहले से ही आउटपुट उत्पन्न कर रहा हूं जो मुझे संज्ञाओं के बारे में चाहिए ... मुझे यकीन नहीं है कि क्रियाओं को पूरा करने के मामले में सबसे अच्छा विकल्प क्या है ... – user2745258

उत्तर

4

मिडी फ़ाइल विनिर्देशों पढ़ना, मुझे लगता है कि आप

public class MIDIFile { 
    enum FileFormat { 
     single_track, 
     syncronous_multiple_tracks, 
     assyncronous_multiple_tracks; 
    } 

    FileFormat file_format; 
    short numberOfTracks; 
    short deltaTimeTicks; 

    //Create Class for tracks, events, put some collection for storing the tracks, 
    //some collection for storing the events inside the tracks, etc 

    //Collection<Integer, MIDITrack> the type of Collection depends on application 

} 

public class MIDITrack { 
    int length; 
    //Collection<MIDIEvent> the type of Collection depends on application 
} 

public class MIDIEvent { 
    int delta_time; 
    int event_type; //Use of enum or final variables is interesting 
    int key; 
    int velocity; 
} 

ऐसा कुछ बनाना शुरू कर सकते आप केवल मिडी संदेशों (ताकि मिडी नहीं फ़ाइल) संग्रहीत करना चाहते हैं, तो आप संदेशों

public class MIDIEvent { 
    int delta_time; 
    int channel; 
    int event_type; //Use of enum or final variables is interesting 

    //two bytes, interpret according the message type 
    byte byte0; 
    byte byte1; 

    //or more memory consuming 
    byte key; 
    byte pressure; 
    byte controller; 
    short bend; 
} 

संग्रह के प्रकार आप की दुकान करने के लिए उपयोग आवेदन विशिष्ट होता है के लिए एक कक्षा कर सकता है, आप सूची के तत्वों का उपयोग कैसे करना चाहते हैं, और भी बहुत कुछ।

यदि आप संग्रह में MIDIMessages को सम्मिलित करना चाहते हैं और फिर पहले से अंतिम तक पढ़ना चाहते हैं तो आप एक लिंक्डलिस्ट (यह सूची का कार्यान्वयन) का उपयोग कर सकते हैं। लेकिन यदि आप किसी संदेश द्वारा संदेशों को संशोधित करना और तत्वों को एक्सेस करना चाहते हैं, तो आप एक ऐरेलिस्ट का उपयोग करना चाहेंगे (यह सूची का कार्यान्वयन भी है)। से http://faydoc.tripod.com/formats/mid.htm

+0

डिएगो, जब तक मैं सड़क के नीचे कुछ और नहीं देखता, मुझे लगता है मैं ArrayList विकल्प के साथ जाने जा रहा हूँ। जब मैं इसे प्राप्त करता हूं और काम करता हूं तो मैं अपना कोड पोस्ट करूंगा। उत्तर पर अतिरिक्त प्रयासों के लिए धन्यवाद ... बहुत गहन और सहायक। – user2745258

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