2

Matt の古い AudioStreamer を使用してオーディオ ストリーミング アプリを開発しています。

- (void)MyAudioSessionInterruptionListener(void *inClientData, UInt32 inInterruptionState)
{
        AudioStreamer *streamer = (AudioStreamer*)inClientData;
        if (inInterruptionState == kAudioSessionBeginInterruption)
        {
            [streamer stop];    
            NSLog(@"kAudioSessionBeginInterruption");
        }
        else if (inInterruptionState == kAudioSessionEndInterruption)
        {
            [self playpause]; 
            NSLog(@"kAudioSessionEndInterruption");
        }
}

私の問題は、[self playpause] で関数「playpause」を呼び出そうとしていることです。しかし、エラー playpause undeclared が発生します!

MyAudioSessionInterruptionListener 内で playpause を宣言するにはどうすればよいですか?

4

2 に答える 2

1

[self playPause] ではなく、AudioStreamer クラスがメソッドを持つクラスであると仮定すると、[streamer playpause] である必要があります...リスナーメソッドはクラス外の静的 C 関数です。したがって、self が意味するため、self でメソッドを呼び出すことはできませんあなたはクラスのインスタンスの中にいます。メソッドを持つクラスが AudioStreamer でない場合、それを取得できるようにするために、そのクラスも inClientData 引数に渡す必要があります。

それが役立つことを願っています

于 2011-09-13T20:56:24.437 に答える
-2

したがって、すべての可能性をテストした後、通知を使用するのが最善でした。

ここにコード:

void MyAudioSessionInterruptionListener(void *inClientData, UInt32 inInterruptionState)
{
if (inInterruptionState == kAudioSessionBeginInterruption) {


    [[NSNotificationCenter defaultCenter] postNotificationName:@"stopstreamer" object:nil];

    NSLog(@"kAudioSessionBeginInterruption");
}


else if (inInterruptionState == kAudioSessionEndInterruption) {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"TogglePlayPause" object:nil];

    NSLog(@"kAudioSessionEndInterruption");
}


}
于 2011-09-15T01:43:24.980 に答える