Đây là một chút cũ, nhưng bài đăng này đã giúp tôi và tôi muốn cập nhật nó cho bất kỳ ai khác có thể cần đến nó trong tương lai. Mã được đăng ở trên cùng là chính xác - nó sẽ lấy âm thanh yên tĩnh đang được phát qua loa điện thoại và định tuyến âm thanh tới loa ở phía dưới. Có một lỗi đánh máy nhỏ trong mã, đó là lý do tại sao nó đưa ra lỗi. Dưới đây là đúng đoạn mã mà sẽ giải quyết vấn đề này:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
Hãy chắc chắn rằng bạn cũng kích hoạt các phiên âm thanh ngay sau khi thiết lập này, trước khi tạo âm thanh của bạn nghe nhạc/ghi:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Cuối cùng, nếu bạn sẽ được chơi và ghi âm cùng một lúc bạn có thể sẽ cần phải thiết lập các thể loại và chức năng trộn quá. Đây là toàn bộ đoạn mã sẽ đặt danh mục, cho phép trộn, định tuyến âm thanh đến loa chính và kích hoạt phiên. Bạn sẽ chỉ muốn làm điều này một lần ngay sau khi ứng dụng khởi chạy.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
NSLog(@"Mixing: %x", propertySetError); // This should be 0 or there was an issue somewhere
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Hy vọng sẽ giúp ai đó!
Nguồn
2010-08-12 00:43:13
Vâng, điều này là cần thiết, nhưng tôi hiểu rồi. Không có thay đổi: ( Chức năng chính nó là không sao, bạn có thể thổi mic và nghe âm thanh, nhưng chỉ với loa trong. –