2014-04-24 79 views
1

我正在使用AUGraph(从iPhonemixerEQgraphtest中取得的示例)实现一个播放器。我已经实现了下一首和前一首歌曲。但自从昨天以来,我一直在使用UISlider进行球员前锋选择。请问任何人都可以告诉我如何实现向前选项。为了更好地理解,我已经包含了图像。例如:如果我将滑块滑动到10秒钟,那么它必须从第10秒播放乐曲。任何想法/建议可能是非常感激在iPhone混音器中使用AUGraph转发歌曲EQGraph Test

enter image description here

+0

即使我面对一样。如果你已经解决了它。你可以请分享你的解决方案 – Anand

+1

嗨,我已经完成了这一点。请在下面找到我的解决方案 – Tendulkar

回答

1

嗨经过长期的研究后,我已经找到了解决办法

在AUGraphController.mm我更改此代码

// the render notification is used to keep track of the frame number position in the source audio 
static OSStatus renderNotification(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) 
{ 
    Simple_PlayerAppDelegate *appDel = (Simple_PlayerAppDelegate*)[[UIApplication sharedApplication] delegate]; 

    SourceAudioBufferDataPtr userData = (SourceAudioBufferDataPtr)inRefCon; 
    //NSLog(@"userdata out is %lu",(userData->frameNum/44100)); 

    appDel.secondsFromLocalSong = (userData->frameNum/44100); 

    if (*ioActionFlags & kAudioUnitRenderAction_PostRender) 
    { 

     //printf("post render notification frameNum %ld inNumberFrames %ld\n", userData->frameNum, inNumberFrames); 

     if(appDel.skipSecondsFromLocalSong>0) 
     { 
      userData->frameNum = (appDel.skipSecondsFromLocalSong*userData->maxNumFrames); 
      appDel.skipSecondsFromLocalSong = 0; 
     } 
     else 
      userData->frameNum += inNumberFrames; 

     if (userData->frameNum >= userData->maxNumFrames) { 
      //userData->frameNum = 0; 
      SilenceData(ioData); 
     } 
    } 

    return noErr; 
}