2016-08-15 27 views
5

Snapchat'a benzer bir uygulamada, hem ses çıkışı hem de giriş kullanan ve diğer uygulamalardan ses karıştırma özelliğini destekleyen bir titreşim gerçekleştirmeye çalışıyorum ancak başlangıçta daha zor bir görev gibi görünüyor. olacağını düşündüm. Bilmek önemli, oynatma veya kayıt sırasında titremeye çalışmıyorum. Ben konuyla ilgili bulabildiğim tüm belgeleri okuma itibaren bu anlıyorum gelmiş şudur:Kayıt uygulamasında titreşim gerçekleştirme

, ben AVAudioSessionCategoryPlayAndRecord
  • Yapımı kullanmak gerekir yürütme ve kaydetme (çıkış ve giriş) hem desteklemek amacıyla
    • AudioServicesPlaySystemSound (kSystemSoundID_Vibrate) aracılığıyla titreşen telefon AVAudioSessionCategoryPlayAndRecord dahil olmak üzere kayıt kategorilerinde desteklenmez.
    • Diğer uygulamaların ses çalmasını sağlamak, AVAudioSessionCategoryOptionMixWithOthers seçeneğini ekleyerek yapılabilir. Bu nedenle

    , benim app temsilci bunu:

    NSError *error = nil; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error]; 
    

    Denedim ama en başarısız titreşim yapmaya olası çözümler

    şunlardır:

    • devre dışı bırakılması AVAudioSession paylaştı Titreşmeden önce ve sonra düz bir şekilde etkinleştirin.

      [[AVAudioSession sharedInstance] setActive:NO error:nil];   
      AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); 
      [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
      

      Bu başarıyla bir film kaydetmek çalıştığınızda, ses eğildi edilir (veya başka bir şey çok sessiz kalmayı neden olan), daha sonra titreşim yapar fakat. Ayrıca, önce I/O aygıtlarını çıkarmadan bir oturumu devre dışı bırakmama izin verildiğini söyleyen bir hata da veriyor. Titreşimden önce kategoriyi değiştirme ve sonra da onu değiştirme.

    • [[AVAudioSession sharedInstance] setActive:NO error:nil]; 
      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 
      [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
      
      AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
      
      [[AVAudioSession sharedInstance] setActive:NO error:nil]; 
      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:nil]; 
      [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
      

      Bu çözüm her seferinde karşınıza çıkıyor ve sonra da benim için çalışmıyor gibi görünüyor. Kategoriler ayarlanmış olsa bile titreşim oluşmaz. AVCaptureSession cihazımda usesApplicationAudioSession = YES ayarlıyorum, ancak henüz işe yaramadıysanız bu geçerli bir çözüm olabilir.

    Kaynaklar:

  • +0

    titreşimle çalışırken kayıt herhangi 'AVAudioRecorder' örneği var mı:

    Örtmek burada onlar eklenmiştir kadarıyla iOS sürümleri tüm oynanabilir sesler ve bağlantısıdır daha sesleri ile ilgilendiklerini? – spassas

    cevap

    1

    UIImpactFeedbackGenerator

    UISelectionFeedbackGenerator

    UINotificationFeedbackGenerator

    https://developer.apple.com/reference/uikit/uifeedbackgenerator#2555399:Sen desteklenen cihaz gereksinimleri vardır, ama daha yeni cihazlar için, aşağıdakiler gibi yeni taptic motor API'leri kullanabilirsiniz söylemedi

    +0

    Teşekkürler, fakat daha eski cihazları da desteklemem gerekiyor –

    +0

    . Teşekkürler! – atomkirk

    +2

    Bu çözümü denedim ancak uygulamanın kaydedildiği bir sorun var gibi görünüyor. FeedbackGeneratorlar çalışmıyor – vaberer

    1

    Yani, son zamanlarda benim app basit bip oynamaya çalışıyordum ve yapmanın yöntemlerinden biri bu yüzden tökezledi geçerli:

    AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID); 
    

    Sistem, tüm iOS sürümlerinde desteklendiği /System/Library/Audio/UISounds/ sistem sesini destekleyen bir işlevdir.

    ses 1350

    RingerVibeChanged (titreşim) eşittir. Böylece, yaklaşık 0,5 saniye titreşir. ( ). http://iphonedevwiki.net/index.php/AudioServices

    +0

    Bir titreşim gerçekleştirmek için AudioServicesPlaySystemSound'u kullanmakta olduğum sorun. KSystemSoundID_Vibrate yerine (yalnızca 4095 için bir takma addır) 1350'yi kullanmak fark yaratmaz. –

    İlgili konular