No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

158 líneas
3.6 KiB

  1. /*
  2. * cue_print.y -- print cue file
  3. *
  4. * Copyright (C) 2004, 2005, 2006, 2007, 2013 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 cue_print_track (FILE *fp, Track *track, int trackno);
  12. void cue_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack);
  13. void cue_print_index (long i, FILE *fp);
  14. char *filename = ""; /* last track datafile */
  15. long prev_length = 0; /* last track length */
  16. /* prints cd in cue format */
  17. void cue_print (FILE *fp, Cd *cd)
  18. {
  19. Cdtext *cdtext = cd_get_cdtext(cd);
  20. int i; /* track */
  21. Track *track = NULL;
  22. /* print global information */
  23. if (NULL != cd_get_catalog(cd)) {
  24. fprintf(fp, "CATALOG %s\n", cd_get_catalog(cd));
  25. }
  26. cue_print_cdtext(cdtext, fp, 0);
  27. /* print track information */
  28. for (i = 1; i <= cd_get_ntrack(cd); i++) {
  29. track = cd_get_track(cd, i);
  30. fprintf(fp, "\n");
  31. cue_print_track(fp, track, i);
  32. }
  33. }
  34. void cue_print_track (FILE *fp, Track *track, int trackno)
  35. {
  36. Cdtext *cdtext = track_get_cdtext(track);
  37. int i; /* index */
  38. if (NULL != track_get_filename(track)) {
  39. /*
  40. * always print filename for track 1, afterwards only
  41. * print filename if it differs from the previous track
  42. */
  43. if (0 != strcmp(track_get_filename(track), filename)) {
  44. filename = track_get_filename(track);
  45. fprintf(fp, "FILE \"%s\" ", filename);
  46. /* NOTE: what to do with other formats (MP3, etc)? */
  47. if (MODE_AUDIO == track_get_mode(track)) {
  48. fprintf(fp, "WAVE\n");
  49. } else {
  50. fprintf(fp, "BINARY\n");
  51. }
  52. }
  53. }
  54. fprintf(fp, "TRACK %02d ", trackno);
  55. switch (track_get_mode(track)) {
  56. case MODE_AUDIO:
  57. fprintf(fp, "AUDIO\n");
  58. break;
  59. case MODE_MODE1:
  60. fprintf(fp, "MODE1/2048\n");
  61. break;
  62. case MODE_MODE1_RAW:
  63. fprintf(fp, "MODE1/2352\n");
  64. break;
  65. case MODE_MODE2:
  66. fprintf(fp, "MODE2/2048\n");
  67. break;
  68. case MODE_MODE2_FORM1:
  69. fprintf(fp, "MODE2/2336\n");
  70. break;
  71. case MODE_MODE2_FORM2:
  72. fprintf(fp, "MODE2/2324\n");
  73. break;
  74. case MODE_MODE2_FORM_MIX:
  75. fprintf(fp, "MODE2/2336\n");
  76. break;
  77. case MODE_MODE2_RAW:
  78. fprintf(fp, "MODE2/2352\n");
  79. break;
  80. }
  81. cue_print_cdtext(cdtext, fp, 1);
  82. if (0 != track_is_set_flag(track, FLAG_ANY)) {
  83. fprintf(fp, "FLAGS");
  84. if (0 != track_is_set_flag(track, FLAG_PRE_EMPHASIS)) {
  85. fprintf(fp, " PRE");
  86. }
  87. if (0 != track_is_set_flag(track, FLAG_COPY_PERMITTED)) {
  88. fprintf(fp, " DCP");
  89. }
  90. if (0 != track_is_set_flag(track, FLAG_FOUR_CHANNEL)) {
  91. fprintf(fp, " 4CH");
  92. }
  93. if (0 != track_is_set_flag(track, FLAG_SCMS)) {
  94. fprintf(fp, " SCMS");
  95. }
  96. fprintf(fp, "\n");
  97. }
  98. if (NULL != track_get_isrc(track)) {
  99. fprintf(fp, "ISRC %s\n", track_get_isrc(track));
  100. }
  101. if (0 != track_get_zero_pre(track)) {
  102. fprintf (fp, "PREGAP %s\n", time_frame_to_mmssff(track_get_zero_pre(track)));
  103. }
  104. /* don't print index 0 if index 1 = 0 */
  105. if (track_get_index(track, 1) == 0) {
  106. i = 1;
  107. } else {
  108. i = 0;
  109. }
  110. for (; i < track_get_nindex(track); i++) {
  111. fprintf(fp, "INDEX %02d ", i);
  112. cue_print_index( \
  113. track_get_index(track, i) \
  114. + track_get_start(track) \
  115. - track_get_zero_pre(track) , fp);
  116. }
  117. if (0 != track_get_zero_post(track)) {
  118. fprintf (fp, "POSTGAP %s\n", time_frame_to_mmssff(track_get_zero_post(track)));
  119. }
  120. prev_length = track_get_length(track);
  121. }
  122. void cue_print_cdtext (Cdtext *cdtext, FILE *fp, int istrack)
  123. {
  124. int pti;
  125. char *value = NULL;
  126. for (pti = 0; PTI_END != pti; pti++) {
  127. if (NULL != (value = cdtext_get(pti, cdtext))) {
  128. fprintf(fp, "%s", cdtext_get_key(pti, istrack));
  129. fprintf(fp, " \"%s\"\n", value);
  130. }
  131. }
  132. }
  133. void cue_print_index (long i, FILE *fp)
  134. {
  135. fprintf (fp, "%s\n", time_frame_to_mmssff(i));
  136. }