Остановить звук с помощью той же кнопки, которая его воспроизводит

#objective-c #cocoa-touch #ios

#objective-c #cocoa-touch #iOS

Вопрос:

Довольно просто, я использую одну кнопку, которая генерирует случайное число, а затем с помощью переключателя / регистра она анимирует изображение и воспроизводит звук. Моя проблема в том, что при повторном нажатии кнопки звук, который воспроизводился до этого, не останавливается и звук перекрывается.

Вот код:

 - (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, amp;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, amp;soundID);
            AudioServicesPlaySystemSound(soundID);
    } break; //Lots more cases after this one
  

Я знаю, что это не лучший способ сделать это, объявляя одну и ту же переменную снова и снова.
но есть ли способ остановить его до того, как он воспроизведет другой?

Комментарии:

1. LOL я только что обнаружил ответ на свой собственный вопрос.

2. Это здорово! Пожалуйста, опубликуйте ответ здесь, чтобы другие могли извлечь пользу из вашего исследования.

3. @Nicolas: извините, я имел в виду добавить это как «Ответ», ниже. Таким образом, вопрос не отображается в результатах поиска как оставшийся без ответа. Спасибо!

4. @JoshCaswell я не могу, потому что как новый пользователь я не могу ответить на это, прежде чем пройдет 8 часов.

5. @JoshCaswell, можешь добавить это, пожалуйста?

Ответ №1:

Я только что нашел ответ на свой собственный вопрос.

Что я сделал, так это

  1. Объявите SoundSystemID soundID; в заголовке.
  2. Добавьте эту строку до того, как будет сгенерировано случайное число: AudioServicesDisposeSystemSoundID(soundID);

Помните, что если вы собираетесь воспроизводить звук снова, вам нужно будет снова загрузить ресурс после его утилизации.

В любом случае, спасибо вам, ребята.