获取时间间隔并在目标C中播放声音

时间:2012-08-22 00:08:06

标签: iphone objective-c ios xcode

我是Object C的新手,我有两个问题,但我无法在stackoverflow上找到答案。

我的iOS应用很简单,屏幕上有一个按钮,如果用户点击它,它将会:

  1. 播放声音

  2. 获取2个抽头之间的时间间隔(毫秒)。

  3. 感谢Owl,现在获取间隔的代码如下:

    (长编码,因为我不明白什么是“UNIX时间戳”,我不知道在哪里/如何使用第二个代码。)

    double dt1;
    double dt2;
    
    -(IBAction)Beated:(id)sender{
       If (FB == 1) {
          FB = 2;
          NSDate *date = [NSDate date];
          NSTimeInterval ti = [date timeIntervalSince1970];
          dt1 = ti;
       } else {
          FB = 1
          NSDate *date = [NSDate date];
          NSTimeInterval ti = [date timeIntervalSince1970];
          dt2 = ti;
          double progress;
          progress = dt2 - dt1;
          int timeInMs = trunc(progress * 1000);
          NSLog(@"Interval %d", timeInMs);
       }
    }
    

    启动应用程序后,第一次播放声音时出现延迟,但在第一次点击后效果很好。如何阻止这种滞后?

    播放声音的代码:

    in .h

    #import <AVFoundation/AVFoundation.h>
    

    AVAudioPlayer *audioPlayer;
    

    in .m

     -(IBAction)Beated:(id)sender {
           NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ssn.wav",     [[NSBundle mainBundle] resourcePath]]];
           NSError*error;
           audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url  error:$error];
           audioPlayer.numberOfLoops = 0;
           [audioPlayer play];
    }
    

    谢谢

1 个答案:

答案 0 :(得分:1)

首先点击,

NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];

获取UNIX时间戳,

第二次点击,

NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];

获取另一个UNIX时间戳,然后从第二个时间戳中减去第一个时间戳。减法的结果就是你的进步。

然后使用此代码获取小时:分钟:秒

double progress;

 int minutes = floor(progress/60);
 int seconds = trunc(progress - minutes * 60);

代码礼貌:How to convert an NSTimeInterval (seconds) into minutes

更容易

从两次点击中获取两个NSDate然后使用,然后不需要减法,只需使用以下方法获取时间间隔。然后如上所示计算分钟和秒。

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate

<强>替代地

使用components:fromDate:toDate:options:课程中的NSCalender方法。请参阅:Apple Doc

编辑:

Jus做了一个快速测试,它对我来说很有效。

测试代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    NSDate *date = [NSDate date];
    NSTimeInterval ti = [date timeIntervalSince1970];

    NSLog(@"%f",ti);

    return YES;
}

NSLog输出:

2012-08-22 10:46:09.123 Test[778:c07] 1345596369.123665