You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 19 години
преди 16 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*
  2. * cue_print.y -- print cue 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 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. }