gpt4 book ai didi

ios - 从加速度计执行操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:59 24 4
gpt4 key购买 nike

我对 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

我仍然没有得到任何快乐,我为牵手而道歉。我得到的只是一个白屏,但声音文件从未播放过。我已经导入了正确的框架,只需一个按钮就可以播放声音,但我真的很想玩加速度计。谢谢

最佳答案

好的,您要做的第一件事是在接口(interface)文件或实现文件顶部的接口(interface)扩展中定义两个属性。它们将是运动管理器和音频播放器。

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

然后我们可以在 viewDidLoad 中完成其他所有事情。下面的代码为运动管理器设置一个新的操作队列以接收加速度计事件,初始化音频播放器和运动管理器,然后开始以每秒 30 次的间隔获取加速度计更新。

最后,在加速度计更新 block 中,只需使用您已经构建的相同逻辑来检查加速度数据,如果它满足您的要求,则继续下一个条件。

**我已将此示例配置为在播放器已经在播放时不再开始播放声音

- (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];
}
}
}
}];
}

关于ios - 从加速度计执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com