4 Stimmen

Anhalten eines Tons mit der gleichen Taste, mit der er abgespielt wird

Ziemlich einfach, ich bin mit einer Taste, die eine Zufallszahl generiert und dann mit einem Schalter / Fall, es animiert ein Bild und spielt einen Ton. Mein Problem ist, dass, wenn Sie die Taste erneut drücken, der Ton, der vorher gespielt wurde, nicht aufhört und der Ton überlappt.

Hier ist der Code:

- (IBAction) pushme: (id) sender{
int random = (arc4random()%10);
switch (random) {
    case 0:  {
            [ANIMATION NUMBER 0]

            NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound0.wav"];
            SystemSoundID soundID;
            NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
            AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
            AudioServicesPlaySystemSound(soundID);
        }
        break;
    case 1:  {
            [ANIMATION NUMBER 1]

            NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound1.wav"];
            SystemSoundID soundID;
            NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
            AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
            AudioServicesPlaySystemSound(soundID);
    } break; //Lots more cases after this one

Ich weiß, dass es nicht der beste Weg ist, immer wieder die gleiche Variable zu deklarieren. aber gibt es eine Möglichkeit, es zu stoppen, bevor es eine andere spielt?

8voto

jscs Punkte 63009

Ich habe gerade die Antwort auf meine eigene Frage entdeckt.

Was ich tat, war

  1. Erklären Sie SoundSystemID soundID; in der Kopfzeile.
  2. Fügen Sie diese Zeile ein, bevor die Zufallszahl generiert wird: AudioServicesDisposeSystemSoundID(soundID);

Denken Sie daran, dass Sie die Ressource erneut laden müssen, wenn Sie den Ton wieder abspielen wollen, nachdem Sie sie entsorgt haben.

Trotzdem vielen Dank, Leute.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X