2009-03-20 3 views
1

Я нахожу документацию Apple довольно ограниченной на AudioFileStreamSeek, и я не могу найти ни одного примера фактического использования в любом месте. У меня есть рабочий потоковый аудиоплеер, но я просто не могу заставить AudioFileStreamSeek работать как рекламируемый ...Может ли кто-нибудь предоставить рабочий пример AudioFileStreamSeek для iPhone?

Любые советы по использованию или небольшой пример были бы очень признательны!

+0

Позвольте мне знать, если вы нашли решение. Я все еще застрял! – lostInTransit

ответ

0

Если я ошибаюсь, это доступно только в SDK 3.0 и, следовательно, под NDA. Может быть, вы должны взять это на Apple Beta forums?

Я стою исправленный. AudioFileStreamSeek не отображается, если вы выполняете поиск в онлайн-версии 2.2.1. Вам нужно вручную выкопать документы, чтобы найти их.

+0

Нет. Я просто проверяю документы XCode для AudioFileStreamSeek, и он говорит: Доступен в iPhone OS 2.0 и новее. – Paul

+0

Я стою исправлены. AudioFileStreamSeek не отображается, если вы выполняете поиск в онлайн-версии 2.2.1. Вам нужно вручную выкопать документы, чтобы найти их. –

1

Я сказал это работает:

AudioQueueStop(audioQueue, true); 
UInt32 flags = 0; 
err = AudioFileStreamParseBytes(audioFileStream, length, bytes, 
           kAudioFileStreamParseFlag_Discontinuity); 

OSStatus status = AudioFileStreamSeek(audioFileStream, framePacket.mPacket, 
             &currentOffset, &flags); 
NSLog(@"Setting next byte offset to: %qi, flags: %d", (long long)currentOffset, flags); 

// then read data from the new offset set by AudioFileStreamSeek 
[fileHandle seekToFileOffset:currentOffset]; 
NSData* data = "" readDataOfLength:4096]; 

flags = kAudioFileStreamParseFlag_Discontinuity; 
status = AudioFileStreamParseBytes(stream, [data length], [data bytes], flags); 
if (status != noErr) 
{ 
    NSLog(@"Error parsing bytes: %d", status); 
} 
0

Не забудьте добавить данные смещения (kAudioFileStreamProperty_DataOffset) в байте возвращаемый AudioFileStreamSeek. Возвращаемое значение является смещением в аудиоданных и игнорирует смещение данных.

Это также хорошая идея, чтобы остановить, а затем повторно запустить AudioQueue до/после поиска.

0

Мэтт Галлахер использует AudioFileStreamSeek в своем примере "Streaming and playing an MP3 stream".

Посмотрите на код Мэтта AudioStreamer.m:

SInt64 seekPacket = floor(newSeekTime/packetDuration); 
err = AudioFileStreamSeek(audioFileStream, seekPacket, &packetAlignedByteOffset, &ioFlags);