33

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

次に、AVAudioPlayer を使用して録音を再生します。ただし、音はラウドスピーカーではなくイヤースピーカーから出ています。サウンドをラウドスピーカーにリダイレクトするにはどうすればよいですか?

ティア!

4

11 に答える 11

31

この質問はかなり古いものだと思いますが、同じ問題に苦しんでいたときに、レシーバースピーカーではなく、より大きなメディアスピーカーを使用しようとしている他の人に役立つ簡単な解決策を見つけました. 私が使用した方法は、AVAudioSessionCategoryOptions の DefaultToSpeaker オプションを使用してオーディオ セッションをセットアップすることでした。

Swift の場合 (オーディオ セッションの名前が であると仮定session) -

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

Obj-C で -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];
于 2015-05-19T14:34:08.567 に答える
18

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);
于 2009-07-07T04:07:01.683 に答える
17

スイフト3

私が設定した音を録音する前に:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

再生する前に、次のように設定しました。

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

オブジェクティブ C

録音前:

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

再生前:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
于 2014-06-17T01:16:43.257 に答える
13

これはSwift2で私にとってうまく機能します

let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)
于 2015-12-24T17:19:37.480 に答える
6

Swift2:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
    withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker)
于 2015-10-05T01:09:57.770 に答える
6

これは古い質問ですが、他の回答は役に立ちませんでした.

解決策は、次のブログ投稿で説明されています: iOS: ヘッドフォンが接続されている間にオーディオ出力をスピーカーに強制する

プロジェクトに新しい Objective-C クラス AudioRouter を作成する必要があります。次に、オーディオ機能を開始するクラスのヘッダー ファイルにインポートAudioRouter.hします。次に、対応するファイルで、メソッド.m内に次の行を追加します。viewDidLoad

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

これでオーディオ (AVAudioPlayer など) の出力がラウドスピーカーに強制されました。アプリの実行中にイヤホンを接続すると、すべてのオーディオ出力がイヤホンに向けられることに注意してください。

于 2013-11-19T01:41:20.120 に答える
1

これは、マイクではなくスピーカーでオーディオを出力するための重要な行です。記録中に設定する必要があることに注意してください

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.")
    }
}
于 2019-03-22T07:14:17.030 に答える