Comment fabriquer un "bip" ...?

Hello CocoaCafé dreamteam,


L'app que je developpe a besoin d'emettre des bips successifs de durée plus ou moins longue (un peu à  la manière des radars de recul sur les voitures).


La solution que j'ai trouvé à  ce jour consiste à  "jouer" un mp3 via AVAudioPlayer ...en réglant la durée d'émission du bip via la methode setRate de mon player. Le résultat n'est pas top à  l'oreille ...


J'ai essayé de régler la durée d'émision via un timer ... c'est pire !


Bref, je me demande si au lieu de jouer un mp3 ... je ne ferais pas mieux de "fabriquer" le bip pour avoir le contrôle sur sa tonalité (aigà¼/grave) et surtout sa durée ....mais comment faire ? 


Merci 1000 fois par avance pour vos conseils et votre aide.


 


OldNick


Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    Pour faire ça, j'avais codé une audio unit...
    Je ne suis pas sûr que ce soit la bonne méthode, dans le sens où ça représente quand même beaucoup de travail et des compétences assez spécialisées.
    Si j'étais toi, je crois que j'essaierais simplement d'améliorer la technique actuelle.
  • Merci Céroce - effectivement ça n'a pas l'air si simple que ça ... car j'ai trouvé ça : https://github.com/picciano/iOS-Tone-Generator... ça répond à  mes besoins mais nom d'une pipe quelle usine à  gaz ! 


    Belle journée à  toi. Old Nick


  • DrakenDraken Membre
    juillet 2016 modifié #4

    Pourquoi ne pas utiliser plusieurs échantillons sonores ? Un court, un moyen et un long ? C'est moins souple qu'un système paramétrable à  volonté, mais simple à  réaliser.


  • Draken, j'ai codé ta suggestion et ça marche aussi ... mais le player est difficile à  controller (même en "bufferisant" via prepareToPlay et en synchronisant les sequences en stoppant le player en cours si je change de fréquence ) ... et au final le rendu sonore est pas joli-joli ...En tous cas merci pour cette suggestion.


  • Juste comme ça, est-ce que t'as essayé d'avoir plusieurs instances de AVAudioPlayer, une pour chaque fréquence. Peut-être que c'est plus rapide ?


  •    ::)   pour le bip bip demander à  coyote !


  • --> Colas_ : oui j'ai aussi essayé avec plusieurs instances...mais comme la fréquence peut atteindre 0.2 s par bip, j'ai des espèces de "grésillements" vraiment désagréables à  chaque changement d'instance... pourtant mes séquences + ou - aigà¼es sont propres ("nettoyées" sous GarageBand) ...que ce soit en mp3 ou en wav ...


  • --> tablier : ... tabliexit !  >:D


  • AliGatorAliGator Membre, Modérateur

    Utiliser AudioServices est bien plus adéquat et simple je pense si c'est juste pour jouer des petits bips.


     


    import AudioToolbox
     
    class SoundHelper {
      private var soundID: SystemSoundID = 0
     
      init() {
        if let soundURL = NSBundle.mainBundle().URLForResource("bip_sound", withExtension: "caf") {
            AudioServicesCreateSystemSoundID(soundURL as CFURL, &soundID)
        }
      }
     
      deinit {
        AudioServicesDisposeSystemSoundID(soundID)
      }
     
      func play() {
        AudioServicesPlaySystemSound(self.soundID)
      }
    }
    Certes avec cette méthode tu ne fais que jouer un fichier son donné, sans contrôler sur son pitch / sa tonalité comme tu as l'air de le vouloir à  l'origine. Mais si par contre tu optes pour la solution d'avoir plusieurs fichiers son individuels à  jouer, sans modifier chaque fichier "mp3" (ou ".caf") à  la lecture, alors AudioServices est plus simple à  manipuler je pense.
  • Merci AliGator pour tes précieux conseils ... mais le ToneGenerator que j'ai trouvé fonctionne à  merveille (https://github.com/p...-Tone-Generator) ... c'est une "usine à  son" ...un peu "usine à  gaz" ....mais qui "fabrique" des beeps ultra propres surtout enchainés à  haute fréquence ...le seul hic que je n'arrive pas à  régler dans ce code source, c'est le niveau sonore ...qui est très faible ... mais j'vais trouver ....


    Belle journée à  toi. OldNick


  • CéroceCéroce Membre, Modérateur

    le seul hic que je n'arrive pas à  régler dans ce code source, c'est le niveau sonore ...qui est très faible ... mais j'vais trouver ....

    Vérifie que la sinusoà¯de utilise bien toute la gamme d'amplitude.
    Par ailleurs, une simple sinusoà¯de a peu d'énergie. Essaie avec un sin^3(t), ça donne un très beau son.
  • Merci Céroce - je viens de trouver... il y a dans le code 2 channels ... 1 pour la fréquence (pour régler la tonalité sur 2 gammes de fréquence comme un klaxon bi-tons) ... et l'autre pour l'amplitude (je ne l'avais pas vu) ... en modifiant l'amplitude au max (à  savoir 0.25f) , j'ai un son vraiment top ! Merci en tout cas pour ta suggestion. OldNick


Connectez-vous ou Inscrivez-vous pour répondre.