.mp3 ファイルを必要な秒数 (1 秒または 2 秒だけ違います) にカットできます。しかし、カット後にこのファイルを再生すると、「mediaplayer.getduration();」によって古い期間が取得されます
例えば。私の曲の長さは4分6秒で、0秒から1分に短縮されます。次に、これを再生すると、mediaplayer.getduration() によって 4 分 6 秒の時間が取得され、58 秒または 59 秒または 1 分で曲の再生が停止し、アーティスト名「マドンナ」を設定するように他の詳細も設定していますが、「わからない"。
ですから、カット時に正しい時間を設定し、他の詳細も設定する方法を教えてください。
これは私のコードです:
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
String str = "xyz3.mp3";
File f = new File(path, str); // new file
File file = new File("/sdcard/media/audio/music/mysong.mp3") //i am cutting this song
CheapSoundFile csf = CheapSoundFile.create(file.getAbsolutePath(), listener );
int mSampleRate = csf.getSampleRate();
int mSamplesPerFrame = csf.getSamplesPerFrame();
int duration = (int)(seekBar.getSelectedMaxValue() - seekBar.getSelectedMinValue()+0.5);
int startframe = (int)(1.0 * (double)(seekBar.getSelectedMinValue()/1000) * mSampleRate / mSamplesPerFrame + 0.5);
int endframe = (int)(1.0 * (double)(seekBar.getSelectedMaxValue()/1000) * mSampleRate / mSamplesPerFrame + 0.5);
csf.WriteFile(f, startframe, endframe - startframe);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.SIZE, f.length());
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, duration);
values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, true);
//Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
getContentResolver().insert(uri, values);
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED",Uri.parse("file://" + Environment.getExternalStorageDirectory())));