2013-03-21 6 views
10

मेरे पास एक आईओएस एप्लिकेशन है जो एक ही समय में विभिन्न ऑडियो प्रभाव और ऑडियो रिकॉर्ड करता है। आवेदन का उद्देश्य वर्तमान में महत्वपूर्ण नहीं है, लेकिन मुझे स्टॉक आईओएस ऑडियो प्रभावों में समस्याएं आ रही हैं।आईओएस सिस्टम कस्टम ऑडियो सत्रों के साथ लगता है

प्रभाव खेलने के लिए, मैं 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 पर एप्लिकेशन का परीक्षण कर रहा हूं, लेकिन सिम्युलेटर पर भी यही बात होती है।

तो, मैं सेटिंग्स के साथ क्या गलत कर रहा हूं? मैं सेटिंग्स को कैसे ठीक कर सकता हूं ताकि मैं अपने सभी ऑडियो सत्र सक्रिय रख सकूं और आईओएस सिस्टम को रख सकूं?

धन्यवाद! मेरे सवाल का यहाँ से बाहर

+0

क्या आपने PlayAndRecord को श्रेणी सेट करने का प्रयास किया है? यदि आप एक ही समय में खेलना और रिकॉर्ड करना चाहते हैं, तो आपको इसे करने की आवश्यकता होगी। – Mar0ux

+0

मैंने सवाल पूछने से पहले कोशिश की है। PlayAndRecord श्रेणी ध्वनि को कम मात्रा में खेलती है, लेकिन यह ** नहीं ** गायब कीबोर्ड ध्वनियों को वापस लाती है। – Legoless

उत्तर

1

की जांच: https://stackoverflow.com/questions/15680503/how-to-get-the-audio-level-of-the-microphone-without-disabling-system-sounds

कोई जवाब दुर्भाग्य से कर रहे हैं।रिकॉर्डिंग होने पर सिस्टम ध्वनियों को डिफ़ॉल्ट रूप से अक्षम कर दिया जाता है। मुझे उम्मीद है कि यह उन्हें गलती से दर्ज किया जा सकता है, जो कि ज्यादातर परिस्थितियों में आप जो चाहते हैं वह होगा।

आप UITextFieldDelegate प्रोटोकॉल को कार्यान्वित कर सकते हैं और textField:shouldChangeCharactersInRange:replacementString: को हर बार अपना स्वयं का क्लिक चला सकते हैं।

+0

अच्छा बिंदु, मुझे कहना होगा। हालांकि मैं क्लिक खेलना चाहता हूं। मैंने आपके द्वारा सुझाए गए कामकाज को पहले से ही लागू किया है, लेकिन आपके उत्तर के लिए धन्यवाद। – Legoless

+1

आपके प्रश्न को देखने के लिए ऊपर दिए गए लिंक को तोड़ दिया गया है। –

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