cuốn sách gpt4 ai đã làm

ios - AVAudioSession - 如何在扬声器和耳机输出之间切换

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 08:28:36 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang cố gắng bắt chước hành vi trong ứng dụng điện thoại trong khi gọi điện. Bạn có thể dễ dàng chuyển đổi nguồn đầu ra từ/sang loa hoặc tai nghe. Tôi biết tôi có thể buộc loa làm đầu ra khi tai nghe được kết nối bằng cách gọi:

hãy thử! audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)  
hãy thử! audioSession.overrideOutputAudioPort(.loa)

Tuy nhiên, khi thực hiện việc này, tôi không thấy cách nào để phát hiện xem tai nghe có còn kết nối với thiết bị hay không.

Ban đầu tôi nghĩ rằng trên AVAudioSession nguồn dữ liệu đầu ra sẽ trả về tất cả các kết quả đầu ra có thể, nhưng nó luôn trả về con số không.

Có điều gì tôi bỏ lỡ không?

câu trả lời hay nhất

Bạn cần thay đổi nguồn dữ liệu đầu ra vì khi bạn ghi đè lên nó,

Bây giờ nó chỉ chứa.Loa Tùy chọn

Trong tài liệu bạn có thể tìm thấy giải pháp cho vấn đề này,

Nếu ứng dụng của bạn sử dụng danh mục playAndRecord, việc gọi phương thức này bằng tùy chọn AVAudioSession.PortOverride.loa sẽ khiến âm thanh được định tuyến đến loa và micrô tích hợp bất kể các cài đặt khác. Thay đổi này chỉ có hiệu lực cho đến khi lộ trình hiện tại thay đổi hoặc bạn. gọi lại phương thức này bằng tùy chọn AVAudioSession.PortOverride.none.

Vì vậy, âm thanh được định tuyến đến loa tích hợp, điều này chỉ thay đổi nếu định tuyến hiện tại thay đổi hoặc bạn sử dụng .noneOption Nó có giá trị cho đến khi phương thức này được gọi lại.

Không có cách nào để buộc âm thanh truyền đến tai nghe trừ khi bạn cắm phụ kiện vào giắc cắm tai nghe (kích hoạt công tắc vật lý để truyền âm thanh đến tai nghe).

Vì vậy, khi bạn muốn chuyển trở lại sử dụng tai nghe, thao tác này sẽ hoạt động. Nếu không kết nối tai nghe, thiết bị đầu ra sẽ được chuyển sang đầu ra loa nhỏ phía trên đầu thiết bị thay vì loa lớn.

hãy để phiên: AVAudioSession = AVAudioSession.sharedInstance()
LÀM {
thử session.setCategory(AVAudioSessionCategoryPlayAndRecord)
thử session.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
thử session.setActive(true)
} nắm lấy {
print("Không thể ghi đè cổng âm thanh đầu ra")
}

Đọc về AVAdioSession/OverrideOutputAudioPort này Here .

Bạn có thể kiểm tra xem tai nghe đã được kết nối hay chưa bằng cách thêm tiện ích mở rộng này,

    tiện ích mở rộng AVAudioSession {

biến tĩnh isHeadphonesConnected: Bool {
trả về SharedInstance().isHeadphonesConnected
}

var isHeadphonesConnected: Bool {
trả về !currentRoute.outputs.filter { $0.isHeadphones }.isEmpty
}

}

phần mở rộng AVAudioSessionPortDescription {
var isHeadphones: Bool {
trả về portType == AVAudioSessionPortHeadphones
}
}

Chỉ cần sử dụng dòng mã này

session.isHeadphonesĐã kết nối

Về ios - AVAudioSession - cách chuyển đổi giữa đầu ra loa và tai nghe, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/52390659/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress