Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 
 

157 рядки
3.6 KiB

  1. /*
  2. * toc_print.c -- print toc file
  3. *
  4. * Copyright (C) 2004, 2005, 2006, 2007 Svend Sorensen
  5. * For license terms, see the file COPYING in this distribution.
  6. */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include "cd.h"
  10. #include "time.h"
  11. void toc_print_track (FILE *fp, Track *track);
  12. void toc_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack);
  13. void toc_print (FILE *fp, Cd *cd)
  14. {
  15. Cdtext *cdtext = cd_get_cdtext(cd);
  16. int i; /* track */
  17. Track *track;
  18. switch(cd_get_mode(cd)) {
  19. case MODE_CD_DA:
  20. fprintf(fp, "CD_DA\n");
  21. break;
  22. case MODE_CD_ROM:
  23. fprintf(fp, "CD_ROM\n");
  24. break;
  25. case MODE_CD_ROM_XA:
  26. fprintf(fp, "CD_ROM_XA\n");
  27. break;
  28. }
  29. if (NULL != cd_get_catalog(cd)) {
  30. fprintf(fp, "CATALOG \"%s\"\n", cd_get_catalog(cd));
  31. }
  32. if(0 != cdtext_is_empty(cdtext)) {
  33. fprintf(fp, "CD_TEXT {\n");
  34. fprintf(fp, "\tLANGUAGE_MAP { 0:9 }\n");
  35. fprintf(fp, "\tLANGUAGE 0 {\n");
  36. toc_print_cdtext(cdtext, fp, 0);
  37. fprintf(fp, "\t}\n");
  38. fprintf(fp, "}\n");
  39. }
  40. for (i = 1; i <= cd_get_ntrack(cd); i++) {
  41. track = cd_get_track(cd, i);
  42. fprintf(fp, "\n");
  43. toc_print_track(fp, track);
  44. }
  45. }
  46. void toc_print_track (FILE *fp, Track *track)
  47. {
  48. Cdtext *cdtext = track_get_cdtext(track);
  49. int i; /* index */
  50. fprintf(fp, "TRACK ");
  51. switch (track_get_mode(track)) {
  52. case MODE_AUDIO:
  53. fprintf(fp, "AUDIO");
  54. break;
  55. case MODE_MODE1:
  56. fprintf(fp, "MODE1");
  57. break;
  58. case MODE_MODE1_RAW:
  59. fprintf(fp, "MODE1_RAW");
  60. break;
  61. case MODE_MODE2:
  62. fprintf(fp, "MODE2");
  63. break;
  64. case MODE_MODE2_FORM1:
  65. fprintf(fp, "MODE2_FORM1");
  66. break;
  67. case MODE_MODE2_FORM2:
  68. fprintf(fp, "MODE2_FORM2");
  69. break;
  70. case MODE_MODE2_FORM_MIX:
  71. fprintf(fp, "MODE2_FORM_MIX");
  72. break;
  73. }
  74. fprintf(fp, "\n");
  75. if (0 != track_is_set_flag(track, FLAG_PRE_EMPHASIS)) {
  76. fprintf(fp, "PRE_EMPHASIS\n");
  77. }
  78. if (0 != track_is_set_flag(track, FLAG_COPY_PERMITTED)) {
  79. fprintf(fp, "COPY\n");
  80. }
  81. if (0 != track_is_set_flag(track, FLAG_FOUR_CHANNEL)) {
  82. fprintf(fp, "FOUR_CHANNEL_AUDIO\n");
  83. }
  84. if (NULL != track_get_isrc(track)) {
  85. fprintf(fp, "ISRC \"%s\"\n", track_get_isrc(track));
  86. }
  87. if (0 != cdtext_is_empty(cdtext)) {
  88. fprintf(fp, "CD_TEXT {\n");
  89. fprintf(fp, "\tLANGUAGE 0 {\n");
  90. toc_print_cdtext(cdtext, fp, 1);
  91. fprintf(fp, "\t}\n");
  92. fprintf(fp, "}\n");
  93. }
  94. if (0 != track_get_zero_pre(track)) {
  95. fprintf(fp, "ZERO ");
  96. fprintf(fp, "%s", time_frame_to_mmssff(track_get_zero_pre(track)));
  97. fprintf(fp, "\n");
  98. }
  99. fprintf(fp, "FILE ");
  100. fprintf(fp, "\"%s\" ", track_get_filename(track));
  101. if (0 == track_get_start(track)) {
  102. fprintf(fp, "0");
  103. } else {
  104. fprintf(fp, "%s", time_frame_to_mmssff(track_get_start(track)));
  105. }
  106. if (0 != track_get_length(track)) {
  107. fprintf(fp, " %s", time_frame_to_mmssff(track_get_length(track)));
  108. }
  109. fprintf(fp, "\n");
  110. if (0 != track_get_zero_post(track)) {
  111. fprintf(fp, "ZERO ");
  112. fprintf(fp, "%s", time_frame_to_mmssff(track_get_zero_post(track)));
  113. fprintf(fp, "\n");
  114. }
  115. if (track_get_index(track, 1) != 0) {
  116. fprintf(fp, "START ");
  117. fprintf(fp, "%s\n", time_frame_to_mmssff(track_get_index(track, 1)));
  118. }
  119. for (i = 2; i < track_get_nindex(track); i++) {
  120. fprintf(fp, "INDEX ");
  121. fprintf(fp, "%s\n", time_frame_to_mmssff( \
  122. track_get_index(track, i) - track_get_index(track, 0) \
  123. ));
  124. }
  125. }
  126. void toc_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack)
  127. {
  128. int pti;
  129. char *value = NULL;
  130. for (pti = 0; PTI_END != pti; pti++) {
  131. if (NULL != (value = cdtext_get(pti, cdtext))) {
  132. fprintf(fp, "\t\t");
  133. fprintf(fp, "%s", cdtext_get_key(pti, istrack));
  134. fprintf(fp, " \"%s\"\n", value);
  135. }
  136. }
  137. }