문제

나는 AvaudioreCorder에서 오디오를 녹음하고 있습니다 avaudiorecorder를 사용하여 iPhone에서 오디오를 어떻게 녹화합니까?

그런 다음 avaudioplayer를 사용하여 녹음을 재생합니다. 그러나 소리는 큰 스피커가 아니라 귀 스피커에서 나옵니다. 소리를 시끄러운 스피커로 어떻게 리디렉션할까요?

티아!

도움이 되었습니까?

해결책

에서 http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html --

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

다른 팁

나는이 질문이 상당히 오래되었다는 것을 알고 있지만 같은 문제로 어려움을 겪고있을 때 나는 수신기 스피커와 달리 더 큰 미디어 스피커를 사용하려는 다른 사람을 도울 수있는 간단한 솔루션을 발견했습니다. 내가 사용한 방법은 avaudiosessioncategoryOptions에서 DefaultTospeaker 옵션으로 오디오 세션을 설정하는 것이 었습니다.

Swift에서 (오디오 세션의 이름이 지정되었다고 가정합니다 session) -

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil)

OBJ -C에서 -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];

스위프트 3

사운드를 녹음하기 전에 나는 설정했다 :

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

그리고 재생하기 전에 나는 다음을 설정했다 :

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

객관적인 c

녹음하기 전에 :

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error:nil];

재생 전 :

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

이것은 Swift2에서 나를 위해 잘 작동합니다

let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)

이것은 오래된 질문이지만 다른 대답은 저를 도와주지 않았습니다 ... 그러나 누군가 (또는 미래의 나 자신)가 필요로하는 경우 향후 참조를 위해 게시하는 솔루션을 찾았습니다.

솔루션은 다음 블로그 게시물에 설명되어 있습니다. iOS : 헤드폰을 연결하는 동안 오디오 출력을 스피커에 강제로 출력합니다. .

프로젝트에서 새로운 Objective-C 클래스 Audiorouter를 만들어야합니다. 그런 다음 가져옵니다 AudioRouter.h 오디오 기능을 시작하는 클래스의 헤더 파일로. 다음으로, 해당 .m 파일 내에 다음 줄을 추가합니다 viewDidLoad 방법:

AudioRouter *foobar = [[AudioRouter alloc] init];
[foobar initAudioSessionRouting];
[foobar forceOutputToBuiltInSpeakers];

이제 오디오 (예 : avaudioplayer) 출력이 라우드 스피커로 강제로 제공됩니다! 이어폰을 연결하는 경우에 유의하십시오 동안 앱이 실행되고 있으며 모든 오디오 출력은 이어폰으로 향합니다.

Swift2 :

try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
    withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker)

스위프트 3

 let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch let error as NSError {
        print("Audio Session error: \(error.localizedDescription)")
    }

Swift 4.0에 대한 답변

func SetSessionPlayerOn()
{
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().setActive(true)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch _ {
    }
}
func SetSessionPlayerOff()
{
    do {
        try AVAudioSession.sharedInstance().setActive(false)
    } catch _ {
    }
}

이것은 마이크에서 스피커에서 Auido를 출력하는 핵심 라인입니다. 기록하는 동안 설정해야합니다

try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)

아래는 설정 녹음에 완전한 기능입니다

private func setupRecorder() {

    if isAudioRecordingGranted {
        let session = AVAudioSession.sharedInstance()
        do {

            if #available(iOS 10.0, *) {
                try! session.setCategory(.playAndRecord, mode:.spokenAudio)
            }
            else {
                // Workaround until https://forums.swift.org/t/using-methods-marked-unavailable-in-swift-4-2/14949 isn't fixed
               session.perform(NSSelectorFromString("setCategory:error:"), with: AVAudioSession.Category.playback)
            }
            try session.setActive(true)
            try session.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)

            let settings = [
                AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
                AVSampleRateKey: 44100,
                AVNumberOfChannelsKey: 2,
                AVEncoderAudioQualityKey:AVAudioQuality.high.rawValue
            ]
            audioRecorder = try AVAudioRecorder(url: fileUrl(), settings: settings)
            audioRecorder.delegate = self
            audioRecorder.isMeteringEnabled = true
            audioRecorder.prepareToRecord()
            self.recorderState = .Ready
        }
        catch let error {
            recorderState = .error(error)
        }
    }
    else {
        recorderState = .Failed("Don't have access to use your microphone.")
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top