Tutorial: Sound abspielen mit AudioServicesPlaySystemSound

Hallo Zusammen,

heute soll es darum gehen Sound abzuspielen . Viele gute Apps haben Sounds integriert und selbst bei Apps im Bereich der Produktivität kann ein Soundeffekt an bestimmten Stellen sinnvoll sein. Ich zeige heute wie man Sounds in eine App integriert und wie man sie mit Hilfe des Programms cfxr erstellt.

Zunächst erstellen wir ein neues Projekt – eine Single View Application reicht für unsere Zwecke. Dann möchten wir einen Button erstellen – immer wenn dieser gedrückt wird, soll ein Sound abgespielt werden. Dafür gehen wir in ViewController.m und ergänzen viewDidLoad

    UIButton *playButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [playButton addTarget:self
               action:@selector(playSound)
     forControlEvents:UIControlEventTouchDown];
    [playButton setTitle:@"Play" forState:UIControlStateNormal];
    playButton.backgroundColor = [UIColor lightGrayColor];
    playButton.frame = CGRectMake(self.view.frame.size.width/4, self.view.frame.size.height/2, 160.0, 40.0);
    [self.view addSubview:playButton];

Die Methode playSound müssen wir noch erstellen.

Vorher müssen wir jedoch dem Projekt das AudioToolbox Framework hinzufügen. Wir wählen uns Target an und suchen unter Build Phases den Eintrag „Link Binary with Libraries“ Über das + fügen wir die AudioToolbox ein.

 Sound abspielen - Xcode Framework hinzufügen

Nun importieren wir das Framework in unseren ViewController und erstellen eine iVar. Dies kann man in ViewController.h tun oder im extended Header ganz oben in ViewController.m. Da wir schonmal die Datei offen haben, bleiben wir gleich hier und ergänzen:

#import "ViewController.h"
#import <AudioToolbox/AudioToolbox.h>

@interface ViewController ()
{
    SystemSoundID			buttonSound;
}
@end

Wir müssen nun die SystemSoundID  Variable mit einer Sound Datei verknüpfen. Hierzu schreiben wir eine Methode setupSound und rufen sie in viewDidLoad auf.

-(void) setupSound
{
    NSString *buttonPath = [[NSBundle mainBundle] pathForResource:@"button" ofType:@"caf"];
	NSURL *buttonURL = [NSURL fileURLWithPath:buttonPath];
	AudioServicesCreateSystemSoundID((__bridge CFURLRef)buttonURL, &buttonSound);
}

Jetzt endlich kommen wir zu playSound.

-(void)playSound
{
    AudioServicesPlaySystemSound(buttonSound);
}

Alle was jetzt noch fehlt ist die Sound-Datei. Für ein schnelles Erfolgserlebnis stelle ich hier eine bereit:

Sound Datei im caf Format

Ich möchte an dieser Stelle noch das Programm cfxr empfehlen, welches es hier zum kostenlosen Download gibt:

http://thirdcog.eu/apps/cfxr

Mit diesem können Soundeffekte erstellt werden. Probiert einfach die Einstellung durch, bis euch etwas gefällt.

Foto des Programms cfxr

Über File->Export wird anschließend eine wav Datei erzeugt. Das Apple interne Format ist jedoch caf – wir sollten die Datei daher umwandeln. Zum Glück liefert Apple bereits das passende Tool hierfür mit. Wir starten das Terminal und führen das Programm afconvert aus:

afconvert -f caff -d LEI16 /PfadVonRootZurSoundDatei

Bei mir sieht das dann so aus:

afconvert -f caff -d LEI16 /Users/wittedaniel/Documents/sound/button2.wav

Wenn alles geklappt hat erscheint die Datei direkt neben der vorherigen wav.

Viel Spaß und bis zum nächsten mal.

 

2 thoughts on “Tutorial: Sound abspielen mit AudioServicesPlaySystemSound

  • Hallo, ich hätte gerne deine Hilfe wenn ich genau das gleich wie oben aber mit mehrere Sounds, also jede Button ein Sound, kannst du mir mal bitte mit dem helfen?
    ich wurde mir bei dir sehr bedankbar sein…

    SG

  • Hallo,

    das geht relativ simpel. Du musst einfach weitere SystemSoundID definieren. Zum Beispiel:
    SystemSoundID buttonSound1;
    SystemSoundID buttonSound2;
    SystemSoundID buttonSound3;

    Anschließend die Sounds laden und weitere Buttons erstellen wie oben beschrieben. Du kannst über die Methode playSound zu -(void)playSound:(UIButton*)button ändern. Dann wird der gedrückte Button übergeben und du kannst den Sound spielen, welcher mit diesen Button verbunden ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.