1

ビューが読み込まれ、別のビューから切り替えてもアプリ全体で音楽を繰り返すと、サウンドを再生しようとしています。ビューがロードされると再生され、別のビューに切り替えた後も続行されますが、ループすることはできません。サウンドに使用しています。私をループさせるための助けは素晴らしいでしょう

-(void)viewDidLoad {

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

3 に答える 3

3

代わりにを使用してみてくださいAVAudioPlayer。解決策は次のようになります ( を使用ARC)。


クラスで変数を定義する必要があります...

@interface MyClass : AnyParentClass {
    AVAudioPlayer *audioPlayer;
}

// ...

@end

...そして、次のコードを任意のメソッドに挿入して、再生を開始できます...

NSURL *urlForSoundFile = // ... whatever but it must be a valid URL for your sound file
NSError *error;

if (audioPlayer == nil) {
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:urlForSoundFile error:&error];
    if (audioPlayer) {
        [audioPlayer setNumberOfLoops:-1]; // -1 for the forever looping
        [audioPlayer prepareToPlay];
        [audioPlayer play];
    } else {
        NSLog(@"%@", error);
    }
}

...演奏を止めるのはとても簡単です。

if (audioPlayer) [audioPlayer stop];
于 2012-09-30T17:21:06.677 に答える
0

AudioServicesPlaySystemSound 関数の説明にあるように、AudioServicesAddSystemSoundCompletion 関数を使用してコールバックを登録します。タイマーの問題は、前のサウンドが終了したときに正確にタイマーを開始できない可能性があることです。

于 2012-09-29T17:10:16.700 に答える
0

コードを Application Delegate に移動し、繰り返し NSTimer を使用して再生アクションを繰り返してみてください。

コード例:

// appDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
     UInt32 soundID;
}

//appDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef    soundFileURLRef;
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef)@"beat", CFSTR ("mp3"), NULL);
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);


    [NSTimer scheduledTimerWithTimeInterval:lenghtOfSound target:self selector:@selector(tick:) userInfo:nil repeats:YES];
    return YES;
}

-(void)tick:(NSTimer *)timer
{
   AudioServicesPlaySystemSound(soundID);
}
于 2012-09-29T16:57:54.643 に答える