#ffmpeg
Вопрос:
Я уже могу вырезать музыкальный файл с помощью FFmpeg и сохранить его во внешнем хранилище. Но я не могу вырезать музыкальный файл, который в моем приложении для воспроизведения музыкального файла.
Я использовал этот код для вырезания музыкального файла
private void trimMusic(long position_start, long position_end, String SONG_NAME) { File folder = new File(Environment.getExternalStorageDirectory() "/MusicEditor/"); folder.setReadable(true); if (!folder.exists()) { folder.mkdir(); } String filePrefix = SONG_NAME; String fileExt = ".mp3"; System.out.println("audio" fileExt); dest = new File(folder, filePrefix fileExt); original_path = path; duration = (endMs - startMs) / 1000; filePath = dest.getAbsolutePath(); Log.d("chandoixuanduc",filePath); command = new String[]{"-ss", "" startMs / 1000, "-y", "-i", original_path, "-t", "" (endMs - startMs) / 1000, "-vcodec", "mpeg4", "-b:v", "2097152", "-b:a", "48000", "-ac", "2", "-ar", "22050", filePath}; execffmpegBinary(command); } private void execffmpegBinary(final String[] command) { Config.enableLogCallback(new LogCallback() { @Override public void apply(LogMessage message) { Log.e(Config.TAG, message.getText()); } }); Config.enableLogCallback(new LogCallback() { @Override public void apply(LogMessage message) { Log.e(Config.TAG, message.getText()); } }); Config.enableStatisticsCallback(new StatisticsCallback() { @Override public void apply(Statistics newStatistics) { } }); Log.d(TAG, "Started command : ffmpeg " Arrays.toString(command)); long executionId = FFmpeg.executeAsync(command, new ExecuteCallback() { @Override public void apply(long executionId, int returnCode) { if (returnCode == RETURN_CODE_SUCCESS) { // progressDialog.dismiss(); dialog.dismiss(); Toast.makeText(getActivity(), R.string.status_cut_music_sus, Toast.LENGTH_LONG).show(); Log.d("chandoixuanduc","RETURN_CODE_SUCCESS"); } else if (returnCode == RETURN_CODE_CANCEL) { Log.d("chandoixuanduc","RETURN_CODE_CANCEL"); } else { Toast.makeText(getActivity(), R.string.status_cut_music_failed, Toast.LENGTH_LONG).show(); Log.d("chandoixuanduc","RETURN_CODE_FAILED"); } } }); }
И хотя я проверил это, в моем телефоне есть вырезанный музыкальный файл, но когда я проверяю весь файл mp3, я не могу получить вырезанный музыкальный файл в своем приложении.
public Listlt;AudioModelgt; getAllAudioFromDevice(final Context context) { final Listlt;AudioModelgt; tempAudioList = new ArrayListlt;gt;(); try { Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String[] projection = {MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.ALBUM, MediaStore.Audio.ArtistColumns.ARTIST,}; cursor = context.getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { AudioModel audioModel = new AudioModel(); String path = cursor.getString(0); String album = cursor.getString(1); String artist = cursor.getString(2); String name = path.substring(path.lastIndexOf("/") 1); Uri urisong=Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA))); MediaPlayer mp = MediaPlayer.create(getActivity(), urisong); long duration=mp.getDuration(); audioModel.setaName(name); audioModel.setaAlbum(album); audioModel.setaArtist(artist); audioModel.setaPath(path); audioModel.setDuration(duration); audioModel.setUri(urisong); Log.d("kskskskkd",audioModel.duration " " audioModel.uri); tempAudioList.add(audioModel); cursor.moveToNext(); } cursor.close(); } }catch (Exception e){ } return tempAudioList; }
Как я могу получить вырезанную музыку из файла в своем приложении ???
Комментарии:
1. Это приложение, которое вы хотите выпустить для производства, или вы будете использовать его только на одном устройстве?
2. Я хочу выпустить релиз для производства
3. Я проверяю, что в моем телефоне все еще есть вырезанный музыкальный файл. Но когда я получаю весь файл mp3 во внешнем хранилище с помощью вышеуказанного кода java, я не могу получить этот вырезанный музыкальный файл
4. Честно говоря, в твоей логике так много ошибок, что я даже не знаю, с чего начать.
Ответ №1:
Проверьте, сохранен ли он в пути к изолированной среде, поскольку запрос проблемы с разрешениями не может получить файлы в пути к изолированной среде, вы можете самостоятельно просмотреть каталог изолированной среды программного обеспечения