2009-06-21 25 views

Trả lời

18

Từ 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); 
+1

Điều này làm việc với AVAudioPlayer hoặc chỉ AudioServices? –

+5

Một lưu ý cho những người khác đi qua câu trả lời này: hai dòng đầu tiên trong mã mẫu không liên quan - và nếu bạn giống như OP (âm thanh ghi C ALNG), những dòng này sẽ ngăn việc ghi âm hoạt động bình thường. – Steve

+1

Điều này làm việc cho tôi với một điều chỉnh: Tôi đã thay đổi sessionCategory thành kAudioSessionCategory_PlayAndRecord. – Jacob

6

Đây là một câu hỏi cũ, nhưng câu trả lời khác không giúp tôi ... Tuy nhiên, tôi tìm thấy một giải pháp mà tôi gửi bài để tham khảo trong tương lai trong trường hợp ai đó (hoặc bản thân mình từ tương lai!) cần nó.

Giải pháp được mô tả trong bài đăng trên blog sau đây: iOS: Force audio output to speakers while headphones are plugged in.

Bạn cần tạo AudioRouter lớp Objective-C mới trong dự án của mình. Sau đó, nhập AudioRouter.h vào tệp tiêu đề của lớp bạn đang bắt đầu chức năng âm thanh. Tiếp theo, trong .m tập tin tương ứng thêm những dòng sau đây trong vòng viewDidLoad phương pháp:

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

Bây giờ bạn có âm thanh (ví dụ AVAudioPlayer) đầu ra buộc phải loa! Lưu ý rằng nếu bạn cắm tai nghe trong khi ứng dụng đang chạy, khi đó tất cả đầu ra âm thanh được hướng đến tai nghe.

14

Swift 3

Trước khi ghi lại những âm thanh tôi đặt:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 

và trước khi phát lại tôi đặt:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 

Objective C

b ghi efore:

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

trước khi phát lại:

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

Điều này rất dễ dàng và hữu ích! Cảm ơn, người đàn ông! – CSawy

+0

Chỉ thay đổi danh mục nếu nó phù hợp với trường hợp người dùng của bạn. Đối với 'AVAudioSessionCategoryAmbient', apple nói "Danh mục cho ứng dụng phát lại âm thanh không chính xác — tức là ứng dụng của bạn có thể được sử dụng thành công khi tắt âm thanh. Danh mục này cũng thích hợp cho các ứng dụng kiểu" phát theo ", chẳng hạn như một đàn piano ảo mà người dùng phát khi ứng dụng Nhạc đang phát. Khi bạn sử dụng danh mục này, âm thanh từ các ứng dụng khác sẽ kết hợp với âm thanh của bạn. Âm thanh của bạn bị tắt tiếng bằng khóa màn hình và bằng công tắc Im lặng ". – KudoCC

26

Tôi nhận ra câu hỏi này là khá cũ nhưng khi tôi đã phải vật lộn với vấn đề tương tự tôi tìm thấy một giải pháp đơn giản mà hy vọng sẽ giúp bất cứ ai khác muốn sử dụng các loa đa phương tiện to hơn so với loa thu.Phương pháp tôi đã sử dụng được thiết lập lại phiên âm thanh với các tùy chọn DefaultToSpeaker trong AVAudioSessionCategoryOptions:

Trong Swift (giả phiên âm thanh của bạn được đặt tên session) -

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

Trong obj-C -

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

Làm việc cho tôi. Cảm ơn. –

+0

hoạt động tốt đẹp như một sự quyến rũ! – coolcool1994

6

Swift2:

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

này hoạt động tuyệt vời đối với tôi trong Swift2

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

Swift 3

let audioSession = AVAudioSession.sharedInstance() 

    do { 
     try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
    } catch let error as NSError { 
     print("Audio Session error: \(error.localizedDescription)") 
    } 
0
Answer For 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 _ { 
    } 
} 
Các vấn đề liên quan