2

我在使用 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

4

2 回答 2

2

初始化的相反顺序似乎可以正常工作,OpenAL 然后是 AudioSession

于 2011-01-11T20:06:09.207 回答
0

只是一个疯狂的猜测:

第一代 iPod touch 没有扬声器。因此,也许您无法覆盖到不存在的扬声器的音频路由。

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

于 2010-11-18T20:59:14.160 回答