No se pudo reproducir el sonido del sistema después de cambiar a iOS 5

Así es como jugué un efecto de sonido de pitido en iOS 4 :

SystemSoundId beepOnSoundId; CFURLRef soundUrl = CFBundleCopyResourceURL( CFBundleGetMainBundle(), CFSTR("beep"), CFSTR("wav"), NULL ); // soundUrl logged: // file://localhost/var/mobile/Applications/ ... beep.wav AudioServicesCreateSystemSoundID(soundUrl, &beepOnSoundId); // beepOnSoundId logged: 4097 AudioServicesPlaySystemSound(beepOnSoundId); 

Dejé de funcionar, cuando actualicé mi dispositivo a iOS 5 . No oigo nada. Salí todas las variables y ninguna fue nula o 0.

¿Cómo ha cambiado la API en iOS 5 que rompe mi código de reproducción de sonido?

Actualizar

El problema puede deberse a que tengo un AVCaptureSession ejecutándose mientras toco el sonido. iOS 5 de alguna manera no te permite hacer esto más. Necesito escuchar un pitido mientras grabo algo de la camera.

Este informe de errores podría estar relacionado con su pregunta, si tiene una AVCaptureSession ejecutándose.

En iOS 5, cuando se utiliza una llamada de AudioServicesPlaySystemSound, no funcionará cuando hay una AVCaptureSession activa con un dispositivo de audio activo.

Un problema podría ser que en ios 5 cuando llame a AudioServicesPlaySystemSound, dejará de funcionar si hay una AVCaptureSession activa con un dispositivo de audio activo.

Compruebe también los nombres de las importaciones en sus files, asegúrese de que la import de audiotoolbox esté en todos sus controlleres de vista. También fui a una guía y recibí esto por ti 🙂 Dejaré el nombre del website en la parte inferior

Paso 1: Importe el marco de AudioToolbox Comience importando el marco de Audio Toolbox en su aplicación para que los Servicios de sonido del sistema estén disponibles para su código. Para hacerlo, select el proyecto "PhoneAppSkin" en el panel Project Navigator en Xcode, luego select "PhoneAppSkin" en "TARGETS", y finalmente select la pestaña "Build Phases". Después de hacerlo, su pantalla debería verse así:

introduzca la descripción de la imagen aquí

Luego, click el menu desplegable "Enlace binary con bibliotecas" y click el símbolo "+" para agregar un nuevo marco a la fase de enlace de nuestro proyecto.

introduzca la descripción de la imagen aquí

Finalmente, busque el marco de trabajo "AudioToolbox" en la window emergente y luego click "Agregar".

introduzca la descripción de la imagen aquí

A continuación, abra el file PhoneViewController.h y agregue la línea necesaria para importar realmente el marco de herramientas de Audio Toolbox en su class:

 #import <UIKit/UIKit.h> #import <AudioToolbox/AudioToolbox.h> 

Las funciones de Audio Toolbox deberían funcionar ahora

Sitio web obtuve las imágenes de: http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_playing-systemsoundid/

Tengo casi el mismo código y me funciona en iOS5 con un video y sesiones de audio en los medios. Si tiene todo el código en una function para reproducir el sonido, el problema puede ser que el object SystemSoundID se desasigne antes de que se pueda reproducir el sonido, o el problema puede ser con la URL. Pero supongo que es el primero.

Mira, el siguiente código funciona:

La statement SystemSoundID está en el encabezado del object y el object vive lo suficiente como para reproducir el sonido.

  SystemSoundID soundID; 

El AudioServicesCreateSystemSoundID está en la initialization del object.

  AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: @"sound" ofType:@"wav"]], &soundID); 

Luego puede usar AudioServicesPlaySystemSound donde desee dentro del object.

  AudioServicesPlaySystemSound(soundID); 

Intente poner estos códigos de piezas en los lugares apropiados y debe escuchar el sonido.

En mi constructor:

 [[AVAudioSession shanetworkingInstance] setCategory: AVAudioSessionCategoryPlayback error: nil]; UInt32 doSetProperty = 1; AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); [[AVAudioSession shanetworkingInstance] setActive: YES error: nil]; NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video-sent" ofType:@"caf"]]; self.sentSound = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; [self.sentSound prepareToPlay]; 

La function playSentSound

 - (void)playSentSound { DLog(@"PLay Sound %@", self.sentSound); [self.sentSound play]; } 

luego, en el código, simplemente lo llamo

 [self playSentSound]; 

La key aquí son las primeras 4 líneas … 😉