9

Tôi sử dụng lớp AudioRecord để ghi âm giọng nói trong khi gọi.Android AudioRecord cài đặt nào để ghi âm cuộc gọi

Tôi chỉ được ghi âm giọng nói của người sở hữu điện thoại (từ micrô). Trong quá trình ghi âm, tôi muốn thực hiện một số xử lý âm thanh nhưng hiện tại điều này là không quan trọng.

Android có AudioSources tùy chọn sau:

  • MediaRecorder.AudioSource.VOICE_CALL
  • MediaRecorder.AudioSource.MIC
  • MediaRecorder.AudioSource.VOICE_UPLINK
  • MediaRecorder.AudioSource.VOICE_DOWNLINK

Bạn có thể giải thích sự khác biệt giữa chúng hay không. Ok MIC là hiển nhiên nhưng VOICE_CALL vs VOICE_UPLINK với VOICE_DOWNLINK?

Ngoài ra tôi nên chọn tốc độ lấy mẫu (8000Hz, 16000Hz, 2250Hz, 44100Hz). Bạn có thể cho tôi biết tỷ lệ mẫu để chọn và tại sao không?

Đối với định dạng âm thanh tôi đã chọn AudioFormat.ENCODING_PCM_16BIT nhưng nó cũng có: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT

Cuối cùng là có bao nhiêu kênh tôi nên sử dụng và tại sao? (AudioFormat.CHANNEL_IN_STEREO hoặc AudioFormat.CHANNEL_IN_MONO)

+1

cuộc gọi ghi âm là rất khó khăn trong android.In lời tốt hơn (kinh nghiệm cá nhân của tôi) của nó không possible..just google.u có thể thấy rằng nhiều tài liệu nói rằng nó không possible.because ghi âm cuộc gọi đang ở trong lớp cơ sở của os.so android chúng tôi không thể chỉnh sửa part.its đó trong nhị phân –

+0

Trong phiên bản Android nào bạn đã thử? Tôi nghĩ rằng Api nói rằng nó hỗ trợ nó (chính thức) vì vậy tôi sẽ cung cấp cho một thử. – gosom

+1

khi tôi đã thử sau đó nó sẽ ghi lại chỉ trong vài giây ... ghi âm hỗ trợ chỉ cho một số điện thoại di động .. kiểm tra các liên kết này là hữu ích cho u..http: //stackoverflow.com/questions/3929984/recording-call-help -needed http://stackoverflow.com/questions/8632247/android-call-recording –

Trả lời

10

Bạn nên luôn sử dụng tỷ lệ mẫu là 44100 vì đây là tỷ lệ mẫu duy nhất được đảm bảo hoạt động theo google.

"tỷ lệ mẫu thể hiện trong Hertz. 44100Hz hiện là tỷ lệ duy nhất là bảo đảm để làm việc trên tất cả các thiết bị, nhưng tỷ lệ khác như như 22050, 16000, 11025 và có thể làm việc trên một số thiết bị". Dev site

Đối với âm thanh nổi so với mono, hãy sử dụng đơn âm.

"mô tả cấu hình của kênh âm thanh. Xem CHANNEL_IN_MONO và CHANNEL_IN_STEREO. CHANNEL_IN_MONO được đảm bảo để làm việc trên tất cả các thiết bị." Dev site

Cuối cùng: 8bit pcm vs 16bit pcm: Sử dụng 16bit pcm,

"định dạng dữ liệu âm thanh:. PCM 16 bit cho mỗi mẫu được đảm bảo để được hỗ trợ bởi các thiết bị ." Dev site

Chỉ cần nhớ sử dụng bộ đệm ngắn [] thay vì bộ đệm byte khi sử dụng 16bit.Vì 16bit là 2 byte, bạn sẽ phải kết hợp hai mục nhập trong bộ đệm tại một thời điểm:

byte] [] {sample_1_upper, mẫu_1_lower, sample_2_upper, sample_2_lower, ..., sample_n_lower} Tuy nhiên, nếu bạn sử dụng bộ đệm ngắn []:
ngắn [] {sample1, mẫu2, ..., mẫu3}

Tôi chưa bao giờ cố gắng ghi lại cuộc gọi nhưng nếu hệ điều hành không ràng buộc nguồn MIC bạn có thể ghi từ nó. Vì bạn đang ghi âm từ micrô, bạn chỉ nên nhận giọng nói của người dùng.

+0

44100 không đảm bảo hoạt động) –

+0

Bạn nên thông báo cho tài liệu Android sau đó vẫn nêu rõ rằng: "44100Hz hiện tại tỷ lệ duy nhất được đảm bảo hoạt động trên tất cả các thiết bị, nhưng các mức giá khác như 22050, 16000 và 11025 có thể hoạt động trên một số thiết bị. " – Risch

+0

Tài liệu là không đúng, một số thiết bị không hỗ trợ 44100 –

10

Bạn có thể giải thích sự khác biệt giữa chúng hay không. Ok MIC là hiển nhiên nhưng VOICE_CALL vs VOICE_UPLINK với VOICE_DOWNLINK?

VOICE_UPLINK: Âm thanh được truyền từ đầu đến bên kia. IOW, những gì bạn nói vào micro (cộng với tiếng ồn xung quanh tùy thuộc vào việc loại bỏ tiếng ồn được sử dụng và nó hoạt động tốt như thế nào).

VOICE_DOWNLINK: Âm thanh được truyền từ bên kia đến cuối của bạn.

VOICE_CALL: VOICE_UPLINK + VOICE_DOWNLINK.

+0

Xin chào trong trường hợp của tôi tôi muốn cả hai bên ghi âm nhưng trong một số điện thoại di động như Samsung S8plusEdhe, S7edge không làm việc họ chỉ ghi lại giọng nói của tôi không phải là giọng nói khác mà tôi nói chuyện trên điện thoại. –

1

Một chút trễ nhưng bạn có thể truy vấn thiết bị âm thanh để tìm hiểu xem nó có thể làm gì;

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
String sampleRate = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); 
String sampleBufferSize = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); 
int bufferSize = AudioRecord.getMinBufferSize(Integer.parseInt(sampleRate), AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); 
+0

Xin chào trong trường hợp của tôi tôi muốn cả hai bên ghi âm nhưng trong một số điện thoại di động như Samsung S8plusEdhe, S7edge không làm việc họ chỉ ghi lại giọng nói của tôi không giọng nói khác mà tôi nói chuyện trên điện thoại. –

+0

Trong phiên bản Android cuối cùng, các nhà sản xuất đã được khuyến khích xây dựng điện thoại của họ với Voice.Call ghi âm cả hai bên của cuộc gọi (một số sai lầm nó lên và sử dụng Voice.Comm). Tại một thời điểm gần như mọi điện thoại đều hỗ trợ nó và một số lượng lớn các bên thứ ba đã đưa ra các hệ thống ghi âm cuộc gọi (với chi phí và thời gian tuyệt vời) và đăng ký nhiều người dùng THEN Android vừa tắt nó ..... Hoàn toàn không liên quan nhưng đồng thời Samsung (nhà sản xuất thiết bị Android lớn nhất) đã đưa ra giải pháp ghi âm cuộc gọi của riêng họ (có thể bỏ qua việc vô hiệu hóa khi họ tạo ra điện thoại). –

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