Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios音频:使用audioqueue更改播放进度_Ios_Avplayer_Audioqueue - Fatal编程技术网

ios音频:使用audioqueue更改播放进度

ios音频:使用audioqueue更改播放进度,ios,avplayer,audioqueue,Ios,Avplayer,Audioqueue,ios问题:使用audioqueue更改播放值 最近,我用audioqueue制作了一个音乐播放器(不使用avplayer),播放器可以播放本地音频文件,但不能播放internet文件。现在我想实现一个功能,用户可以使用滑块更改播放进度。我该怎么办? 简而言之,在播放本地文件时,如何使用audioqueue实现幻灯片播放进度 希望你的答案有一些重要的代码 ---------------------------追加-------------------- 我在音频拖缆演示(URL:)中修改了代码,

ios问题:使用audioqueue更改播放值

最近,我用audioqueue制作了一个音乐播放器(不使用avplayer),播放器可以播放本地音频文件,但不能播放internet文件。现在我想实现一个功能,用户可以使用滑块更改播放进度。我该怎么办? 简而言之,在播放本地文件时,如何使用audioqueue实现幻灯片播放进度

希望你的答案有一些重要的代码

---------------------------追加--------------------
我在音频拖缆演示(URL:)中修改了代码,大致思路如下:
1、 使用本地音乐文件打开流。
2、 创建audioFileStream对象(audioFileStream)。
3、 在回调ASPacketsProc中创建队列。
4、 在createqueue之后,然后在回调ASPacketsProc中填充队列的缓冲区。
5、 最后,我将调用函数开始播放

一些代码如下所示:

- (void) openReadStream {
  CFURLRef urlPath = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
    stream = CFReadStreamCreateWithFile(kCFAllocatorSystemDefault, urlPath);

    if (CFReadStreamOpen(stream))
    {
        CFStreamClientContext context = {0, self, NULL, NULL, NULL};
        CFReadStreamSetClient(
        stream,
        kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
        ASReadStreamCallBack,
        &context);
        CFReadStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
    }
}

static void ASReadStreamCallBack (CFReadStreamRef aStream, CFStreamEventType eventType,void* inClientInfo)
{
    AudioStreamer* streamer = (AudioStreamer *)inClientInfo;
    [streamer handleReadFromStream:aStream eventType:eventType];

}

AudioFileStreamOpen(self,ASPropertyListenerProc,ASPacketsProc,fileTypeHint,&audioFileStream);

- (void)createQueue {
    sampleRate = asbd.mSampleRate;
    packetDuration = asbd.mFramesPerPacket / sampleRate;

    // create the audio queue
    AudioQueueNewOutput(&asbd, ASAudioQueueOutputCallback, self, NULL, NULL, 0, &audioQueue);

    // listen to the "isRunning" property
    AudioQueueAddPropertyListener(audioQueue, kAudioQueueProperty_IsRunning, ASAudioQueueIsRunningCallback, self);

    // get the packet size if it is available
    UInt32 sizeOfUInt32 = sizeof(UInt32);
    AudioFileStreamGetProperty(audioFileStream, kAudioFileStreamProperty_PacketSizeUpperBound, &sizeOfUInt32, &packetBufferSize);

    for (unsigned int i = 0; i < kNumAQBufs; ++i)
    {
    AudioQueueAllocateBuffer(audioQueue, packetBufferSize, &audioQueueBuffer[i]);

    }

}

AudioQueueEnqueueBuffer(audioQueue, fillBuf, packetsFilled, packetDescs);

AudioQueueStart(audioQueue, NULL);
-(void)openReadStream{
CFURLRef urlPath=cfurlCreateWithFileSystemPassport(kCFAllocatorDefault,(CFStringRef)文件路径,kCFURLPOSIXPathStyle,false);
stream=CFReadStreamCreateWithFile(kCFAllocatorSystemDefault,urlPath);
如果(CFReadStreamOpen(流))
{
CFStreamClientContext={0,self,NULL,NULL,NULL};
CFReadStreamSetClient(
流动
kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | KCFStreameVentanden countered,
ASReadStreamCallBack,
&上下文);
CFReadStreamScheduleWithRunLoop(流,CFRunLoopGetCurrent(),kCFRunLoopCommonModes);
}
}
静态void ASReadStreamCallBack(CFReadStreamRef aStream、cfstreamventtype eventType、void*inClientInfo)
{
音频拖缆*拖缆=(音频拖缆*)inClientInfo;
[streamer HandlerReadFromStream:aStream eventType:eventType];
}
audiofilestreampen(self、ASPropertyListenerProc、ASPacketsProc、fileTypeHint和audioFileStream);
-(void)创建队列{
sampleRate=asbd.mSampleRate;
packetDuration=asbd.mFramesPerPacket/sampleRate;
//创建音频队列
AudioQueueNewOutput(&asbd、ASAudioQueueOutputCallback、self、NULL、NULL、0和audioQueue);
//收听“isRunning”属性
AudioQueueAddPropertyListener(audioQueue,kAudioQueueProperty_正在运行,AsaudioQueueIsRunning回调,self);
//获取数据包大小(如果可用)
UInt32 sizeOfUInt32=sizeof(UInt32);
AudioFileStreamGetProperty(audioFileStream、kAudioFileStreamProperty_PacketSizeUpperBound、&sizeOfUInt32、&packetBufferSize);
for(无符号整数i=0;i
我想,您使用了
MPMusicLayerController
类。如果你需要一些代码,你也必须提供一些数据或代码。我不知道,你在上什么课

不过,如果使用此选项,则可以在滑块更改时设置currentPlaybackTime属性

比方说,您有这样一个实例:

@property (nonatomic, strong) MPMusicPlayerController *musicPlayer;
然后,您可能可以这样更改播放时间:

- (IBAction)sliderChanged:(id)sender
{
    self.musicPlayer.currentPlaybackTime = self.slider.value;
}

谢谢你的回答。但我不会使用任何系统自己的控制器,因为限制功能。目前,我只想使用“AudioQueue”类来播放本地音频文件。我放了一些代码。代码还没有完成,也许你可以阅读调用的函数。