अच्छी शाम को चलाएं। मैं गुणवत्ता वाले ध्वनि बैंक के साथ एक साधारण मिडी खिलाड़ियों को लिखने की कोशिश कर रहा हूं। मिडी फाइलों को चलाने की समस्या का सामना करना पड़ा। समस्या यह है कि मिडी (ड्रम, पैड, बास, synth आदि) के सभी पटरियों खेला, लेकिन वे एक ही उपकरण खेलते हैं। मुझे ओएस एक्स बी के लिए एक समाधान मिला, मुझे आईओएस के लिए एक समाधान की आवश्यकता है। क्या मुझे प्रत्येक उपकरण ऑडियो के लिए KAudioUnitSubType_Sampler के साथ बनाना होगा?बहु-उपकरण MIDI फ़ाइल IOS
संकेत है कि चयनित समय पर चयनित चैनल पर उपकरण को बदलना संभव है? इसे कैसे कार्यान्वित किया जा सकता है? ।। मेरी अंग्रेजी ((
यहाँ मेरी कोड है, यह ठीक से काम नहीं करता है के लिए खेद है:
// Create a client
MIDIClientRef virtualMidi;
Check(MIDIClientCreate(CFSTR("Virtual Client"),
MyMIDINotifyProc,
NULL,
&virtualMidi));
// Create an endpoint
MIDIEndpointRef virtualEndpoint;
Check(MIDIDestinationCreate(virtualMidi, CFSTR("Virtual Destination"), MyMIDIReadProc, samplerUnit, &virtualEndpoint));
// Initialise the music sequence
NewMusicSequence(&midiSequence);
if (!midiFilePath) {
midiFilePath = [[NSBundle mainBundle]
pathForResource:@"carelesswhisper"
ofType:@"mid"];
}
NSLog(@"midiFilePath %@", midiFilePath);
// Create a new URL which points to the MIDI file
NSURL * midiFileURL = [NSURL fileURLWithPath:midiFilePath];
MidiParser *midiParser = [[MidiParser alloc] init];
NSData *data = [NSData dataWithContentsOfFile:midiFilePath];
[midiParser parseData:data];
NSString *midiInfo = [midiParser log];
NSLog(@"midiInfo %@", midiInfo);
MusicSequenceLoadFlags loadFlags = 0;
loadFlags = kMusicSequenceLoadSMF_ChannelsToTracks;
MusicSequenceFileLoad(midiSequence, (__bridge CFURLRef) midiFileURL, 0, loadFlags);
// Initialise the music player
NewMusicPlayer(&midiPlayer);
// ************* Set the endpoint of the sequence to be our virtual endpoint
MusicSequenceSetMIDIEndpoint(midiSequence, virtualEndpoint);
if (!soundBankFilePath) {
soundBankFilePath = [[NSBundle mainBundle] pathForResource:@"SGM-V2.01-1" ofType:@"sf2"];
}
NSLog(@"soundBankFilePath %@", soundBankFilePath);
NSURL *presetURL = [NSURL fileURLWithPath:soundBankFilePath];
// Initialise the sound font
AUSamplerInstrumentData bpdata;
bpdata.fileURL = (__bridge CFURLRef) presetURL;
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB = kAUSampler_DefaultBankLSB;
bpdata.instrumentType = kInstrumentType_SF2Preset;
// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty(samplerUnit,
kAUSamplerProperty_LoadInstrument,
kAudioUnitScope_Global,
0,
&bpdata,
sizeof(bpdata));
MusicPlayerSetSequence(midiPlayer, midiSequence);
// Called to do some MusicPlayer setup. This just
// reduces latency when MusicPlayerStart is called
// MusicPlayerPreroll(midiPlayer);
// Starts the music playing
MusicPlayerStart(midiPlayer);
// Get length of track so that we know how long to kill time for
MusicTrack track;
MusicTimeStamp len;
UInt32 sz = sizeof(MusicTimeStamp);
MusicSequenceGetIndTrack(midiSequence, 1, &track);
MusicTrackGetProperty(track, kSequenceTrackProperty_TrackLength, &len, &sz);
while (1) { // kill time until the music is over
usleep (3 * 1000 * 1000);
MusicTimeStamp now = 0;
MusicPlayerGetTime (midiPlayer, &now);
if (now >= len)
break;
}
हैलो, तो कैसे आप पटरियों को अलग करने और एक अलग AUSampler लिए हर एक को आवंटित करने में कामयाब था ?? मैं पिछले घंटों के लिए इसे समझने की कोशिश कर रहा हूं> _ < – Hazneliel
मिडी उपकरणों की वांछित संख्या बनाएं -> ऑडियोयूनीट midiUnit_0, midiUnit_1, midiUnit_2, midiUnit_3, midiUnit_4, midiUnit_5; ग्राफ कॉन्फ़िगर करें -> चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_0, 0, मिक्सर नोड, 0)); चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_1, 0, मिक्सर नोड, 1)); चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_2, 0, मिक्सर नोड, 2)); चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_3, 0, मिक्सर नोड, 3)); चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_4, 0, मिक्सर नोड, 4)); चेक (AUGraphConnectNodeInput (ग्राफ, midiNode_5, 0, मिक्सर नोड, 5)); – John
हाय जॉन मैं वही करने की कोशिश कर रहा हूं लेकिन सफलता के बिना। क्या आप अपना शेष कोड देकर मदद कर सकते हैं? उदाहरण के लिए "न्यूम्यूजिक सिकेंस" और "न्यू म्यूजिकप्लेयर" विधियां। बहुत बहुत धन्यवाद –