0

私のアプリケーションでは、ボタンをキーボードとして設定しています。各ボタンはピアノの鍵盤と同じように機能し、ボタンを押すと音が鳴りますが、離すと止まります。この方法では、2つのIBActionを使用しています。1つはタッチダウン(サウンドプレイ)とタッチアップインサイド(サウンドストップ)用です。AVAudioPlayerの再生が遅れているため、サウンドの再生にSystemSoundIDを使用しています。唯一の問題は、ボタンを押したままにするとサウンドが正常に再生されることですが、タッチを離すとアプリがクラッシュします。以下は私のコードです:

.hファイル:

SystemSoundID *soundID;

.mファイル:

- (IBAction)ASoundStart:(id)sender { 
     NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"P1:4t" ofType:@"mp3"];
     AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
     AudioServicesPlaySystemSound(soundID);
     [soundFile release];
 }

 - (IBAction)ASoundStop:(id)sender {
     AudioServicesDisposeSystemSoundID(soundID);
 }
4

1 に答える 1

2

SystemSoundID をオブジェクトとして誤って扱っていると思います。それは単なる整数です。

AudioServicesPlaySystemSound の宣言を見ると、引数が isSystemSoundIDであり、notであることに注意してください。SystemSoundID *

void AudioServicesPlaySystemSound (
   SystemSoundID inSystemSoundID
);

したがってSystemSoundID *soundID、ヘッダーを変更するだけで、うまくいくとSystemSoundID soundID思います。

ハッピーコーディング。

于 2012-08-22T10:41:12.287 に答える