Neuere IOS-Geräte wie das 6S unterstützen nur native 48kHz-Wiedergabe. Nicht wirklich ein Problem, da Standard-CoreAudio-Graphen gut resample. Problem ist, wenn Sie eine VOIP-Art von App mit der Sprachverarbeitungseinheit machen, können Sie das Telefon nicht auf 44,1 kHz einstellen; es schafft eine schöne Darth-Vader-ähnliche Erfahrung!Wie erkennt man, ob das IOS-Gerät nur 48kHz in Hardware unterstützt?
Früher habe ich das Modell des Geräts überprüft und einfach gesagt: "Wenn es ein 6S oder später ist, dann muss ich 44.1 bis 48kHz resample", und das hat gut funktioniert. Ich mochte diesen Fix nicht, also probierte ich den folgenden Code:
session = [AVAudioSession sharedInstance];
[session setActive:YES error:&nsError];
if (systemSampleRate == 44100) // We may need to resample if it's a phone that only supports 48kHz like the 6S or 6SPlus
{
[session setCategory:AVAudioSessionCategoryPlayback
withOptions:0
error:&nsError];
result = [session setPreferredSampleRate:systemSampleRate error:&nsError];
hardwareSampleRate = [session sampleRate];
NSLog (@"Phone reports sample rate of %f", hardwareSampleRate);
if (hardwareSampleRate != (double)systemSampleRate) // We can't set it!!!!
needsResampling = YES;
else
{
[session setCategory:AVAudioSessionCategoryRecord
withOptions:AVAudioSessionCategoryOptionAllowBluetooth
error:&nsError];
result = [session setPreferredSampleRate:systemSampleRate error:&nsError];
hardwareSampleRate = [session sampleRate];
if (hardwareSampleRate != (double)systemSampleRate) // We can't set it!!!!
needsResampling = YES;
else
needsResampling = NO;
}
}
Meistens funktioniert das. Die 6S-Geräte würden 48 kHz melden, und alle anderen würden 44,1 kHz melden. ABER, wenn es an ein Bluetooth-Headset-System gebunden wurde, das nur 8-kHz-Mikrofon-Audio und 44,1 kHz-Wiedergabe unterstützt, meldet der erste Hardware-Sample-Rate-Wert 44,1 !!!! Also gehe ich davon aus, dass das Gerät nativ 44.1 unterstützt und alles kaputt geht.
SO ist die Frage: Wie finde ich heraus, ob das native Abspielgerät auf IOS physikalisch nur 48kHz unterstützt oder sowohl 44,1 als auch 48kHz unterstützen kann? Apples öffentliches Dokument dazu ist wertlos, es schüchtert Leute einfach dafür ein, dass ein Gerät beides unterstützt, ohne dir zu sagen, wie es herauszufinden ist.
Woher haben Sie systemSampleRate? – dave234
Ah, sollte erwähnt haben. Das ist die gewünschte Abtastrate, bei der das System "laufen" möchte. Es wird einfach in diese Routine übernommen und an anderer Stelle definiert. Es hat nur Werte von entweder 44100 oder 48000. – chuckd
Wo ist es definiert? – dave234