2

私は、iPod ハードウェアでのみ発生するように見える OpenAL に問題があります。奇妙なことに、問題なく動作していましたが、現在動作していません。

私はオーディオセッションを設定しています:

[[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

ただの推測:

第 1 世代の iPod touch にはスピーカーありません。そのため、おそらく、存在しないスピーカーへのオーディオ ルートを上書きすることはできません。

編集: ああ、最新 (第 4 世代) の iPod touch だけにマイクが内蔵されています。他のすべての世代では、録音するにはヘッドフォン (マイク付き) を接続する必要があります。たぶんそれが突然機能しなくなった理由で、ヘッドフォンが取り外されました。

于 2010-11-18T20:59:14.160 に答える