Как написать функцию остановки для iOS AudioServices в этом плагине Phonegap? - PullRequest
0 голосов
/ 21 января 2012

Я использую плагин Phonegap SoundPlug для управления моим звуком в этой HTML5-игре, которую я создаю, и, хотя у нее есть способ воспроизвести звук, у него нет никаких методов дляостановить звук.Функция воспроизведения вызывается из javascript вашего приложения с PhoneGap.exec («SoundPlug.play», «sound.wav»).Соответствующий код выглядит следующим образом:

- (void) play:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{
    NSBundle * mainBundle = [NSBundle mainBundle];
    NSMutableArray *directoryParts = [NSMutableArray arrayWithArray:[(NSString*)[arguments objectAtIndex:0] componentsSeparatedByString:@"/"]];
    NSString       *filename       = [directoryParts lastObject];
    [directoryParts removeLastObject];

    NSMutableArray *filenameParts  = [NSMutableArray arrayWithArray:[filename componentsSeparatedByString:@"."]];
    NSString *directoryStr = [directoryParts componentsJoinedByString:@"/"];

    NSString *filePath = [mainBundle pathForResource:(NSString*)[filenameParts objectAtIndex:0]
                                              ofType:(NSString*)[filenameParts objectAtIndex:1]
                                         inDirectory:directoryStr];

    SystemSoundID soundID;
    NSURL *fileURL = [NSURL fileURLWithPath:filePath];

    AudioServicesCreateSystemSoundID((CFURLRef)fileURL, &soundID);   
    AudioServicesPlaySystemSound(soundID);
}

К сожалению, я ничего не знаю об Obj-C, поэтому я не уверен, как написать для этого подходящую функцию остановки.(Точная ситуация, с которой я пытаюсь справиться, это когда игрок хочет отключить все звуки бега.)

1 Ответ

0 голосов
/ 21 января 2012

Вы действительно не должны использовать AudioServicesPlaySystemSound, если вам нужно остановить его.Если у phonegap есть мост к AVAudioPlayer, это, вероятно, более подходящий API для запуска и остановки звуков.

Но если вы сохраните переменную soundID, используемую AudioServicesPlaySystemSound (), где-нибудь (в переменной экземпляра, глобальной переменной)или передан обратно в webview-javascript-land и т. д.);AudioServicesDisposeSystemSoundID (soundID) может остановить системный звук, производимый этим soundID.

...