Khắc phục sự cố
Gọi start() mà không có gì xảy ra
- Kiểm tra
onPermissionDeniedvàonError. Bị từ chối quyền thìonPermissionDeniedđược gọi, bộ ghi lỗi thìonErrorđược gọi với code'start'hoặc'session'. - Trên iOS, nếu người dùng đã từ chối micro một lần, hộp thoại sẽ không bao giờ hiện lại. Hãy đưa họ sang Cài đặt bằng
Linking.openSettings(). - Đảm bảo
NSMicrophoneUsageDescriptioncó trongInfo.plist. Nếu thiếu, iOS sẽ đóng app khi bắt đầu ghi. - Đảm bảo ref đã được gán. Trên iOS, view ghi âm nằm trong view cha có
display: 'none'sẽ bị unmount và ref lànull. - Kiểm tra xem bạn có đặt prop
statekhông. Prop này chuyển view sang chế độ controlled đang thử nghiệm, khi đó các phương thức của ref không ghi âm, xem Trạng thái có kiểm soát.
View trống hoặc không có chiều cao
View không có kích thước tự nhiên. Hãy đặt chiều cao trong style, ví dụ height: 56.
Tệp từ onComplete biến mất
cancel() (kể cả sau stop()) và việc unmount view sẽ xóa các tệp đoạn ghi của phiên, và với bản ghi không qua bước nghe lại rồi ghi tiếp thì đó chính là tệp được trả về. Hãy sao chép hoặc di chuyển tệp trong onComplete, xem Giữ lại tệp. Ngoài ra, hệ thống có thể dọn thư mục cache bất cứ lúc nào.
stop() bỏ mất bản ghi
Bạn đã đặt minDurationMs và bản ghi ngắn hơn mức đó. Trạng thái về idle và onError được gọi với code 'min-duration'. Hãy giảm hoặc bỏ minDurationMs, hoặc hiện gợi ý cho người dùng khi nhận code này.
output.uri bị bỏ qua
- Trên iOS, hãy truyền URI
file://, không phải đường dẫn thường. - Sau khi nghe lại rồi ghi tiếp, kết quả là một tệp nối mới trong thư mục cache, không phải
output.uri. Hãy dùngonComplete.uri.
Cột gần như không nhúc nhích, hoặc nhảy quá nhiều
Các cột đi theo mức âm của từng nền tảng: công suất trung bình trên iOS, giá trị đỉnh trên Android. Giọng nói nhỏ trên iOS có thể nằm sát đáy, vì mọi giá trị từ -60 dB trở xuống được vẽ là 0. Đổi mật độ hiển thị bằng samplesPerSecond, barWidth và barGap. Hiện tại recordingMode và newSampleEntry không có tác dụng gì về mặt hiển thị.
Cử chỉ trượt không chạy
- Bật
enableSlideToCancelvà/hoặcenableSlideToLock. Mặc định cả hai đều làfalse. - Thao tác kéo phải bắt đầu trên view ghi âm khi trạng thái là
recording. Ngón tay đã đặt sẵn từ trước khi bắt đầu ghi, ví dụ trên nút nhấn giữ, sẽ không được theo dõi. Xem Nhấn giữ để ghi. onSlideCancelkhông tự hủy. Hãy gọiref.current?.cancel()trong handler.
Không bao giờ phát hiện được khoảng lặng
Đặt cả silenceThresholdDb lẫn silenceTimeoutMs. Giá trị mặc định (-160 và 0) không bao giờ kích hoạt. Nếu vẫn không chạy, căn phòng ồn hơn ngưỡng của bạn; hãy log onMeter rồi nâng ngưỡng lên, xem Chọn ngưỡng.
Không nhận được chunk PCM
enablePcmStream chỉ hoạt động khi output.format là 'wav', và phải bật trước khi start().
Ghi âm dừng khi app chạy nền
Bật backgroundRecording và làm phần thiết lập native ở Cài đặt. Trên iOS, để ý onError với code 'background-capability'. Trên Android, tìm cảnh báo startForegroundService failed trong logcat, nghĩa là service chưa được khai báo.
Tệp opus không phát được
iOS ghi Opus trong container .caf, nhiều trình phát ngoài hệ sinh thái Apple không mở được. Trên Android dưới API 29, tệp là AAC dù mang tên .ogg. Hãy dùng m4a nếu tệp được chia sẻ giữa các nền tảng.
Expo: không tìm thấy module
Thư viện không chạy trong Expo Go. Hãy build development client sau khi thêm config plugin và chạy npx expo prebuild --clean. Xem Expo.
Render trên web bị lỗi
View này chỉ dành cho native. Hãy render nội dung thay thế trên web, xem Lưu ý theo nền tảng.