Tôi có phương pháp cố gắng tạo một AudioRecord
. Các điện thoại khác nhau hỗ trợ các mức giá mẫu khác nhau, cấu hình kênh và định dạng âm thanh. Vì vậy, phương pháp cố gắng tạo ra một AudioRecord
cho mỗi người trong số họ và trả lại cái đầu tiên hoạt động.Câu lệnh "return" của tôi không hoạt động ngay cả khi không có các chi nhánh mã khác
private AudioRecord getAudioRecord() {
for (int rate: sampleRates) {
for (int audioFormat: audioFormats) {
for (int channelConfig: channelConfigs) {
String description = rate + "Hz, bits: " + audioFormat
+ ", channel: " + channelConfig;
Log.d(TAG, "Trying: " + description);
int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
if (bufferSize == AudioRecord.ERROR
|| bufferSize == AudioRecord.ERROR_BAD_VALUE) {
Log.d(TAG, "Failed: This rate/channel config/format is not supported");
continue;
}
AudioRecord recorder = new AudioRecord(AudioSource.MIC, rate, channelConfig, audioFormat, bufferSize);
if (recorder.getState() == AudioRecord.STATE_UNINITIALIZED) {
Log.d(TAG, "Failed: Recorder is uninitialized");
continue;
}
Log.d(TAG, "Success: " + description);
return recorder;
}
}
}
Log.e(TAG, "Failed all rates. Does the device have a microphone?");
return null;
}
Vấn đề là return recorder
không bao giờ xảy ra!
Dưới đây là đầu ra của tôi logcat:
Trên dòng tô đậm (8000/3/12) không có lỗi, nhưng cũng không thành công.
Nếu tôi sử dụng số continue
như đã nêu trong các nhận xét bên dưới, nó vẫn không trả lại!
private AudioRecord getAudioRecord() {
for (int rate: sampleRates) {
for (int audioFormat: audioFormats) {
for (int channelConfig: channelConfigs) {
String description = rate + "Hz, bits: " + audioFormat
+ ", channel: " + channelConfig;
Log.d(TAG, "Trying (2): " + description);
int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
if (bufferSize != AudioRecord.ERROR && bufferSize != AudioRecord.ERROR_BAD_VALUE) {
AudioRecord recorder = new AudioRecord(AudioSource.MIC, rate, channelConfig, audioFormat, bufferSize);
if (recorder.getState() == AudioRecord.STATE_INITIALIZED) {
Log.d(TAG, "Success: " + description);
return recorder;
} else {
Log.d(TAG, "Failed: Recorder is uninitialized");
}
} else {
Log.d(TAG, "Failed: This rate/channel config/format is not supported");
}
}
}
}
Log.e(TAG, "Failed all rates. Does the device have a microphone?");
return null;
}
Mẫu tương tự (nỗ lực đăng nhập không có thành công hoặc thất bại sau) cũng xảy ra 3 lần khác trong nhật ký. Nó gần như cảm thấy như một khối try/catch đang ăn một ngoại lệ (hoặc phát hành một tuyên bố tiếp tục im lặng). Mẫu mã bạn đã cung cấp * chính xác * những gì tạo nhật ký? –
Điều này thực sự là lạ. Bạn đã thử nghiệm cho các điều kiện nghịch đảo và làm tổ của bạn nếu khối, và do đó không sử dụng 'tiếp tục'? –
Giống như đề cập @SeanReilly, nó thực sự có vẻ như đây không phải là mã tạo ra đầu ra nhật ký. Hai thông báo 'Trying' trong một hàng hiện có vẻ như có thể trừ khi có một' break; 'hoặc' continue; 'bị thiếu trong danh sách mã của bạn. Bạn đã thử làm sạch và xây dựng lại ứng dụng của bạn để đảm bảo các lớp học được cập nhật? Habe bạn đã thử sử dụng trình gỡ rối và bước qua mã? – Gray