PDA

View Full Version : Đọc thông tin header từ file MP3 như thế nào?



baokhanhk28
21-11-2006, 09:39 PM
s Bạn cần đọc các thông tin về tên bài hát, nghệ sĩ, và album từ một file MP3.

· Đọc thẻ ID3v2 ở cuối file MP3.

Hầu hết các file MP3 đều lưu trữ thông tin trong thẻ ID3v2 dài 128 byte ở cuối file. Thẻ này bắt đầu với từ TAG và chứa các thông tin về nghệ sĩ, album, và tên bài hát ở dạng ASCII. Bạn có thể chuyển dữ liệu này thành chuỗi bằng đối tượng Encoding do thuộc tính System.Text.Encoding.ASCII trả về.

Lớp MP3TagData dưới đây cung cấp phương thức ReadFromFile để lấy thông tin từ một file MP3 hợp lệ:


Public Class MP3TagData

Private _Artist As String
Private _SongTitle As String
Private _Album As String
Private _Year As String

Public ReadOnly Property Artist() As String
Get
Return _Artist
End Get
End Property
Public ReadOnly Property SongTitle() As String
Get
Return _SongTitle
End Get
End Property
Public ReadOnly Property Album() As String
Get
Return _Album
End Get
End Property

Public ReadOnly Property Year() As String
Get
Return _Year
End Get
End Property

Public Sub ReadFromFile(ByVal filename As String)
' Xóa các giá trị hiện có.
_SongTitle = ""
_Artist = ""
_Album = ""
_Year = ""

Dim fs As New FileStream(filename, FileMode.Open)
' Đọc thẻ MP3.
fs.Seek(0 - 128, SeekOrigin.End)
Dim Tag(2) As Byte
fs.Read(Tag, 0, 3)

' Kiểm tra thẻ có tồn tại hay không.
If System.Text.Encoding.ASCII.GetString(Tag).Trim() = "TAG" Then
_SongTitle = GetTagData(fs, 30)
_Artist = GetTagData(fs, 30)
_Album = GetTagData(fs, 30)
_Year = GetTagData(fs, 4)
End If

fs.Close()
End Sub
Private Function GetTagData(ByVal stream As Stream, _
ByVal length As Integer) As String

' Đọc dữ liệu.
Dim Bytes(length - 1) As Byte
stream.Read(Bytes, 0, length)

Dim TagData As String = _
System.Text.Encoding.ASCII.GetString(Bytes)
' Loại bỏ các ký tự null.
Dim TrimChars() As Char = {Char.Parse(" "), _
Char.Parse(vbNullChar)}
TagData = TagData.Trim(TrimChars)
Return TagData

End Function

End Class
@ Dữ liệu trong thẻ MP3 có bề rộng cố định và được lót bằng các ký tự null. Bạn phải loại các ký tự này khỏi chuỗi. Nếu không, chúng có thể sẽ gây nên rắc rối tùy vào cách sử dụng chuỗi trong ứng dụng.

Đoạn mã dưới đây trình bày cách sử dụng lớp MP3TagData để lấy và hiển thị thông tin về một file MP3:


Dim MP3Tag As New MP3TagData()
MP3Tag.ReadFromFile("C:\mp3\chu_vit_con.mp3")
Console.WriteLine("Album: " & MP3Tag.Album)
Console.WriteLine("Artist: " & MP3Tag.Artist)
Console.WriteLine("Song: " & MP3Tag.SongTitle)
Console.WriteLine("Year: " & MP3Tag.Year)
Trích từ "Các giải pháp lập trình Visual Basic .NET + CD (tập 1)" (http://www.dvpub.com.vn/dv/details.aspx?itemid=244)

instcode
21-11-2006, 11:07 PM
Gì kỳ vậy? Hình như box này có mục đích ban đầu là chơi Managed C++ chứ có phải VB.NET đâu :p... Mà nhìn lại thì thấy toàn C# :D

tesulakata
14-07-2010, 02:03 PM
Ai có thể chuyển dùm nó thành c# ko nhỉ?
Giúp anh em với .......

q1q12
14-07-2010, 06:31 PM
híc . Bạn nào có code C# không cho minh với mình

dangbk
14-07-2010, 08:37 PM
híc . Bạn nào có code C# không cho minh với mình


public class MP3TagData
02.{
03.
04. private string _Artist;
05. private string _SongTitle;
06. private string _Album;
07.
08. private string _Year;
09. public string Artist {
10. get { return _Artist; }
11. }
12. public string SongTitle {
13. get { return _SongTitle; }
14. }
15. public string Album {
16. get { return _Album; }
17. }
18.
19. public string Year {
20. get { return _Year; }
21. }
22.
23. public void ReadFromFile(string filename)
24. {
25. // Xóa các giá trị hiện có.
26. _SongTitle = "";
27. _Artist = "";
28. _Album = "";
29. _Year = "";
30.
31. FileStream fs = new FileStream(filename, FileMode.Open);
32. // Đọc thẻ MP3.
33. fs.Seek(0 - 128, SeekOrigin.End);
34. byte[] Tag = new byte[2];
35. fs.Read(Tag, 0, 3);
36.
37. // Kiểm tra thẻ có tồn tại hay không.
38. if (System.Text.Encoding.ASCII.GetString(Tag).Trim() == "TAG") {
39. _SongTitle = GetTagData(fs, 30);
40. _Artist = GetTagData(fs, 30);
41. _Album = GetTagData(fs, 30);
42. _Year = GetTagData(fs, 4);
43. }
44.
45. fs.Close();
46. }
47.
48. private string GetTagData(Stream stream, int length)
49. {
50. // Đọc dữ liệu.
51. byte[] Bytes = new byte[length - 1];
52. stream.Read(Bytes, 0, length);
53.
54. string TagData = System.Text.Encoding.ASCII.GetString(Bytes);
55. // Loại bỏ các ký tự null.
56. char[] TrimChars = {
57. char.Parse(" "),
58. char.Parse(vbNullChar)
59. };
60. TagData = TagData.Trim(TrimChars);
61. return TagData;
62.
63. }
64.
65.}
Tiếp nè:




1.MP3TagData MP3Tag = new MP3TagData();
2.MP3Tag.ReadFromFile("C:\\mp3\\chu_vit_con.mp3");
3.Console.WriteLine("Album: " + MP3Tag.Album);
4.Console.WriteLine("Artist: " + MP3Tag.Artist);
5.Console.WriteLine("Song: " + MP3Tag.SongTitle);
6.Console.WriteLine("Year: " + MP3Tag.Year);

q1q12
14-07-2010, 09:49 PM
public class MP3TagData
02.{
03.
04. private string _Artist;
05. private string _SongTitle;
06. private string _Album;
07.
08. private string _Year;
09. public string Artist {
10. get { return _Artist; }
11. }
12. public string SongTitle {
13. get { return _SongTitle; }
14. }
15. public string Album {
16. get { return _Album; }
17. }
18.
19. public string Year {
20. get { return _Year; }
21. }
22.
23. public void ReadFromFile(string filename)
24. {
25. // Xóa các giá trị hiện có.
26. _SongTitle = "";
27. _Artist = "";
28. _Album = "";
29. _Year = "";
30.
31. FileStream fs = new FileStream(filename, FileMode.Open);
32. // Đọc thẻ MP3.
33. fs.Seek(0 - 128, SeekOrigin.End);
34. byte[] Tag = new byte[2];
35. fs.Read(Tag, 0, 3);
36.
37. // Kiểm tra thẻ có tồn tại hay không.
38. if (System.Text.Encoding.ASCII.GetString(Tag).Trim() == "TAG") {
39. _SongTitle = GetTagData(fs, 30);
40. _Artist = GetTagData(fs, 30);
41. _Album = GetTagData(fs, 30);
42. _Year = GetTagData(fs, 4);
43. }
44.
45. fs.Close();
46. }
47.
48. private string GetTagData(Stream stream, int length)
49. {
50. // Đọc dữ liệu.
51. byte[] Bytes = new byte[length - 1];
52. stream.Read(Bytes, 0, length);
53.
54. string TagData = System.Text.Encoding.ASCII.GetString(Bytes);
55. // Loại bỏ các ký tự null.
56. char[] TrimChars = {
57. char.Parse(" "),
58. char.Parse(vbNullChar)
59. };
60. TagData = TagData.Trim(TrimChars);
61. return TagData;
62.
63. }
64.
65.}
Tiếp nè:




1.MP3TagData MP3Tag = new MP3TagData();
2.MP3Tag.ReadFromFile("C:\\mp3\\chu_vit_con.mp3");
3.Console.WriteLine("Album: " + MP3Tag.Album);
4.Console.WriteLine("Artist: " + MP3Tag.Artist);
5.Console.WriteLine("Song: " + MP3Tag.SongTitle);
6.Console.WriteLine("Year: " + MP3Tag.Year);


code hay qua. Có bạn nào chạy dc ko :))

tesulakata
14-07-2010, 11:59 PM
code hay qua. Có bạn nào chạy dc ko :))

Chạy phăng phăng nè

q1q12
15-07-2010, 06:59 AM
Chạy phăng phăng nè
:d Bạn chia sẻ được không Mình mới học híc chẳng biết lỗi ở đâu