2010-10-20 18 views
5

Có ai biết cách sử dụng tính năng hủy bỏ âm thanh tích hợp sẵn của thiết bị Android không? Nó nằm ở đâu đó trong silicon và được sử dụng cho các cuộc gọi loa GSM/CDMA. Chúng tôi thực sự muốn nhấn vào nó cho một ứng dụng VoIP thay vì lăn của riêng của chúng tôi.Sử dụng tính năng hủy bỏ âm thanh tích hợp sẵn của Android

Ben

+0

Có may mắn không? Tôi đang nhìn vào cùng một điều ... –

Trả lời

0

Tôi đã ở cùng một nơi, đã chuyển thành công Speex AEC cho Android và sử dụng nó trong 2 ứng dụng VoIP Android khác nhau. Hầu hết tiếng vang bị hủy khi trên loa ngoài với âm lượng lớn - được thử nghiệm trên nhiều thiết bị khác nhau. Tài liệu và googling chính thức của Speex là đủ để làm cho nó hoạt động.

+0

hi u có thể hướng dẫn tôi làm thế nào để làm cho nó hoạt động. Tôi đang đấu tranh để hủy bỏ tiếng vọng khi cả hai thiết bị đang ở chế độ loa. –

+0

Xin chào, bạn đã sử dụng bộ đệm jitter trong mã gốc của mình –

4

Cuối cùng tôi đã có thể hủy bỏ tiếng vang để hoạt động trên bộ xử lý Arm5 (WM8650) của mình (Android 2.2). Dưới đây là các bước tôi đã thực hiện.

  1. Tôi đã ghép Speex với JNI và gọi là quy trình xử lý tiếng vọng trước khi gửi khung PCM tới bộ mã hóa. Không có tiếng vọng nào bị hủy bỏ bất kể cài đặt Speex tôi đã thử.

  2. Vì Speex rất nhạy cảm với độ trễ giữa các khung phát lại và tiếng vọng, tôi đã triển khai hàng đợi và xếp hàng đợi tất cả các gói được gửi tới AudioTrack. Kích thước của hàng đợi phải xấp xỉ bằng kích thước của bộ đệm AudioTrack bên trong. Theo cách này, gói tin được gửi tới echo_playback vào khoảng thời gian khi AudioTrack gửi các gói tin đến card âm thanh từ bộ đệm trong của nó. Sự chậm trễ đã được gỡ bỏ với cách tiếp cận này nhưng echo vẫn không bị hủy

  3. Tôi đã bọc phần hủy bỏ WebRtc bằng JNI và gọi phương thức của nó trước khi gửi gói tới bộ mã hóa. Tiếng vang vẫn còn hiện diện nhưng rõ ràng là thư viện đang cố gắng hủy bỏ nó.

  4. Tôi áp dụng kỹ thuật đệm được mô tả trong P2 và cuối cùng nó bắt đầu hoạt động. Sự chậm trễ cần phải được điều chỉnh cho mỗi thiết bị mặc dù. Cũng lưu ý rằng WebRtc có phiên bản hủy bỏ tiếng vang và di động đầy đủ. Phiên bản đầy đủ làm chậm bộ vi xử lý và có lẽ chỉ nên chạy trên ARM7. Phiên bản di động hoạt động nhưng với chất lượng thấp hơn

Tôi hy vọng điều này sẽ giúp ai đó.

+0

Speex đã bị thay thế bởi Opus http://opus-codec.org/. –

+0

Hàng đợi có cần phải có cùng kích thước với bộ đệm trong của AudioTrack PLUS với kích thước bộ đệm trong của AudioRecord không? –

0

Vì API cấp 11, có một giá trị mới cho MediaRecorder.AudioSource, đó là VOICE_COMMUNICATION. Tài liệu Android say: "Nguồn âm thanh micrô được điều chỉnh cho các liên lạc bằng giọng nói như VoIP. Ví dụ, nó sẽ tận dụng lợi thế của việc hủy bỏ tiếng vọng hoặc điều khiển tự động nếu có. Nó hoạt động như DEFAULT nếu không có xử lý bằng giọng nói." Tôi đã thử điều này, nhưng không thể làm cho nó hoạt động được. Vấn đề có thể là thiết bị tôi đã sử dụng, đó là Sony Tablet S. Worth đang cố gắng.

+0

Điều này thực sự đúng, nhưng kể từ khi cấp API 11, điều này không thực sự làm việc trên hầu hết các thiết bị tôi đã sử dụng cho đến nay. Nó chỉ làm, tốt, không có gì .... – PKlumpp

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