id3v2.cpp 3.7 KB

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