आप तो JFugue 5.x में, नमूना कोड के रूप में इस मिडी डेटा के 10 सेकंड पर कब्जा करने से एक MIDI डिवाइस है जावा द्वारा केवल MIDI एपीआई के साथ रिकॉर्ड करना चाहते हैं (javax.sound.midi। *) यह बहुत आसानी से किया जाता है। यह कॉपी और पेस्ट करने के लिए कोड नहीं है, लेकिन यह आपको अपने स्वयं के एमआईडीआई रिकॉर्डर प्रोग्रामिंग शुरू करने में मदद कर सकता है, जो वास्तव में काफी आसान है।
पहला चरण आपके इनपुट और आउटपुट मिडीडिवाइस को परिभाषित करना है। तो सबसे पहले आपको आईओ संभावनाओं की एक सूची मिलनी होगी और एक जीयूआई बनाना होगा जिसमें आप अपनी एमआईडीआई रिकॉर्डिंग और प्लेबैक के लिए इनपुट और आउटपुट डिवाइस का चयन कर सकते हैं।
Info[] infos = MidiSystem.getMidiDeviceInfo();
for(int i=0;i<infos.length;i++)
{
System.out.println(infos[i].getName() + " - " + infos[i].getDescription());
}
तो आपके MIDI डिवाइस की एक सूची है। इसके बाद आप मिडी डिवाइस का चयन करना चाहते हैं, उदाहरण के लिए आप इंफोस सरणी में इंडेक्स चुनना चाहते हैं।
MidiDevice inputDevice = MidiSystem.getMidiDevice(infos[x]);
MidiDevice outputDevice = MidiSystem.getMidiDevice(infos[y]);
आप कुछ ग्लोबल्स भी निर्दिष्ट करना चाहेंगे: अनुक्रमक, ट्रांसमीटर और रिसीवर।
Sequencer sequencer = MidiSystem.getSequencer();
Transmitter transmitter;
Receiver receiver;
अब एक रिकॉर्ड बटन है जिसे आप उपयोग करना चाहते हैं।
// Open a connection to your input device
inputDevice.open();
// Open a connection to the default sequencer (as specified by MidiSystem)
sequencer.open();
// Get the transmitter class from your input device
transmitter = inputDevice.getTransmitter();
// Get the receiver class from your sequencer
receiver = sequencer.getReceiver();
// Bind the transmitter to the receiver so the receiver gets input from the transmitter
transmitter.setReceiver(receiver);
// Create a new sequence
Sequence seq = new Sequence(Sequence.PPQ, 24);
// And of course a track to record the input on
Track currentTrack = seq.createTrack();
// Do some sequencer settings
sequencer.setSequence(seq);
sequencer.setTickPosition(0);
sequencer.recordEnable(currentTrack, -1);
// And start recording
sequencer.startRecording();
खबरदार, इस कोड MidiUnavailableExceptions फेंक सकता है और आप सभी चीजें आप एक अंत में बयान में खोल दिया है पर पास तरीकों फोन करना चाहिए।
लेकिन यह कोड की तरह दिखने का मूल केंद्र है। जैसे ही आप विधि sequencer.startRecording()
पर कॉल करते हैं, यह सब कुछ अनुक्रम seq
पर रिकॉर्ड करता है।
फिर आप रिकॉर्डिंग को रोकना चाहते हैं, और अनुक्रम को MIDI के रूप में फ़ाइल में सहेजने में सक्षम हो सकते हैं, या प्लेबैक कर सकते हैं। उदाहरण के लिए जब आप स्टॉप रिकॉर्ड बटन या कुछ दबाते हैं तो यह कोड हो सकता है।
// Stop recording
if(sequencer.isRecording())
{
// Tell sequencer to stop recording
sequencer.stopRecording();
// Retrieve the sequence containing the stuff you played on the MIDI instrument
Sequence tmp = sequencer.getSequence();
// Save to file
MidiSystem.write(tmp, 0, new File("MyMidiFile.mid"));
}
इसके अलावा रास्ते का वर्ग (एक दृश्य एकाधिक पटरियों हो सकता है) वास्तविक इनपुट डेटा, आप आसानी से एक प्राप्त विधि करके पहुंच सकते हैं शामिल हैं। ट्रैक वर्ग में मिडीइवेंट्स शामिल हैं।उदाहरण के लिए ट्रैक है:
MidiEvent 0: The C key is pressed
MidiEvent 1: The D key is pressed
MidiEvent 2: The C key of MidiEvent 0 is released
MidiEvent 3: The sustain pedal is pressed
etc...
और हर MidiEvent एक निश्चित टाइमस्टैम्प, जो मिडी Ticks में व्यक्त किया है, इस प्रकार आप आसानी से बढ़ रही है या प्रति सेकंड टिक की संख्या को कम करके गति बदल सकते हैं।
यहां सबसे कठिन समस्या यह है कि मिडीइवेंट बाइट कोड में व्यक्त किए जाते हैं, इस प्रकार आपको संदर्भ बाइट कोड शीट का उपयोग करना होगा जो आपको बताता है कि बाइट किस क्रिया का प्रतिनिधित्व करता है। यह आपको इसके साथ शुरू करना चाहिए: http://www.onicos.com/staff/iz/formats/midi-event.html
क्या आप ट्रैक क्लास का उपयोग करने के लिए कोड भी प्रदान कर सकते हैं? धन्यवाद। –
@AliSharabiani आप 'ट्रैक' को 'सूची' के रूप में देख सकते हैं। इसके लिए और भी कुछ नहीं है, [jraax.sound.midi.Track] पर यह ओरेकल जावा दस्तावेज़ भी देखें (https://docs.oracle.com/javase/7/docs/api/javax/sound/midi/Track। एचटीएमएल)। –
Yeti