2013-07-30 15 views
6

Ich entwickle eine Aufnahmeanwendung und möchte einen Ton abspielen, wenn die Aufnahme beginnt.AudioServicesPlaySystemSound, während AVCaptureSession aktiv ist

Leider scheint es, dass es seit iOS 5 nicht möglich ist, einen Systemsound wiederzugeben, wenn ein AVCaptureSession mit einem Audiogerät aktiv ist.

Hier ist der relevante Teil des Codes ich benutze

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"]; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &_recStartSound); 

    //... 

    if ([self.captureManager setupSession]) { 
     // ... 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      [self.captureManager.session startRunning]; 
     }); 

     // ...      
    } 
} 

Später, ich nenne nur AudioServicesPlaySystemSound(_recStartSound) und nichts geht weiter. Allerdings, wenn ich den gleichen Anruf vor das Session-Setup machen, wird der Sound wie erwartet abgespielt.

Ich fand diesen bug report, die genau relevant für mein Problem ist, sowie this und this Frage, aber ich konnte keine Abhilfe in keinem von ihnen finden.

Wie kann ich kurz vor Beginn der AV-Aufnahme einen kurzen Ton wiedergeben?

+0

Spielen Sie den Ton und starten Sie dann die Aufnahme? –

+0

Dies ist eine sehr ähnliche vorherige Frage: http://stackoverflow.com/questions/16309802/play-system-sound-while-recording-video-audio –

+0

kann jemand bitte helfen Sie mir http mit dieser Frage://Paketüberfluss.com/questions/21059607/How-to-Use-Vibration-während-Aufnahme-iphone5-ios –

Antwort

0

Spielen Sie den Ton mit AVAudioPlayer statt.

+0

Ich verstehe nicht, warum dies abgelehnt wird. Dies funktioniert tatsächlich und löst das, worum sich die Frage dreht (einen Ton abspielen, während eine AVCaptureSession aktiv ist). – simonfi

0

Erweiterung sc0rp10n Antwort, die Änderungen an dem Code in der Frage wäre einfach:

Initialisieren des Sound-Player (_recStartSound vom Typ AVAudioPlayer sein *):

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"]; 
    _recStartSound = [[AVAudioPlayer alloc] initWithContentsOfURL: soundURL error: NULL]; 

    ... 
} 

Wenn Sie die spielen wollen Ton:

[_recStartSound play]; 
0

Siehe Are there any other iOS system sounds available other than 'tock'?

Nach einigen Versuchen mit Systemsounds, auf iOS 8.1.3/iPhone 6 konnte ich diese zwei spielen:

AudioServicesPlaySystemSound (1114);

und

AudioServicesPlaySystemSound (1113);

erfordert nur eine Zeile Code um den Ton zu spielen nach der Linksetzung:

  • AudioToolbox/AudioToolbox.h

    (siehe für weitere Einzelheiten über Link)

Und hier ist eine Teilliste von Sounds verfügbar (aus den Kommentaren in den obigen) http://iphonedevwiki.net/index.php/AudioServices

Verwandte Themen