2013-09-03 5 views
0
проблему

Иоса: с помощью звуковых сообщений, чтобы изменить значение, играяИОСА аудио: с использованием звуковых сообщений для изменения хода процесса, играя

Recentlly, я делаю музыкальный плеер с звуковыми сообщениями (не используя AVPlayer), игрок играет локальные аудио файлов, но не интернет-файлы. Теперь я хочу добиться функции, которая может изменить ход воспроизведения с помощью слайдера. Как я могу это сделать? Короче говоря, как я могу использовать звуковой сигнал для достижения слайд-воспроизведения при воспроизведении локального файла.

Пожелайте ответу с помощью важного кода!

--------------------------- Добавить ------------------ -----
Я изменяю коды в демонстрации аудиопотока (URL: http://code4app.net/ios/Audio-Streamer/5019d9066803faa344000000). Мое мышление выглядит грубо:
1, откройте поток локальным музыкальным файлом.
2, Создайте AudioFileStreamID Obj (audioFileStream).
3, Создайте очередь в обратном вызове ASPacketsProc.
4, После создания, затем заполнили буферы очереди в обратном вызове 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); 

ответ

0

Я полагаю, вы использовали MPMusicPlayerController класс. Если вам нужен какой-то код, вы должны указать некоторые данные или код. Я не знаю, какой класс вы используете ...

Хотя, если вы использовали это, тогда вы можете установить свойство currentPlaybackTime, когда изменяется ползунок.

Допустим, у вас есть этот экземпляр:

@property (nonatomic, strong) MPMusicPlayerController *musicPlayer; 

Тогда, возможно, вы можете изменить время игры, как это:

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

Благодарим Вас за answer.But я не буду использовать любой из-за предельных функций. В настоящее время я хочу использовать класс AudioQueue для воспроизведения локальных аудиофайлов. Я помещаю некоторые коды. Коды не завершены, возможно, вы можете прочитать вызванные функции. – yonkie

 Смежные вопросы

  • Нет связанных вопросов^_^