• Saltar a la navegación principal
  • Saltar al contenido principal

CFE APPS by Sergio Becerril

Aprende a programar en Swift | Cursos de Swift online

  • CURSO Swift & UIKit – SwiftUI
  • Blog
  • YouTube
  • Acerca de

Cómo reproducir sonidos en iOS con Swift

01/05/2015 por Sergio Becerril 9 comentarios

Te voy a enseñar cómo reproducir sonidos en iOS con Swift

Alguna vez lo has pensado, lo sé.

Que al pulsar cualquier botoncillo de tu App, este reproduzca un sonido.

O quizá al cargar una vista, o al guardar un dato, no sé, el sonido es una parte importante en una App.

AVAudioPlayer

Esta es la clase que necesitamos para reproducir archivos de sonido que tengamos en nuestro proyecto.

Si queremos reproducir sonidos en iOS con Swift de cualquier tipo, y también de cualquier duración, sin duda esta es nuestra clase.

Apple recomienda esta clase entre otras cosas para:

  • Reproducir sonidos de cualquier duración
  • Reproducir archivo locales o en buffer de memoria
  • Reproducir varios sonidos de forma simultánea, uno en cada Audio Player

AVFoundation

Para trabajar con la clase AVAudioPlayer necesitamos importar a nuestra clase el Framework AVFoundation.

import AVFoundation

Una vez importando, deberemos declarar una variable de tipo AVAudioPlayer.

var player = AVAudioPlayer ()

Implementar en un método

En este ejemplo te voy a enseñar a reproducir un sonido cuándo al pulsar un botón se ejecute un método.

Sin embargo, puedes usar este código en la finalización de cualquier algoritmo para que se reproduzca un sonido en tiempo de ejecución.

Este sería el método que deberíamos crear e implementar en nuestro controlador:

//MÉTODO QUE REPRODUCE UN SONIDO

    func playSound (sender:UIButton){

        //SELECCIONAMOS EL SONIDO DE NUESTRO GRUPO DE CARPETAS Y ARCHIVOS Y LO ALMACENAMOS EN UNA VARIABLE LLAMADA SOUND

        var sound = NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource(«problem», ofType: «mp3»)!)

        //CREAMOS UNA VARIABLE PARA GESTIONA ERRORES
        var error = NSError?()

        //USAMOS LA VARIABLE CREADA ANTERIORMENTE DE TIPO AVAudioPlayer Y LE PASAMOS EL ARCHIVO RECOGIDO EN LA VARIABLE SOUND
       player = AVAudioPlayer (contentsOfURL: sound, error: &error)

        //PREPARAMOS EL REPRODUCTOR PARA EMITIR SONIDO
        player.prepareToPlay()

        //REPRODUCE EL ARCHIVO
        player.play()

    }

Sonido activado

Es importante que sepáis que el sonido se escuchará si el usuario tiene su teléfono con sonido, si lo tiene silenciado, el sonido no se escuchará.

AudioServicesCreateSystemSoundID

Disponemos de otra forma de reproducir sonidos en iOS con Swift.

Apple recomienda usar AudioServicesCreateSystemSoundID en los siguientes casos:

  • Reproducir sonidos de una duración de 30 segundos o menos
  • Reproducir un único archivo de sonido

Si queremos usar esta otra opción para reproducir sonidos, deberíamos crear e implementar un método como este:

         //MÉTODO QUE REPRODUCE UN SONIDO DE MENOS DE 30 SEGUNDOS

        @IBAction func playSoundTwo(sender: AnyObject) {

        //SELECCIONAMOS EL SONIDO DE NUESTRO PROYECTO LOCAL
        var filePath = NSBundle.mainBundle().pathForResource(«sound», ofType: «caf»)

        //ALMACENAMOS EL SONIDO EN UNA VARIABLE DE TIPO NSURL
        var fileURL = NSURL(fileURLWithPath: filePath!)

        //CREAMOS UNA VARIABLE QUE INDIQUE EL TIPO DE SONIDO
        var soundID:SystemSoundID = 0

        //REPRODUCIMOS EL SONIDO
        AudioServicesCreateSystemSoundID(fileURL, &soundID)
        AudioServicesPlaySystemSound(soundID)

        }

Cómo ves, reproducir sonidos en iOS con Swift es bastante sencillo.

Puedes usar cualquiera de estas dos formas para hacerlo.

Aquí te dejo un ejemplo de lo que hemos visto, para que lo descargues y le eches un vistazo.

DESCARGAR EJEMPLO

Y si tienes cualquier duda, déjame un comentario.

Archivado en: Programar con Swift Etiquetado con: Desarrollo Swift, Programar con Swift, Tutorial Crear App iOS

Interacciones con los lectores

Comentarios

  1. angel dice

    15/11/2015 en 13:11

    Hola Sergio da el error Built failed al compilar usando la Version 7.1.1 (7B1005) de xCode, ¿sabrías decirme por que?

    Responder
    • Sergio Becerril dice

      15/11/2015 en 19:34

      Hola Ángel,

      Daba error por la forma de tratar los errores que tiene Swift 2 y que no estaba en vigor cuándo realice la práctica.

      Ya está corregido el ejemplo práctico, puedes descargarlo de nuevo y funcionará.

      Gracias por visitar mi Blog y por comentar.

      Un abrazo.
      Sergio Becerril

      Responder
  2. angel dice

    12/12/2015 en 15:20

    player = AVAudioPlayer (contentsOfURL: sound, error: &error)

    Da este error esa linea, poniendo todo tal y como lo tienes.

    Argument labels ‘(contentsOfURL:, error:)’ do not match any available overloads

    Responder
  3. angel dice

    15/12/2015 en 12:00

    Gracias a ti, me gustaría hacer también un bucle con los sonidos ¿es posible con el AVFoundation?

    Responder
    • angel dice

      15/12/2015 en 14:16

      Lo he conseguido hacer, ¿hay alguna forma de que se reproduzca más seguido, para que no se note el corte?

      Responder
  4. Carlos Barco dice

    29/12/2015 en 20:16

    Gracias Sergio por compartir, no solo esto si no tambien tu curso online
    estoy iniciando y creo que ya me estoy ambientando a este mundo

    corri este tuto en mi Xcode version 7.2 y corre magnifico sin ningun error

    te pregunto en esta misma estructura
    ¿como podria colocar un boton que haga parar al sonido?
    no mute, si no pararlo

    gracias por tu eseñanza

    Responder
    • Sergio Becerril dice

      31/12/2015 en 12:56

      Hola Carlos,

      Gracias por tus palabras.

      Pues para parar el sonido lo puedes hacer así:

      player.stop()

      Gracias por visitar el blog y por comentar.

      Un abrazo.
      Sergio Becerril

      Responder
  5. Ana dice

    24/03/2016 en 17:35

    Hola, he programado para reproducir un sonido cuando suceda una cosa. Pero mi sonido tiene una duración de 14 segundos, y quiero que éste se reproduzca en bucle si no deja de suceder dicha cosa. ¿me explico?

    Gracias

    Responder
    • Sergio Becerril dice

      16/04/2016 en 13:03

      Hola Ana,

      Existe una propiedad que puedes usar para hacer loops o bucles en sonidos, es la siguiente:

      player.numberOfLoops = -1;

      Dónde player sería tu reproductor, y en el ejemplo superior he puesto -1 esto es un looping infinito, si pones otro número pues tu decides la cantidad de bucles a ejecutar.

      Yo pondría bucle infinito y pararía el sonido al final del método que tenga que ejecutar tal cosa.

      Un abrazo.

      Sergio Becerril

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Copyright © 2023 · Business Pro en Genesis Framework · WordPress · Iniciar sesión