8

ユーザーがアプリの特定のボタンを押したときに簡単な効果音を再生したいと考えていて、いくつか試してみましたが、音が同期していないように見える遅延が常に発生します。

私はここのチュートリアルに従ったので、Audio Services でビルドを試してみましたが、遅延があり、AVAudioPlayer を試しましたが、「prepareToPlay」を使用しても遅延がありました。

シンプルなアプリで遅延のないシンプルな効果音を得るには、Finchのような大きくて厄介なライブラリをインストールする必要がありますか?

あなたが私のために物事を明確にしてくれることを願っています!

アップデート

音声サービスのコード:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                      withExtension:@"aif"];
AudioServicesCreateSystemSoundID((CFURLRef)soundURL, &sound1);
AudioServicesPlaySystemSound(sound1);

viewDidLoad の AVAudioPlayer のコード:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                      withExtension:@"aif"];
self.avSound = [[AVAudioPlayer alloc] 
       initWithContentsOfURL:soundURL error:nil];
[self.avSound prepareToPlay]

ファイルを再生するメソッドの AVAudioPlayer のコード:

[self.avSound play];
4

3 に答える 3

3

私がこれを機能させる方法(そして私はSOに関する別の投稿からアイデアを得たと思います)は、空の1秒の.wavファイルを作成し、初期化時にそれを「再生」することでした。その後、他の効果音を呼んだときも遅れはありませんでした。

私のサウンドプレーヤーオブジェクトでこのようなもの

    SystemSoundID blID;
    SystemSoundID cID;

    +(void)doInit
    {
            if (spinitialized){
                    AudioServicesPlaySystemSound (blID);
                    return;
            }



            NSString *str = [[NSBundle mainBundle] pathForResource:@"ding.wav" ofType:@""];
            NSURL *uref = [NSURL fileURLWithPath:str];
            OSStatus error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &cID);
            if (error) NSLog(@"SoundPlayer doInit Error is %ld",error);

            str = [[NSBundle mainBundle] pathForResource:@"blank.wav" ofType:@""];
            uref = [NSURL fileURLWithPath:str];
            error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &blID);
            if (error) NSLog(@"SoundPlayer doInit Error is %ld",error);

            AudioServicesPlaySystemSound (blID);

            spinitialized = YES;
    }

次に、次を使用して、遅滞なく「ding」を再生できます。

    AudioServicesPlaySystemSound (cid);
于 2013-01-04T18:53:58.887 に答える
1

解決

上記のマイクと同様のことをしました。viewDidLoad で音量を下げてサウンドを再生することになりました。

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                              withExtension:@"aif"];
self.plops = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
[self.plops setVolume:0.0];
[self.plops play];

そして、それを再生する関数で次のようにします。

[self.plops setVolume:1.0];
[self.plops play];
于 2013-01-04T19:15:51.670 に答える
0

役立つと思われることの 1 つは、サウンドが再生される可能性のある画面に入ったときに、1 秒未満のサウンドを再生することです。これは、内部オブジェクトの割り当て、スタッフのページングなど、サウンドメカニズムを「準備」しているようです。

(これは、Mike M のアプローチに似ていると思います。)

于 2013-01-04T19:02:15.807 に答える