Speak Here 예제 앱을 기반으로 애플리케이션을 만듭니다. 오디오가 연결되어 있거나 스피커가없는 경우 오디오를 헤드폰을 통해 재생하고 싶습니다.재생 중에 헤드폰이 뽑히면 iPhone 앱에 버그가 발생합니다.
나는 이런 일이 일어나도록 코드의 맨 아래 부분을 사용했으며 재생 중에 헤드폰을 뽑지 않으면 정상적으로 작동합니다. 그 시점에서 재생이 끝나고 괜찮습니다. 문제는 재생을 다시 히트하면 재생이 이상하게 나오고 중지 버튼이 작동을 멈추는 것입니다. 또한 정지 버튼을 눌렀을 때 정상적으로하는 것처럼 처음부터 다시 시작하지 않고 중단 한 부분부터 재생을 시작합니다.
마찬가지로 앱을 열기 전에 헤드폰을 연결하면 이상한 동작이 발생합니다.
어쩌면 '헤드폰 분리됨'이벤트를 가져 와서 '중지 버튼을 누르십시오.' 그것이 지금하고있는 방식이 올바르지 않기 때문에.
간단한 형태로 내 질문에 넣으려면 : 당신에게 스피커와 헤드폰을 통해 재생을위한 아이폰에 제대로 설치 코어 오디오를 수행하는 방법에 대해 설명합니다.이 문제를 해결할 수있는 코드는 모두입니다. 감사!
OSStatus error = AudioSessionInitialize(NULL, NULL, NULL, NULL);
if (error) printf("ERROR INITIALIZING AUDIO SESSION! %d\n", error);
else
{
UInt32 category = kAudioSessionCategory_PlayAndRecord;
// UInt32 category = kAudioSessionCategory_MediaPlayback;
error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
if (error) printf("couldn't set audio category!");
// It is bugs when I unplug the headphones!
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);
error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", error);
UInt32 inputAvailable = 0;
UInt32 size = sizeof(inputAvailable);
// we do not want to allow recording if input is not available
error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable);
if (error) printf("ERROR GETTING INPUT AVAILABILITY! %d\n", error);
btn_record.enabled = (inputAvailable) ? YES : NO;
// we also need to listen to see if input availability changes
error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, propListener, self);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", error);
error = AudioSessionSetActive(true);
if (error) printf("AudioSessionSetActive (true) failed");