質問

AVAudioRecorderを使用してiPhoneでオーディオを録音するにはどうすればよいですか

その後、AVAudioPlayerを使用して記録を再生します。しかし、音はスピーカーではなく耳のスピーカーから出ています。サウンドをスピーカーにリダイレクトするにはどうすればいいですか?

TIA!

役に立ちましたか?

解決

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];

Swift 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:Forceヘッドフォンを接続した状態でスピーカーに音声出力します

プロジェクトで新しい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)

Swift 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 _ {
    }
}

これは、マイクではなくスピーカーで音声を出力するための重要な行です。記録中に設定しないでください

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