2012-06-27 60 views
19

Trong ứng dụng của tôi, tôi đưa ra các tuyên bố sau đây:AudioFlinger là gì và tại sao nó thất bại TONE_PROP_ACK?

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600); 

Những hoạt động rất tốt trên LG LS670 giá rẻ chạy Android 2.3.3 nhưng không có âm thanh ở tất cả trên tất cả các điện thoại khác mà tôi có, từ Android 2.2 .1 đến Android 2.3.4.

Vì vậy, tôi biết phiên bản hệ điều hành không đóng vai trò ở đây (tôi cũng đã xác minh trong tài liệu rằng nó đã được hỗ trợ từ API 1).

Ngoài ra, cả hai Ringer khối lượng và khối lượng phương tiện được thiết lập để tối đa và toneGenerator được khởi tạo với:

toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100); 

Và tôi xác nhận rằng Settings.System.DTMF_TONE_WHEN_DIALING được thiết lập để 1.

bối rối bởi hành vi không phù hợp này (qua điện thoại khác), tôi kiểm tra nhật ký hệ thống khi điều này xảy ra và sự khác biệt đáng ngờ duy nhất tôi có thể tìm thấy là điện thoại không thành công để phát âm TONE_PROP_ACK có dòng này trong nhật ký của họ:

AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121 

Mục đích của AudioFlinger và những gì có thể là kết nối của nó để tắt tiếng TONE_PROP_ACK?

Bất kỳ idea cách sửa mã của tôi để TONE_PROP_ACK luôn phát ra âm thanh, bất kể kiểu điện thoại là gì?

+3

Âm thanh flinger là thành phần hệ thống quản lý âm thanh từ userpsace android trước khi giao nó cho trình điều khiển hạt nhân. Bạn có thể nhận được âm thanh từ bất kỳ chức năng nào của tông màu không? Bạn có thấy phần trong tài liệu API về định tuyến âm thanh đang biến không? Những gì bạn đang thực sự cố gắng để thực hiện anyway - bạn biết những tông màu không đi qua các đường lên cuộc gọi, phải không? –

+0

@ChrisStratton Vâng, tôi biết các tông màu này không đi qua đường lên của cuộc gọi. Đây thực sự là hành vi ưa thích của tôi vì tôi chỉ cố gắng đưa ra một gợi ý âm thanh (nó không phải là DTMF). Tôi có thể nhận được âm thanh từ các chức năng của âm báo khi tôi sử dụng hoạt động quay số của điện thoại. Bạn có thể xây dựng trên "định tuyến âm thanh được biến" không? Tôi tìm phần đó trong tài liệu API ở đâu? URL trực tiếp sẽ là siêu. Cảm ơn +1. –

+0

'routing = 0' cho' io 25' có nghĩa là AudioFlinger đang nói một luồng âm thanh cụ thể (tôi đoán một AudioStreamOut trong trường hợp này) rằng nó sẽ định tuyến đến "hư không". Cách xử lý âm thanh HAL thực hiện cụ thể - do đó, có thể ví dụ: để định tuyến cho luồng đó không thay đổi. – Michael

Trả lời

1

Một công việc xung quanh là tạo ra âm thanh trong thứ gì đó như Audacity và phát âm thanh đó qua SoundPool hoặc api do bạn chọn.

Theo các tài liệu Android ToneGenerator.TONE_PROP_ACK là:

1200Hz, 100ms ON, 100ms OFF 2 vụ nổ

Nếu bạn chọn Soundpool, tôi khuyên bạn nên tiết kiệm trong định dạng file ogg và vòng lặp các giai điệu cho đến khi hoàn tất. Điều này trong khi cung cấp âm thanh liền mạch với một clip rất nhỏ và không sử dụng nhiều tài nguyên.

1

Việc phân tích cú pháp/giải mã được xử lý bởi Stage fright, được sử dụng bởi dịch vụ trình phát phương tiện . Dữ liệu được giải mã được ghi vào một Bản âm thanh thông qua Audio Sink và các bản nhạc sau đó được trộn lẫn với các luồng máy trộn của Máy rung âm thanh và được ghi vào luồng đầu ra (Phần cứng âm thanh). Đối tượng dòng đầu ra sẽ điền vào (các) bộ đệm của riêng nó và sau đó ghi dữ liệu vào tệp thiết bị đầu ra PCM (có thể hoặc có thể không phải là trình điều khiển ALSA).

Các vấn đề liên quan