Skip to content

Latest commit

 

History

History
138 lines (104 loc) · 3.71 KB

File metadata and controls

138 lines (104 loc) · 3.71 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
1.10.0.0 30-Nov-09 Add test for null base (sb) - in addition to null string test (mb)
(required if v2 referenced prior to file scan)
*/
#include "StdAfx.h"
#include "id3v2.h"
mpg123clr::id3::mpg123id3v2::mpg123id3v2(void)
{
}
mpg123clr::id3::mpg123id3v2::mpg123id3v2(mpg123_id3v2* sb)
{
this->sb = sb;
}
// Destructor
mpg123clr::id3::mpg123id3v2::~mpg123id3v2(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123id3v2();
}
// Finalizer
mpg123clr::id3::mpg123id3v2::!mpg123id3v2(void)
{
// we do not create the underlying structure, so shouldn't dispose it either...
}
String^ mpg123clr::id3::mpg123id3v2::title::get()
{
// updated: more efficient "union style" mpg123str
mpg123str^ str = (sb == nullptr || sb->title == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->title);
// Deprecated remnant - uses "overlayed style" mpg123str - note inefficient PtrToStrucure...
// mpg123str^% str = gcnew mpg123str;
// Marshal::PtrToStructure((IntPtr)sb->title, str);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::artist::get()
{
mpg123str^ str = (sb == nullptr || sb->artist == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->artist);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::album::get()
{
mpg123str^ str = (sb == nullptr || sb->album == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->album);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::comment::get()
{
mpg123str^ str = (sb == nullptr || sb->comment == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->comment);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::year::get()
{
mpg123str^ str = (sb == nullptr || sb->year == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->year);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::genre::get()
{
mpg123str^ str = (sb == nullptr || sb->genre == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->genre);
return str->Text;
}
int mpg123clr::id3::mpg123id3v2::version::get()
{
return sb->version;
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::MakeTextList(mpg123_text* ptr, size_t count)
{
// WARN 4267 - clr limited to 32bit-length-size arrays!!
array<mpg123clr::mpg123text^>^ ary = gcnew array<mpg123clr::mpg123text^>((int)count);
for (int ii = 0; ii < ary->Length; ii++)
{
// Remnant - for explicit layout
// mpg123text^% txt = gcnew mpg123text;
// Marshal::PtrToStructure((IntPtr)ptr++, txt);
// New code - for "handle style" structure
mpg123text^% txt = gcnew mpg123text(ptr++);
ary[ii] = txt;
}
return ary;
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Comments::get()
{
return MakeTextList(sb->comment_list, sb->comments);
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Texts::get()
{
return MakeTextList(sb->text, sb->texts);
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Extras::get()
{
return MakeTextList(sb->extra, sb->extras);
}