-->

如何获得AVAudioPlayer输出到扬声器(How to get AVAudioPlayer o

2019-06-23 18:30发布

我记录与AVAudioRecorder音频中看到如何在iPhone上录制音频与AVAudioRecorder?

然后我使用AVAudioPlayer播放的录音。 然而,发出声音的耳机,而不是扬声器的。 我怎么会去重定向声音外放?

TIA!

Answer 1:

从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);


Answer 2:

我意识到这个问题是相当老,但是当我用同样的问题所困扰,我发现一个简单的解决方案,希望能帮助其他人指望用响亮的媒体扬声器,而不是机的扬声器。 我用的方法,建立音频对话与AVAudioSessionCategoryOptions的DefaultToSpeaker选项:

在斯威夫特(假设你的音频会话被命名为session ) -

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

在对象 - -

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


Answer 3:

斯威夫特3

记录我设置声音之前:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

和播放之前,我设置:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

目标C

录制前:

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

播放前:

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


Answer 4:

这Swift2为我的伟大工程

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


Answer 5:

这是一个老问题,但对方的回答对我没有帮助。不过,我发现了我张贴的,以防有人将来参考的解决方案(从未来或自己!)需要它。

该解决方案在以下博客文章中描述: iOS版:当耳机插入了强制音频输出到扬声器 。

你需要在你的项目中创建新的Objective-C类AudioRouter。 然后导入AudioRouter.h到您正在发起音频功能的类的头文件。 接下来,在相应.m文件添加内以下行viewDidLoad方法:

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

现在你有音频(如AVAudioPlayer)输出强制到扬声器! 请注意,如果您在耳机插入应用程序运行 ,则所有的音频输出被定向到耳机。



Answer 6:

Swift2:

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


Answer 7:

斯威夫特3

 let audioSession = AVAudioSession.sharedInstance()

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


Answer 8:

答案雨燕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 _ {
    }
}


Answer 9:

这是关键线路输出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.")
    }
}


文章来源: How to get AVAudioPlayer output to the speaker