【发布时间】:2021-12-14 06:46:08
【问题描述】:
我已经可以使用 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 List<AudioModel> getAllAudioFromDevice(final Context context) {
final List<AudioModel> tempAudioList = new ArrayList<>();
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;
}
如何在我的应用程序中获取剪切的文件音乐???
【问题讨论】:
-
这是您想要发布用于生产的应用程序,还是仅在一台设备上使用它?
-
我要发布生产版
-
我检查了我的手机仍然有剪切的音乐文件。但是,当我通过上面的 java 代码获取外部存储中的所有文件 mp3 时,无法获取剪切的音乐文件
-
说实话,你的逻辑有很多问题,我什至不知道从哪里开始。
标签: ffmpeg