1

ビューコントローラーからの選択に基づいてサウンドファイルを再生するアプリを作成しています。ポップアップするView Controllerがあり、都市名、説明、画像、および単純なサウンドを再生するボタンを含むビューが表示されます。以下の例では、「slang4」という名前のサウンド ファイルを再生します。これは、実装ファイルのボタンのコードです。

- (IBAction)soundButton:(id)sender{ 


    CFBundleRef mainBundle=CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef=CFBundleCopyResourceURL(mainBundle, (CFStringRef)@"slang4", CFSTR("mp3"),NULL);
    UInt32 soundID;
   AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
   AudioServicesPlaySystemSound(soundID);

}

問題は、元のビュー コントローラー (都市のリスト) からの選択に応じて、ボタンで異なるサウンドを再生することです。

たとえば、私のアプリ デリゲート実装ファイルからの以下のコードは、各都市がどのように異なるサウンド ファイルを持っているかを示しています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    City *london = [[City alloc]init];
    london.cityName = @"London";
    london.cityDescription = @"The cap of UK.";
    london.cityPicture = [UIImage imageNamed:@"London.jpg"];
    london.soundFile=@"slang4.mp3";

    City *sanFranciso = [[City alloc]init];
    sanFranciso.cityName = @"San Francisco";
    sanFranciso.cityDescription=@"City by the Bay";
    sanFranciso.cityPicture = [UIImage imageNamed:@"SanFranciso.jpg"];
    sanFranciso.soundFile=@"babymama.mp3";

私の問題は、ボタンが都市に基づいて再生するサウンドファイルを認識できるようにすることです。私は約 8 か月間 iOS プログラミングを独学で学んでいますが、初心者としてはまだ静かです。これが理にかなっていることを願っています。

4

1 に答える 1

0

ビュー コントローラーには既にプロパティがあるように聞こえるCityので、ボタン アクションでプロパティのサウンド ファイルを使用できるはずですsoundFilecomponentsSeparatedByString:の方法を使用して、NSString名前と拡張子に分けます。完全なファイル名自体と拡張子を渡すこともできると思いますNULL。このソリューションは、ARC を前提としています。

NSArray *soundFileComponents = [self.city.soundFile componentsSeparatedByString:@"."];
if ([soundFileComponents count] == 2) {
    NSString *fileName = soundFileComponents[0];
    NSString *fileExtension = soundFileComponents[1];
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    if (mainBundle) {
        CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (__bridge CFStringRef)fileName, (__bridge CFStringRef)fileExtension, NULL);
        if (soundFileURLRef) {
            UInt32 soundID;
            OSStatus resultCode = AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
            if (resultCode == kAudioServicesNoError) {
                AudioServicesPlaySystemSound(soundID);
            }
            else {
                NSLog(@"error creating system sound ID: %ld", resultCode);
            }
            CFRelease(soundFileURLRef);
        }
        else {
            NSLog(@"error loading sound file URL");
        }
    }
    else {
        NSLog(@"error loading main bundle");
    }
}
else {
    NSLog(@"error splitting filename into name and extension");
}
于 2013-03-26T17:37:42.233 に答える