buscar ios audio

buscar - Reproducir un sonido corto en iOS



find my iphone (13)

Rápido

Las otras respuestas aquí usan Objective-C, así que estoy proporcionando una versión de Swift aquí. Swift utiliza el conteo automático de referencias (ARC), por lo que no estoy al tanto de ningún problema de pérdida de memoria con esta respuesta (como se advirtió en la respuesta aceptada).

Usando AudioToolbox

Puede utilizar el marco AudioToolbox para reproducir sonidos cortos cuando no necesita mucho control sobre cómo se reproducen.

Así es como lo configuraría:

import UIKit import AudioToolbox class PlaySoundViewController: UIViewController { var soundURL: NSURL? var soundID: SystemSoundID = 0 @IBAction func playSoundButtonTapped(sender: AnyObject) { let filePath = NSBundle.mainBundle().pathForResource("yourAudioFileName", ofType: "mp3") soundURL = NSURL(fileURLWithPath: filePath!) if let url = soundURL { AudioServicesCreateSystemSoundID(url, &soundID) AudioServicesPlaySystemSound(soundID) } } }

Notas:

Usando AVAudioPlayer

Al importar el marco AVFoundation , puede usar AVAudioPlayer . Funciona tanto para clips de audio cortos como para canciones largas. También tiene más control sobre la reproducción que con el método de AudioToolbox.

Así es como lo configuraría:

import UIKit import AVFoundation class PlaySoundViewController: UIViewController { var mySound: AVAudioPlayer? // a button that plays a sound @IBAction func playSoundButtonTapped(sender: AnyObject) { mySound?.play() // ignored if nil } override func viewDidLoad() { super.viewDidLoad() // initialize the sound if let sound = self.setupAudioPlayerWithFile("yourAudioFileName", type: "mp3") { self.mySound = sound } } func setupAudioPlayerWithFile(file: NSString, type: NSString) -> AVAudioPlayer? { let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String) let url = NSURL.fileURLWithPath(path!) var audioPlayer: AVAudioPlayer? do { try audioPlayer = AVAudioPlayer(contentsOfURL: url) } catch { print("Player not available") } return audioPlayer } }

Notas:

Creo que podría usar AVAudioPlayer para reproducir un sonido, sin embargo, lo que necesito es reproducir un sonido corto y no necesito ningún bucle ni un control preciso del volumen, etc.

¿Hay una forma fácil de hacer esto?


Usando Swift 4

import AudioToolbox func playSoundEasy(note : String) { var soundURL: NSURL? var soundID: SystemSoundID = 0 let filePath = Bundle.main.path(forResource: note, ofType: "wav") soundURL = NSURL(fileURLWithPath: filePath!) if let url = soundURL { AudioServicesCreateSystemSoundID(url, &soundID) AudioServicesPlaySystemSound(soundID) }

}


Aquí hay un método de limpieza rápida que puedes copiar y usar en tu aplicación:

-(BOOL) playSoundFXnamed: (NSString*) vSFXName Loop: (BOOL) vLoop { NSError *error; NSBundle* bundle = [NSBundle mainBundle]; NSString* bundleDirectory = (NSString*)[bundle bundlePath]; NSURL *url = [NSURL fileURLWithPath:[bundleDirectory stringByAppendingPathComponent:vSFXName]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; if(vLoop) audioPlayer.numberOfLoops = -1; else audioPlayer.numberOfLoops = 0; BOOL success = YES; if (audioPlayer == nil) { success = NO; } else { success = [audioPlayer play]; } return success; }

Entonces para usar solo:

[self playSoundFXnamed:@"someAudio.mp3" Loop: NO];

Si vas a realizar bucles, entonces debes sacar tu AVAudioPlayer *audioPlayer a tu clase para poder detener el sonido ... Lo cual no ocurre si solo quieres un sonido corto.

Use ARC ... y nunca hice nada con NSError, así que úselo si le gusta ...


Cada una de las otras respuestas pierde memoria (a menos que ARC esté habilitado para una de las respuestas) ... curiosamente, la respuesta originalmente marcada como correcta tiene una llamada a retainCount sin motivo aparente.

Si alloc/init algo, necesita ser liberado (a menos que esté usando ARC).

Si llama a AudioServicesCreateSystemSoundID() , debe deshacerse del sonido resultante.

Vea el ejemplo de Audio UI Sounds .

Básicamente:

@interface MyClass:UI*ViewController // fixed { SystemSoundID mySound; } @implementation MyClass - (void) viewDidLoad { [super viewDidLoad]; AudioServicesCreateSystemSoundID(.... URL ...., &mySound); } - (void) playMySoundLikeRightNowReally { AudioServicesPlaySystemSound(mySound); } - (void) dealloc { AudioServicesDisposeSystemSoundID(mySound); [super dealloc]; // only in manual retain/release, delete for ARC } @end

Por completitud:
agregar AudioToolbox.framework
#import <AudioToolbox/AudioToolbox.h>



Echa un vistazo a systemsound para reproducir un archivo de audio corto

incluir el marco audiotoolbox

y crear

objeto systemsoundid

NSString *soundPath = [[NSBundle mainBundle] pathForResource:file ofType:@"aiff"]; AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID); AudioServicesPlaySystemSound (soundID);


Mi respuesta es la respuesta de Bill, pero la uso sin init o dealloc y lanzo el sonido después de su reproducción:

- (void)playSound:(NSURL *)url SystemSoundID ssID = 0; AudioServicesCreateSystemSoundID((CFURLRef)url, &ssID); AudioServicesAddSystemSoundCompletion(ssID, NULL, NULL, (AudioServicesSystemSoundCompletionProc)MyAudioServicesSystemSoundCompletionProc, NULL); AudioServicesPlaySystemSound(ssID); //AudioServicesDisposeSystemSoundID(ssID); } void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID, void *clientData) { AudioServicesDisposeSystemSoundID(ssID); }


Muchas respuestas son confusas y algunas utilizan el marco de AVAudioFoundation , diferente del marco de AVAudioFoundation ... esto es lo que hice. En el archivo .h , puse este código en:

@property (nonatomic, retain) AVAudioPlayer *player;

Este código declara un reproductor de audio llamado "jugador". En el archivo .m , debajo de su declaración @implementation , agregue @synthesize player . Esto sintetiza la propiedad del player .

En cualquier función que desee, vincule su sonido al reproductor agregando esta línea de código, donde yourSound es el nombre del archivo de sonido y aif es su extensión de archivo:

player = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"yourSound" withExtension:@"aif"] error:nil]

Sé que la Documentación de Apple dice que declare una cadena y un NSURL, pero si los combina en una sola línea, no tendrá que deshacerse de ella después. Además, como esta es una propiedad en su archivo ViewController.m , entonces no tendrá que seguir configurando ese objeto de player para que se vincule con su sonido.

Otras respuestas también incluyeron el uso de SystemSoundID , pero eso también impone restricciones como, "el archivo no puede durar más de 30 segundos", "tiene que estar en un formato específico" y las obras. Con eso, puede reproducir varios sonidos a la vez (en caso de que esté desarrollando una caja de resonancia), y es más fácil crear los sonidos.

Para reproducir tu sonido, inserta esta línea (y sí, es realmente así de fácil):

[player play]

Si usa ARC, no puede deshacerse del reproductor manualmente, ya que el sistema lo hará por usted. Si es nuevo en el desarrollo y está utilizando la última versión de Xcode, entonces tiene ARC habilitado. Si, por alguna extraña razón, no lo hace, entonces el código para deshacerse de los recursos que utiliza el player es:

[player release]


Para clips de sonido cortos (menos de 30 segundos), hay una biblioteca de SystemSounds que es realmente agradable.

Pros: no necesita administrar la configuración de volumen por separado. El sonido se reproduce en una secuencia separada y la carga y reproducción del clip de audio es v rápida. En resumen, trata este clip como otro sonido del sistema.

Contras: no puede proporcionar una configuración de control de audio por separado. Está relacionado con la configuración de los sonidos del sistema. No puedes jugar más de 30 segundos. Probablemente no pueda aplicar ningún filtro de sonido para mejorar el efecto de audio.

Ciertamente hay más pros y contras, pero estos son algunos de los que podría pensar, fuera de mi cabeza.

use esta importación: <AudioToolbox/AudioToolbox.h> Agregue AudioToolbox Framework y luego llame al método siguiente como [self PlaySound], donde quiera que quiera reproducir el clip.

-(void) playSound { NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"changeTrack" ofType:@"aif"]; SystemSoundID soundID; AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID); AudioServicesPlaySystemSound (soundID); [soundPath release]; }


Por favor, consulte la reproducción de audio de iOS simple

- (void)playSound { SystemSoundID soundId; // NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"sample" // withExtension:@"caf"]; // AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &soundId); NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp3"]; AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundId); AudioServicesAddSystemSoundCompletion(soundId, NULL, NULL, systemAudioCallback, NULL); AudioServicesPlaySystemSound(soundId); //AudioServicesPlayAlertSound(soundId); } - (void) systemAudioCallback(SystemSoundID soundId, void *clientData) { AudioServicesRemoveSystemSoundCompletion(soundId); AudioServicesDisposeSystemSoundID(soundId); }


Recientemente, utilicé este código para reproducir audio mp3 corto que funcionó bien: -

Declara esto debajo de @implementation

NSString *path; NSURL *url; //where you are about to add sound path =[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"quotes_%d",soundTags] ofType:@"mp3"]; url = [NSURL fileURLWithPath:path]; player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL]; [player setVolume:1.0]; [player play]; //just add AVFoundation framework


Usé este código para reproducir un breve sonido aiff en iOS

#import <AudioToolbox/AudioServices.h> SystemSoundID completeSound; NSURL *audioPath = [[NSBundle mainBundle] URLForResource:@"downloadCompleted" withExtension:@"aiff"]; AudioServicesCreateSystemSoundID((CFURLRef)audioPath, &completeSound); AudioServicesPlaySystemSound (completeSound);

Espero que esto ayude.


VERSIÓN SIMPLE CLEAN SWIFT 3

Me gusta más control sobre mis sonidos, así que estoy usando AVFoundation.

import AVFoundation class TodayViewController: UIViewController { var clink: AVAudioPlayer? var shatter: AVAudioPlayer? override func viewDidLoad() { super.viewDidLoad() // initialize the sound shatter = setupAudioPlayer(withFile: "shatter", type: "wav") clink = setupAudioPlayer(withFile: "clink", type: "wav") } func setupAudioPlayer(withFile file: String, type: String) -> AVAudioPlayer? { let path = Bundle.main.path(forResource: file, ofType: type) let url = NSURL.fileURL(withPath: path!) return try? AVAudioPlayer(contentsOf: url) } func onClick() { clink?.play() } }

Asegúrese de que el archivo de sonido se haya agregado a su proyecto e importe AVFoundation.