2012-02-19 3 views
0

Я опытный программист на C, но не объективный c. Я пытаюсь помочь моему другу, предоставив ему этот кусок кода в объективе c. Кстати, это приложение для iPhone. У меня есть все основания, и, как вы можете видеть, объявили мой звук как soundA, используя метод - (IBAction) ... Кроме того, звук - это просто .wav-файл размером не более 100 кб.Преобразование из кода C в ObjC

- (IBAction)soundA:(id)sender { 
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef soundFileURLRef; 
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, 
     (CFStringRef) @"soundA", CFSTR ("wav"), NULL); 

    UInt32 soundID; 
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
    AudioServicesPlaySystemSound(soundID); 
} 

Любая помощь очень ценится! Спасибо.

  • Чудак
+0

Какой вопрос ? –

+1

ObjC - это надмножество C, поэтому код C также является кодом ObjC – ouah

+0

'CFBundleCopyResourceURL' имеет копию в названии, поэтому возвращает вашу память. В вашем коде 'soundFileURLRef' утечки в результате. Тоже для памяти, связанной с 'soundID', так как« AudioServicesCreateSystemSoundID »- это метод« create ». – Tommy

ответ

1

Может быть, попробуйте изменить его из Unsigned Int в SystemSoundID

- (IBAction)soundA:(id)sender { 
     CFBundleRef mainBundle = CFBundleGetMainBundle(); 
     CFURLRef soundFileURLRef; 
     soundFileURLRef = CFBundleCopyResourceURL(mainBundle, 
      (CFStringRef) @"soundA", CFSTR ("wav"), NULL); 

     SystemSoundID soundID; 
     AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
     AudioServicesPlaySystemSound(soundID); 
    } 

Или пойти с подходом более Objective-C:

- (IBAction)soundA:(id)sender { 
     NSString *path = [NSString stringWithFormat: @"%@/%@", 
        [[NSBundle mainBundle] resourcePath], name]; 


     NSURL* filePath = [NSURL fileURLWithPath: path isDirectory: NO]; 
     SystemSoundID soundID; 
     AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); 
     AudioServicesPlaySystemSound(soundID); 
    } 
+0

Или даже '[[NSBundle mainBundle] URLForResource: @" soundA "withExtension: @" wav "]', чтобы свернуть первые две строки вниз? – Tommy

+0

Хорошо, но если вы используете [[NSBundle mainBundle] URLForResource: @ "soundA" withExtension: @ "wav"] ... * путь не будет объявлен. Как я мог обойти это? – leesuh

+0

Используйте второй метод дословно, чтобы обойти его. – CodaFi

Смежные вопросы