मेरे पास एक आईओएस एप्लिकेशन है जो एक ही समय में विभिन्न ऑडियो प्रभाव और ऑडियो रिकॉर्ड करता है। आवेदन का उद्देश्य वर्तमान में महत्वपूर्ण नहीं है, लेकिन मुझे स्टॉक आईओएस ऑडियो प्रभावों में समस्याएं आ रही हैं।आईओएस सिस्टम कस्टम ऑडियो सत्रों के साथ लगता है
प्रभाव खेलने के लिए, मैं CocosDenshion
एपीआई से SimpleAudioEngine
का उपयोग (जो AVAudioPlayer
का उपयोग करता है, जहाँ तक मैं देख सकते हैं)। प्रभाव प्रीलोड किए गए हैं और वे ठीक काम करते हैं (मैं वास्तव में उन्हें बटन, स्क्रॉलिंग और इसी तरह से चलाता हूं)। प्रभाव निम्नलिखित कोड के साथ खेला जाता है:
willFinishLaunchingWithOptions
में विधि:
[[SimpleAudioEngine sharedEngine] preloadEffect:@"sound.wav"];
अन्य तरीकों में जब खेल की जरूरत है:
[[SimpleAudioEngine sharedEngine] playEffect:@"sound.wav"];
कोई चमत्कार यहाँ है, लेकिन एक ही समय में, मैं कर रहा हूँ AVCaptureSession
एपीआई के साथ अंतर्निहित माइक्रोफोन से शोर रिकॉर्डिंग। कैप्चर सत्र कोड वेब पर पाए गए उदाहरणों में से एक है।
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
captureSession = [[AVCaptureSession alloc] init];
NSError *error = nil;
captureAudioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];
if ([captureSession canAddInput: captureAudioDeviceInput])
{
[captureSession addInput:captureAudioDeviceInput];
}
captureAudioDataOutput = [AVCaptureAudioDataOutput new];
if ([captureSession canAddOutput:captureAudioDataOutput])
{
[captureSession addOutput:captureAudioDataOutput];
}
// Create a serial dispatch queue and set it on the AVCaptureAudioDataOutput object
dispatch_queue_t audioDataOutputQueue = dispatch_queue_create("AudioDataOutputQueue", DISPATCH_QUEUE_SERIAL);
[captureAudioDataOutput setSampleBufferDelegate:self queue:audioDataOutputQueue];
dispatch_release(audioDataOutputQueue);
[captureSession startRunning];
कोड के दोनों भाग एक-एक करके काम कर रहे हैं। लेकिन जब वे दोनों एक ही समय में सक्रिय होते हैं, उनमें से एक दूसरे को तोड़ देता है। उदाहरण के लिए: माइक्रोफ़ोन किसी समस्या के बिना डेटा पढ़ रहा है, जब तक कि एक ध्वनि प्रभाव नहीं खेला जाता है।
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
यह AVCaptureDevice
और AVCaptureSession
बनाने से पहले किया जाता है: मैं mixWithOthers
श्रेणी है, जो निम्नलिखित कोड के साथ किया जाता सक्रिय करने के लिए इस के चारों ओर एक रास्ता मिल गया। एप्लिकेशन इस तरह काम करता है, ध्वनि बजाई जाती है और माइक्रोफ़ोन डेटा पढ़ता है। हार्डवेयर बटन CocosDenshion SimpleAudioEngine
(म्यूट और वॉल्यूम) पर भी काम कर रहे हैं।
लेकिन स्पष्ट रूप से, एप्लिकेशन में एक बग है।
जब म्यूट अक्षम होता है और एप्लिकेशन ध्वनि बजा रहा है, तो आईओएस कीबोर्ड टेक्स्टफिल्ड पर ध्वनि क्लिक नहीं किया जाता है। मैं क्लिक करने के लिए क्लिक करना चाहता हूँ।
मैंने कोड को थोड़ा डीबग किया है और स्पष्ट रूप से ऑडियो सत्र सेटिंग्स के साथ कुछ करना है। यदि मैं श्रेणी को AVAudioSessionCategorySoloAmbient
पर सेट करता हूं, तो क्लिक ध्वनियां बजायी जाती हैं, लेकिन बहुत कम मात्रा में (वॉल्यूम अधिकतम हो जाता है और अधिकतम ध्वनि पर एप्लिकेशन ध्वनियां अच्छी तरह से) पर चलती हैं। और यह एक और समस्या देता है, सोलोएम्बेंट मेरे कैप्चर सत्र को रद्द करता है, जो समझ में आता है।
मैं आईफोन 5 पर एप्लिकेशन का परीक्षण कर रहा हूं, लेकिन सिम्युलेटर पर भी यही बात होती है।
तो, मैं सेटिंग्स के साथ क्या गलत कर रहा हूं? मैं सेटिंग्स को कैसे ठीक कर सकता हूं ताकि मैं अपने सभी ऑडियो सत्र सक्रिय रख सकूं और आईओएस सिस्टम को रख सकूं?
धन्यवाद! मेरे सवाल का यहाँ से बाहर
क्या आपने PlayAndRecord को श्रेणी सेट करने का प्रयास किया है? यदि आप एक ही समय में खेलना और रिकॉर्ड करना चाहते हैं, तो आपको इसे करने की आवश्यकता होगी। – Mar0ux
मैंने सवाल पूछने से पहले कोशिश की है। PlayAndRecord श्रेणी ध्वनि को कम मात्रा में खेलती है, लेकिन यह ** नहीं ** गायब कीबोर्ड ध्वनियों को वापस लाती है। – Legoless