2013-04-10 4 views
2

mp3 파일에서 모든 id3 태그를 삭제해야합니다. 나는 이것을 시도했다 :id3 태그 삭제

byte[] a = System.IO.File.ReadAllBytes("X.mp3"); 
int x = 0; 
int b=3; 
for (int i = 6; i <= 9; i++) 
{ 
    x += (a[i] << (b * 7)); 
    b--; 
} 
byte[] r = new byte[a.Length-x]; 
for (int i = x; i < a.Length; i++) 
{ 
    r[i-x] = a[i]; 
} 
System.IO.File.WriteAllBytes("X.mp3", r); 

그러나 모든 id3 태그를 삭제하지는 않는다. 태그의 크기를 계산하는 데 문제가 있다고 생각하지만 잘못되었습니다.

답변

0

코드는 파일의 시작 부분에서 ID3v2 태그 만 처리합니다. MP3 파일에 ID3-ID3v1과 ID3v2의 두 가지 유형이 모두있는 경우 두 가지를 모두 제거해야합니다.

ID3v1 태그는 파일의 끝에 배치되며 고정 길이입니다. 그들은 실제로 스트립하기가 더 쉽습니다. 항상 파일의 마지막 128 바이트이며 텍스트 "TAG"로 시작합니다.

기존 라이브러리를 사용하여 MP3 파일을 작업하는 것이 더 효과적 일 수 있습니다. 하나는 오픈 소스 라이브러리, taglib-sharp입니다. 두 가지 유형의 ID3 태그를 조작 할 수있을뿐 아니라 다양한 다른 작업을 수행 할 수 있습니다.

+0

[0] 파일의 끝이나 파일의 끝은 무엇입니까? – Sina

+0

@Sina 방금 답변을 수정 했으므로 마지막에 ID3v1 태그도 제거해야합니다. 코드를 제거하고 처음에는 ID3v1 태그를 올바르게 제거했지만 ID3v1 태그는 끝까지 제거하지 않았습니다. 많은 MP3 파일에는 둘 다 있습니다. –

0

나는 이것을 최근에해야했고 라이브러리를 사용하고 싶지 않았습니다. 스 니펫은 다음과 같습니다.

var mp3 = File.ReadAllBytes("x.mp3"); 

int skip = 0; 
if (Encoding.ASCII.GetString(mp3, 0, 3) == "ID3") 
    skip = 7 + BitConverter.ToInt32(mp3.Skip(6).Take(4).Reverse().ToArray(), 0); 

int take = mp3.Length - skip; 
if (Encoding.ASCII.GetString(mp3, mp3.Length - 128, 3) == "TAG") 
    take -= 128; 

File.WriteAllBytes("stripped.mp3", mp3.Skip(skip).Take(take).ToArray());