Я разрабатываю приложение, которое управляет голосовыми заметками WhatsApp. Некоторое время назад WhatsApp начал сохранять голосовые заметки, используя формат файла opus вместо aac, как раньше.
Мое приложение получает URI (через неявное намерение), который указывает на голосовую заметку opus, хранящуюся в папке WhatsApp.
Поскольку аудиофайлы opus невозможно воспроизвести на многих устройствах и во многих приложениях (например, Viber), я хотел бы создать в отдельном файле версию формата m4a opus аудиофайл, который я получил от WhatsApp.
Я пытался сделать следующее: я использовал ContentResolver и openInputStream (), чтобы получить InputStream для содержимого, представленного Uri, которое я получил через неявное намерение. Затем я создал FileOutputStream для файла в папке моего приложения. И я использовал путь, который заканчивается ".m4a" вместо ".opus".
Нравится:
try {
InputStream inputStream = getContentResolver().openInputStream(uriFromExternalIntent);
String OUTPUT_DIRECTORY = Environment.getExternalStorageDirectory() + "/Audios/recordings/";
boolean exists = (new File(OUTPUT_DIRECTORY)).exists();
if (!exists) {
new File(OUTPUT_DIRECTORY).mkdirs();
}
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String strDate = sdf.format(c.getTime());
//Setting the output file complete final path
String OUTPUT_FILE = OUTPUT_DIRECTORY + strDate + ".m4a";
File outputFile = new File(OUTPUT_FILE);
OutputStream out = null;
try {
out = new FileOutputStream(outputFile);
byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
out.write(buf, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Сохраняя файл по пути, который заканчивается на «.m4a» на устройствах с API 24, я могу воспроизводить файл внутри своего приложения и в таких приложениях, как WhatsApp, Viber или Telegram. Но в API 23 один и тот же код выдает ошибки во всех приложениях, кроме WhatsApp.
Напомним, я ищу способ программно получить аудиофайл .m4a из URI, который указывает на аудиофайл .opus.
Есть некоторые приложения, которые могут делать это без какого-либо преобразования, поэтому я думаю, что есть трюк, позволяющий легко сделать это без преобразования. Любой совет?