iPhone:如何在特定时间播放声音?

时间:2010-02-01 12:13:06

标签: iphone avaudioplayer nstimer

我写了以下代码:

-(void)runTimer
{
    myTicker=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
    myTicker = [NSTimer scheduledTimerWithTimeInterval:60.00 target:self selector:@selector(vibrate) userInfo:nil repeats:YES];
}

-(void)showActivity
{
    NSDateFormatter *formatter =
                  [[[NSDateFormatter alloc] init] autorelease];
            NSDate *date = [NSDate date];
        [formatter setTimeStyle:NSDateFormatterMediumStyle];
         [timerLabel setText:[formatter stringFromDate:date]];
}
-(void) vibrate{
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

}

我想播放音频文件而不是振动iPhone。这可能吗?

5 个答案:

答案 0 :(得分:1)

与主要问题相切但计时器选择器调用的方法应为......

-(void) aribtaryMethodName:(NSTimer *) theTimer;

...或者它可能无法正确调用。它的选择器应如下所示:

myTicker=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(aribtaryMethodName:) userInfo:nil repeats:YES];

答案 1 :(得分:0)

是。假设您有一个.caf文件,可以使用

播放
SystemSoundID sound_id;
AudioServicesCreateSystemSoundID(NSURL_of_your_caf_file, &sound_id);
...
AudioServicesPlaySystemSound(sound_id);

要播放音乐,您可能需要使用AVAudioPlayer

答案 2 :(得分:0)

不确定。参见AVAudioPlayer类。

答案 3 :(得分:0)

检查 Apple的示例项目BubbleLevel 。您希望SoundEffect.h和SoundEffect.m进入您的项目,然后只需调用:

mySound = [[SoundEffect alloc]
    initWithContentsOfFile:[mainBundle pathForResource:@"mySound"
    ofType:@"aif"]];
[mySound play];    

警告:我只能播放通过iTunes转换的AIF声音。其他任何失败,包括CAF文件。简而言之:将您的任何声音导入iTunes(拖放),将导出更改为AIF格式,然后导出文件。

答案 4 :(得分:0)

-(IBAction)slider1Changed:(id)sender
{
    [timer invalidate];
    float sliderValue=slider1.value;
    int totalSecond=(int)sliderValue;
    time=totalSecond;
    int sec= totalSecond %60;
    int min= (totalSecond -sec)/60;
    sliderValue=(float)totalSecond;
    runTime.text=[NSString stringWithFormat:@"%d:%.2d",min,sec];
    [slider1 setValue:sliderValue];
    timer =   [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerChanged) userInfo:nil repeats:YES];

    // to play the audio from particular time duration
    [player setCurrentTime:totalSecond];
}

-(void)timerChanged
{
   int totalSecond=[player duration];

   float slider1Time=(float)time;
   if (time <= totalSecond) {
      int sec= time %60;
      int min= (time -sec)/60;
      runTime.text=[NSString stringWithFormat:@"%d:%.2d",min,sec];
      [slider1 setValue:slider1Time];
   }
   else
   {
      [player stop];
      [timer invalidate];
   }
   time +=1;

}