2013-01-04 14 views
7

में कोई विलंबता के साथ ध्वनि प्रभाव बजाना, जब लोग मेरे ऐप में कुछ बटन दबाते हैं तो मैं कुछ सरल ध्वनि प्रभाव खेलना चाहता हूं और मैंने कई चीजों की कोशिश की है, लेकिन मुझे हमेशा एक विलंबता मिलती है जो ध्वनि को बाहर निकलती है सिंक।उद्देश्य-सी

मैंने ट्यूटोरियल here का पालन किया है, इसलिए मैंने ऑडियो सेवाओं में निर्माण करने की कोशिश की है, लेकिन इसमें विलंबता है और मैंने AVAudioPlayer को आजमाया है, लेकिन इसमें विलंबता भी थी, भले ही मैंने "readyToPlay" "।

क्या मुझे वास्तव में एक आसान और गन्दा लाइब्रेरी स्थापित करना है जैसे Finch मेरे सरल ऐप में कोई विलंबता के साथ सरल ध्वनि प्रभाव प्राप्त करने के लिए?

आशा है कि आप मेरे लिए चीजों को स्पष्ट कर सकते हैं!

अद्यतन

ऑडियो सेवाओं के लिए

कोड:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4" 
             withExtension:@"aif"]; 
AudioServicesCreateSystemSoundID((CFURLRef)soundURL, &sound1); 
AudioServicesPlaySystemSound(sound1); 
viewDidLoad में AVAudioPlayer के लिए

कोड:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4" 
             withExtension:@"aif"]; 
self.avSound = [[AVAudioPlayer alloc] 
     initWithContentsOfURL:soundURL error:nil]; 
[self.avSound prepareToPlay] 

कोड विधि में AVAudioPlayer मैं कहाँ फ़ाइल खेलना चाहते हैं के लिए:

[self.avSound play]; 
+5

बेवकूफ सवाल है, लेकिन आप सुनिश्चित हैं वहाँ नहीं है मैं ध्वनि की मात्रा के साथ ध्वनि viewDidLoad में नीचे खेल रहा समाप्त हो गया आपकी ऑडियो फाइल की शुरुआत में चुप्पी का एक पल? क्या आपने इसे अदभुतता के माध्यम से रखा है? –

+0

इसके अलावा, आप कैसे परीक्षण कर रहे हैं? डिवाइस? सिम्युलेटर? यदि डिवाइस पर है तो आप किस हार्डवेयर पर परीक्षण कर रहे हैं? –

+0

क्या आपने एसओ खोजा है। ऐसा लगता है कि इस मुद्दे पर कई अन्य प्रश्न हैं। कुछ सुझाव देते हैं कि कुछ हैक्स प्री-लोड करने के लिए, दूसरों को सिस्टम ध्वनियों का उपयोग करने का सुझाव है (SystemSoundID) – KlausCPH

उत्तर

2

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

कुछ इस तरह

SystemSoundID blID; 
    SystemSoundID cID; 

    +(void)doInit 
    { 
      if (spinitialized){ 
        AudioServicesPlaySystemSound (blID); 
        return; 
      } 



      NSString *str = [[NSBundle mainBundle] pathForResource:@"ding.wav" ofType:@""]; 
      NSURL *uref = [NSURL fileURLWithPath:str]; 
      OSStatus error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &cID); 
      if (error) NSLog(@"SoundPlayer doInit Error is %ld",error); 

      str = [[NSBundle mainBundle] pathForResource:@"blank.wav" ofType:@""]; 
      uref = [NSURL fileURLWithPath:str]; 
      error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &blID); 
      if (error) NSLog(@"SoundPlayer doInit Error is %ld",error); 

      AudioServicesPlaySystemSound (blID); 

      spinitialized = YES; 
    } 

तब मैं सिर्फ किसी देरी का उपयोग किए बिना "डिंग" निभा सकता है:

AudioServicesPlaySystemSound (cid); 
+0

सुझाव के लिए धन्यवाद। मैंने कुछ ऐसा किया (नीचे देखें)। –

0

एक बात मैंने पाया है कि मदद करने के लिए है लगता है, एक ध्वनि के दूसरे भाग का एक अंश खेलने के लिए, स्क्रीन पर प्रवेश करने पर ध्वनि ध्वनि खेला जा सकता है। आंतरिक वस्तुओं, सामान में पेजिंग, आदि का आवंटन

(। मैं देख सकते हैं कि यह माइक एम के दृष्टिकोण के समान है)

1

समाधान

मैं - यह करने के लिए "प्रधानमंत्री" ध्वनि तंत्र लगता है ऊपर माइक के समान कुछ करने के समाप्त हो गया। जहाँ मैं इसे खेलने मैं कर समारोह में

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4" 
               withExtension:@"aif"]; 
self.plops = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; 
[self.plops setVolume:0.0]; 
[self.plops play]; 

और फिर:

[self.plops setVolume:1.0]; 
[self.plops play];