Frage

Ich bin die Aufzeichnung von Audio mit AVAudioRecorder wie in Wie zeichne ich Audio auf dem iPhone mit AVAudioRecorder?

Ich verwende AVAudioPlayer dann die Aufnahme abzuspielen. aus dem Ohr Lautsprecher aber der Ton kommt, nicht der Lautsprecher. Wie würde ich mich über den Ton der Lautsprecher umleiten?

TIA!

War es hilfreich?

Lösung

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

Andere Tipps

Ich weiß, diese Frage ziemlich alt ist, aber wenn ich mit dem gleichen Problem zu kämpfen habe, fand ich eine einfache Lösung, die hoffentlich jemanden helfen, die lauten Medien Lautsprecher Suche zu verwenden, wie der Empfängers Lautsprecher gegenüber. Die Methode, die ich verwendet wurde, die Einstellung der Audio-Sitzung mit der DefaultToSpeaker Option in AVAudioSessionCategoryOptions up:

In Swift (vorausgesetzt, Ihre Audio-Sitzung session genannt wird) -

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

In Obj-C -

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

Swift 3

Vor der Aufnahme des Schalls I gesetzt:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

und vor der Wiedergabe I gesetzt:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

Objective C

vor der Aufzeichnung:

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

vor der Wiedergabe:

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

Dies funktioniert gut für mich in Swift2

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

Dies ist eine alte Frage, aber die andere Antwort mir nicht helfen ... Allerdings fand ich eine Lösung, die ich für die Zukunft, falls jemand wäre Entsendung (oder ich von der Zukunft!) Braucht es.

Die Lösung wird in dem folgenden Blog-Eintrag beschrieben: iOS: Kraft Audio-Ausgang an die Lautsprecher während der Kopfhörer in angeschlossen.

Sie brauchen neue Objective-C-Klasse AudioRouter in Ihrem Projekt zu erstellen. Dann importieren AudioRouter.h in die Header-Datei der Klasse, wo Sie Audio-Funktionalität initiieren. Als nächstes wird in der entsprechenden .m Datei die folgenden Zeilen innerhalb viewDidLoad Methode:

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

Jetzt haben Sie Audio (z AVAudioPlayer) Ausgang zum Lautsprecher gezwungen! Beachten Sie, dass, wenn Sie stecken in Kopfhörer , während die App ausgeführt wird, dann werden alle Audio-Ausgang Kopfhörer geleitet wird.

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)")
    }

Antwort Für 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 _ {
    }
}

Dies ist der Schlüssel Linie zur Ausgabe auido Lautsprecher statt Mikrofon. Hinweis es während der Aufnahme eingestellt werden sollte

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

Im Folgenden finden Sie komplette Funktion zum Einrichten der Aufnahme

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.")
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top