سؤال

أقوم بتسجيل الصوت باستخدام AVAudioRecorder كما هو موضح في كيف يمكنني تسجيل الصوت على iPhone باستخدام AVAudioRecorder؟

ثم أستخدم AVAudioPlayer لتشغيل التسجيل.لكن الصوت يخرج من مكبر الصوت وليس مكبر الصوت.كيف أقوم بإعادة توجيه الصوت إلى مكبر الصوت؟

تيا!

هل كانت مفيدة؟

المحلول

من <لأ href = "http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html" يختلط = " noreferrer "> 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);

نصائح أخرى

وأنا أدرك هذا السؤال قديمة نوعا ما ولكن عندما كنت تعاني من نفس المشكلة وجدت حلا بسيطا أن نأمل مساعدة أي شخص آخر تبحث لاستخدام مكبرات الصوت وسائل الاعلام بصوت أعلى بالمقارنة مع مكبرات صوت جهاز الاستقبال. طريقة اعتدت تم إعداد جلسة الصوت مع خيار DefaultToSpeaker في AVAudioSessionCategoryOptions:

في سويفت (على افتراض يدعى جلسة الصوتية session) -

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

في الكائنات C -

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

سويفت 3

قبل تسجيل الصوت قمت بتعيين:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

وقبل التشغيل قمت بتعيين:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

ج موضوعية

قبل التسجيل:

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

قبل التشغيل:

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

وهذا يعمل كبيرة بالنسبة لي في Swift2

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

هذا سؤال قديم لكن الإجابة الأخرى لم تساعدني ...ومع ذلك، فقد وجدت حلاً أقوم بنشره للرجوع إليه مستقبلاً في حالة احتياج شخص ما (أو أنا من المستقبل!) إليه.

الحل موضح في منشور المدونة التالي: دائرة الرقابة الداخلية:فرض إخراج الصوت إلى مكبرات الصوت أثناء توصيل سماعات الرأس .

تحتاج إلى إنشاء جهاز AudioRouter فئة Objective-C جديد في مشروعك.ثم قم بالاستيراد AudioRouter.h في ملف رأس الفصل الدراسي الذي تبدأ فيه وظيفة الصوت.المقبل، في المقابلة .m أضف الأسطر التالية داخل الملف viewDidLoad طريقة:

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

الآن لديك صوت (على سبيل المثال.AVAudioPlayer) الإخراج القسري إلى مكبر الصوت!لاحظ أنه إذا قمت بتوصيل سماعات الأذن بينما التطبيق قيد التشغيل، ثم يتم توجيه كل إخراج الصوت إلى سماعات الأذن.

سويفت2:

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

وجواب لأجل سويفت 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