Може ли някой да сподели с мен НАДЕЖДЕН начин за запис на аудио на всички устройства с помощта на MediaRecorder? Просто се опитвам да запиша аудиофайл във формат AMR с нисък битрейт, който според google е стандартен за всички устройства. Това е един куп глупости.
Според моя опит има много устройства, таблети и т.н. на други марки, които ще се провалят ужасно, когато използвате AudioEncoder.AMR_NB по подразбиране. Моето заобиколно решение в момента е да използвам отражение, за да проучвам кои енкодери са в суперкласа, след което да преглеждам всеки от тях с слушател на грешки, за да видя кой от тях не се проваля. Това не само не е изящно, но и не улавя всички устройства. Опитах също да настроя по подразбиране опциите AudioEncoder и OutputFormat (константа 0) и това също се проваля ужасно на някои устройства.
Ето какво използвам, ако AMR енкодерът по подразбиране не работи:
Class encoderClass = MediaRecorder.AudioEncoder.class;
Field[] encoders = encoderClass.getFields();
След това преминавам през всеки енкодер, като задавам слушател на грешки. Ако завърши успешно, го задавам като енкодер по подразбиране като настройка.
for (int i = j; i < encoders.length; i++) {
try {
int enc = encoders[i].getInt(null);
recorder.reset();
recorder.setAudioSource(AudioSource.MIC);
recorder.setOutputFormat(OutputFormat.THREE_GPP);
recorder.setAudioEncoder(enc); //testing the encoder const here
recorder.setOutputFile(amrPath);
recorder.setMaxDuration(3000);
recorder.setOnInfoListener(new OnInfoListener() {
Продължавам цикъла, ако слушателят открие грешка:
if (arg1 == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
Тази техника работи за повечето устройства. Какво ще кажете за останалите? Все още имам устройства, които падат през пукнатините и честно казано бих искал нещо НАДЕЖДНО за почти всички устройства????