Проблема с инициализацией OpenAL, только для iPod (?)

У меня проблема с OpenAL, которая, кажется, возникает только с аппаратным обеспечением iPod, и странно то, что он был нормально работать, а теперь нет.

Я настраиваю аудиосессию:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, 
sizeof(UInt32), &audioRouteOverride);

AudioSessionSetActive(YES);

И инициализация OpenAL:

device = alcOpenDevice(NULL);
if (!device) {
    NSLog(@"Could not open default OpenAL device.");
    return NO;
}

context = alcCreateContext(device, 0);
if (!context) {
    NSLog(@"Failed to create OpenAL context for default device.");
    return NO;
}

BOOL success = alcMakeContextCurrent(context);  // fails here
if (!success) {
    NSLog(@"Failed to set current OpenAL context.");
    return NO;

Результат:

AudioStreamBasicDescription:  2 ch,  44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved
2010-10-27 10:51:09.261 FinchTestProject[239:307] Failed to set current OpenAL context.

Итак, функция alcMakeContextCurrent возвращает false, и я не уверен, почему. Звук на самом деле не является моей компетенцией, и я не могу найти много информации об этом, поэтому любая помощь, которую вы, ребята, можете мне оказать, будет оценена по достоинству.

Спасибо!

РЕДАКТИРОВАТЬ: я обнаружил, что если я изменю порядок инициализации, то есть если я инициализирую OpenAL, а затем AudioSession, он работает... хотя это порядок, в котором я его использовал раньше, и он не работал, так что что-то забавное определенно происходит; Кроме того, он по-прежнему не работает со старыми версиями iOS.


person Adam    schedule 17.11.2010    source источник
comment
Вы пытались перезагрузить устройство, просто чтобы убедиться?   -  person zoul    schedule 17.11.2010
comment
Я думал, что аудиоресурс может быть заблокирован или что-то в этом роде, но хард-рестарт не помог   -  person Adam    schedule 18.11.2010


Ответы (2)


Обратный порядок инициализации, кажется, работает нормально, OpenAL, затем AudioSession

person Adam    schedule 11.01.2011
comment
Это любопытно. В последней версии Finch код инициализации аудиосеанса был удален, поэтому теперь вы можете открывать сеанс при необходимости. - person zoul; 02.02.2011
comment
Я использовал более старую версию Finch... спасибо за исправление :) - person Adam; 02.02.2011

Просто дикая догадка:

В iPod touch 1-го поколения нет динамика. Поэтому, возможно, вы не можете переопределить маршрут аудио к несуществующему динамику.

Редактировать: О, и только последний (4-го поколения) iPod touch имеет встроенный микрофон. Все остальные поколения требуют, чтобы наушники (с микрофоном) были подключены для записи. Может поэтому он вдруг перестал работать, наушники сняли.

person Jon-Eric    schedule 18.11.2010
comment
Я пытался удалить переопределение, также пробовал использовать наушники/микрофон, все равно не работает - person Adam; 19.11.2010