OpenAL初始化问题,仅限iPod(?)

时间:2010-11-17 03:28:57

标签: iphone audio ipod openal finch

我遇到的问题是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

2 个答案:

答案 0 :(得分:2)

初始化的反向顺序似乎正常,OpenAL然后是AudioSession

答案 1 :(得分:0)

只是猜测:

第1代iPod touch 没有扬声器。因此,您可能无法将音频路由覆盖为不存在的扬声器。

编辑:哦,只有最新的(第4代)iPod touch内置了麦克风。所有其他代都要求插入耳机(带麦克风)进行录制。也许这就是为什么它突然停止工作,耳机被移除了。