如何比較2個mp3文件的內容?如果我有兩個mp3文件,我只知道它們的大小和長度,沒有其他信息[標題,藝術家...],如何將它們的內容與Java進行比較?現在我只能看它們的大小和長度(播放時間)來估計它們是否相似,並且必須聽取它們以確定它們是否具有相同的聲音,如果只有其中一些可以聽對他們來說,但是如果他們有成千上萬的人,這是不切實際的。有沒有辦法使用Java來比較mp3文件?
我不知道是否有一種方法可以使用java讀取數據,並比較聲音數據[音高和音量...]以查找它們的相似程度,如果它們98%相似,則可以聽取他們的意見,以確定他們是否實際上是相同的聲音,有沒有辦法做到這一點?此外,即使2個mp3文件包含相同的聲音,它們可能會關閉幾秒鐘,但其餘內容相同,因此在比較其數據時,算法需要左移或右移以匹配數據叮咬。
在Java中必須有一些現有的方法來做到這一點,如果有人能夠向我展示一些示例代碼或指向正確的方向,我將不勝感激。
經過一番研究,我發現這篇文章:Comparing two different audio files doesn't work
我想通了,這裏是我的答案[何必把它抱?!我無法回答自己的問題,現在我必須在這裏做! ]
import com.musicg.fingerprint.*;
import com.musicg.wave.*;
import it.sauronsoftware.jave.*;
...
public class Compare_Files
{
...
String Dir_Data="C:/Dir_Data/",Result_Similarity,
MP3_File_1=Dir_Data+"Song_1.mp3",MP3_File_2=Dir_Data+"Song_2.mp3",MP3_File_3=Dir_Data+"Song_3.mp3",
WAV_File_1=Dir_Data+"Song_1.wav",WAV_File_2=Dir_Data+"Song_2.wav",WAV_File_3=Dir_Data+"Song_3.wav";
public Compare_Files()
{
Convert_MP3_To_Wav(MP3_File_1,WAV_File_1);
Convert_MP3_To_Wav(MP3_File_2,WAV_File_2);
// Convert_MP3_To_Wav(MP3_File_3,WAV_File_3);
Compare_Wav_Files(WAV_File_1,WAV_File_2);
}
void Compare_Wav_Files(String Wav_File_1,String Wav_File_2)
{
Wave record1=new Wave(Wav_File_1);
Wave record2=new Wave(Wav_File_2);
FingerprintSimilarity Similarity=record1.getFingerprintSimilarity(record2);
Result_Similarity=" Similarity = "+(100*Similarity.getSimilarity())+" %";
Out(Result_Similarity);
}
void Convert_MP3_To_Wav(String Input_MP3_File,String Output_Wav_File)
{
File MP3_File=new File(Input_MP3_File),Wav_File=new File(Output_Wav_File);
try
{
AudioAttributes audio=new AudioAttributes();
audio.setCodec("pcm_s16le");
audio.setBitRate(128000);
audio.setChannels(2);
audio.setSamplingRate(44100);
EncodingAttributes attrs=new EncodingAttributes();
attrs.setFormat("wav");
attrs.setAudioAttributes(audio);
Encoder encoder=new Encoder();
encoder.encode(MP3_File,Wav_File,attrs);
}
catch (Exception e) { e.printStackTrace(); }
}
定義「比較他們的內容」。你的意思是絕對平等嗎?還是你真的想把同一首歌曲的同一首歌曲的不同錄音匹配到同一個? – Turing85
好的問題是,潛在的Java程序的目的是幫助我減少消除重複聲音的時間和精力,因此,無論您提出哪種方式都會有所幫助,只需要提供類似的指示符:EQUAL或SIMILAR。 – Frank
你可以隨時打開這些文件,把它看作是一個'byte []'外觀,它們是否相同。這絕對是相似的。要檢查第二種類型的相似性...這是一個不同的故事。 – Turing85