3

私は Xcode でのプログラミングに非常に慣れておらず、すでにレンガの壁にぶつかっています。私がやろうとしているのは、十分な加速度が検出された場合にサウンドを再生することです。誰かが私が間違っていることについてアドバイスしてもらえますか? (私はそのすべてを疑う)。

コード:

#import "LZDViewController.h"

@interface LZDViewController ()

@end

@implementation LZDViewController

- (void)viewDidLoad;{

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CMAccelerometerData *accelerometerData = self.motionManager.accelerometerData;
if (fabsf(accelerometerData.acceleration.x) > 1.2
    || fabsf(accelerometerData.acceleration.y) > 1.2
    || fabsf(accelerometerData.acceleration.z) > 1.2)
{
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audio.wav", [[NSBundle mainBundle] resourcePath]]];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    audioPlayer.numberOfLoops = 0;



    [audioPlayer play];


}
}

@end

編集:これが私の.hのコードです

#import <UIKit/UIKit.h>
#import <CoreMotion/CoreMotion.h>
#import <AVFoundation/AVFoundation.h>
@interface LZDViewController : UIViewController
//{AVAudioPlayer *audioPlayer;}

@property (strong, nonatomic) CMMotionManager *motionManager;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;




@end

私はまだまったく喜びを感じていません。手を握ってしまったことをお詫びします。白い画面しか表示されませんが、サウンド ファイルが再生されません。正しいフレームワークをインポートし、ボタンだけでサウンドを再生できますが、実際には加速度計で再生したいと考えています。ありがとう

4

1 に答える 1

1

よし、最初にやりたいことは、インターフェイス ファイル、または実装ファイルの上部にあるインターフェイス拡張で 2 つのプロパティを定義することです。これらは、モーション マネージャーとオーディオ プレーヤーになります。

@property (strong, nonatomic) CMMotionManager *motionManager;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;

その後、viewDidLoad で他のすべてを実行できます。以下のコードは、モーション マネージャーが加速度計イベントを受信するための新しい操作キューを設定し、オーディオ プレーヤーとモーション マネージャーを初期化してから、1 秒あたり 30 回の間隔で加速度計の更新の取得を開始します。

最後に、加速度計の更新ブロック内で、既に構築したのと同じロジックを使用して加速度データをチェックし、要件を満たしている場合は次の条件に進みます。

**この例では、プレーヤーが既に再生中の場合はサウンドの再生を再開しないように構成しました

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSOperationQueue *motionQueue = [NSOperationQueue new];

    NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"audioFile" ofType:@"m4a"]];
    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [self.audioPlayer prepareToPlay];

    self.motionManager = [CMMotionManager new];
    [self.motionManager setAccelerometerUpdateInterval:1.0f/30.0f];

    [self.motionManager startAccelerometerUpdatesToQueue:motionQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        if (fabsf(accelerometerData.acceleration.x) > 1.8 || fabsf(accelerometerData.acceleration.y) > 1.8 || fabsf(accelerometerData.acceleration.z) > 1.8) {
            NSLog(@"%@",accelerometerData);
            if (self.audioPlayer) {
                if (!self.audioPlayer.isPlaying) {
                    [self.audioPlayer play];
                }
            }
        }
    }];
}
于 2013-08-10T02:55:18.793 に答える