そこで、Java で .mp3 ファイルを分割するプログラムを作成しました。基本的に、一部のファイルでは正常に動作しますが、一部のパートを再生した後に最初の分割ファイルでエラーが発生する場合があります。ただし、他のファイルは完全に正常に機能します。
ファイルを配列のサイズの倍数にすることができず、いくつかの mod 値が残っている必要があることに関係していると思います。誰でもこのコードのエラーを特定して修正できますか?
(ここで、splitval = 作成する分割の数、filename1 = 選択したファイル)
int splitsize=filesize/splitval;
String filecalled;
try
{
byte []b=new byte[splitsize];
FileInputStream fis = new FileInputStream(filename1);
name1=filename2.replaceAll(".mp3", "");
for(int j=1;j<=splitval;j++)
{
filecalled=name1+"_split_"+j+".mp3";
FileOutputStream fos = new FileOutputStream(filecalled);
int i=fis.read(b);
fos.write(b, 0, i);
//System.out.println("no catch");
}
JOptionPane.showMessageDialog(this, "split process successful");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
前もって感謝します!
編集: 提案どおりにコードを編集し、実行しました。ここ:
C:\Users\dell5050\Desktop\Julien.mp3 5383930 bytes
C:\Users\dell5050\Desktop\ Julien_split_1.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_2.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_3.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_4.mp3 1345978 bytes
最後の数バイトに変更があります。これは、filesize%splitval が解決されたことを意味します..しかし、'_split_1' を含むこの..の最初のファイルは、最後の部分の一部を再生中にエラーが発生しました。
'_split_2' を含む 2 番目のファイルは、最初のファイルが終了したところから始まります。したがって、分割プロセスは正しいです。では、最初のファイルの最後にある余分な空は正確には何ですか?
また、元のファイルのアートワークと情報が最初のファイルにのみ引き継がれることに気付きました。他のファイルはありません。それと何か関係がありますか?他のいくつかの mp3 ファイルでは同じことが起こりません。
コード:
FileInputStream fis;
FileOutputStream fos;
int splitsize = (int)(filesize / splitval) + (int)(filesize % splitval);
byte[] b = new byte[splitsize];
System.out.println(filename1 + " " + filesize + " bytes");
try
{
fis = new FileInputStream(file);
name1 = filename2.replaceAll(".mp3", "");
for (int j = 1; j <= splitval; j++)
{
String filecalled = name1 + "_split_" + j + ".mp3";
fos = new FileOutputStream(filecalled);
int i = fis.read(b);
fos.write(b, 0, i);
fos.close();
System.out.println(filecalled + " " + i + " bytes");
}
}
catch(IOException ie)
{
System.out.println(ie.getMessage());
}