logo

bytemedia

Home to byte-level sounds, images, videos, … git clone https://hacktivis.me/git/bytemedia.git

kagome_kagome.c (3379B)


  1. //#define _POSIX_C_SOURCE 200809L
  2. #define _XOPEN_SOURCE 700
  3. #include <stdio.h>
  4. #include <inttypes.h> // uint32_t
  5. #include <math.h> // sinf(), M_PI, pow()
  6. #include <stdlib.h> // abort()
  7. #include "au.h"
  8. #include "effects.h"
  9. #include "instruments.h"
  10. #include "misc.h"
  11. void
  12. sin_note(int dur, struct au_header *header, int hertz, float volume) {
  13. char buf[4];
  14. for(int t = 0;t<dur;t++) {
  15. float tune = clarinet(header, hertz, t);
  16. float vol = crossfade(dur, t, volume);
  17. putchar((uint8_t)(tune * vol));
  18. }
  19. }
  20. #if 0
  21. void
  22. note(int dur, int pitch) {
  23. for(int t = 0;t<dur;t++) {
  24. putchar( t*pitch );
  25. }
  26. }
  27. #else
  28. #define REF_TUNE 430*1
  29. #define VOLUME 60
  30. #define note(dur,pitch) sin_note(dur, header, note_to_hertz(REF_TUNE, pitch-8), VOLUME)
  31. #endif
  32. void
  33. kagome_kagome(struct au_header *header) {
  34. int tick = header->samplerate / 2;
  35. int note = tick * 1.0;
  36. int gap = tick * 0.00;
  37. note(note*2, 8); silence(gap*2);
  38. note(note*1, 8); silence(gap);
  39. note(note*1, 9); silence(gap);
  40. // ----
  41. note(note*1, 8); silence(gap);
  42. note(note*1, 8); silence(gap);
  43. note(note*1, 8); silence(gap);
  44. silence(tick*1);
  45. // ----
  46. note(note*1, 8); silence(gap);
  47. note(note/2, 8); silence(gap/2);
  48. note(note/2, 8); silence(gap/2);
  49. note(note*1, 8); silence(gap);
  50. note(note/2, 7); silence(gap/2);
  51. note(note/2, 7); silence(gap/2);
  52. // ----
  53. note(note*1, 8); silence(gap);
  54. note(note/2, 8); silence(gap/2);
  55. note(note/2, 7); silence(gap/2);
  56. note(note*1, 5); silence(gap);
  57. silence(tick*1);
  58. // ----
  59. note(note, 8); silence(gap);
  60. note(note, 7); silence(gap);
  61. note(note, 8); silence(gap);
  62. note(note, 7); silence(gap);
  63. // ----
  64. note(note*1, 8); silence(gap);
  65. note(note/2, 8); silence(gap/2);
  66. note(note/2, 7); silence(gap/2);
  67. note(note*1, 5); silence(gap);
  68. silence(tick*1);
  69. // ----
  70. note(note*1, 8); silence(gap);
  71. note(note*1, 8); silence(gap);
  72. note(note*1, 8); silence(gap);
  73. note(note*1, 9); silence(gap);
  74. // ----
  75. note(note*1, 8); silence(gap);
  76. note(note*1, 8); silence(gap);
  77. note(note*1, 8); silence(gap);
  78. silence(tick*1);
  79. // ----
  80. note(note*1, 8); silence(gap);
  81. note(note/2, 7); silence(gap/2);
  82. note(note/2, 7); silence(gap/2);
  83. note(note*1, 8); silence(gap);
  84. note(note/2, 7); silence(gap/2);
  85. note(note/2, 7); silence(gap/2);
  86. // ----
  87. note(note*1, 8); silence(gap);
  88. note(note*1, 8); silence(gap);
  89. note(note*1, 5); silence(gap);
  90. silence(tick*1);
  91. // ----
  92. note(note/2, 8); silence(gap/2);
  93. note(note/2, 8); silence(gap/2);
  94. note(note/2, 8); silence(gap/2);
  95. note(note/2, 8); silence(gap/2);
  96. note(note*1, 8); silence(gap);
  97. note(note*1, 9); silence(gap);
  98. // ----
  99. note(note*1, 8); // silence(gap);
  100. note(note*1, 7); silence(gap);
  101. note(note*1, 8); silence(gap);
  102. silence(tick*1);
  103. }
  104. int
  105. main(void)
  106. {
  107. // Use AU defaults
  108. struct au_header header = {
  109. .offset = 24, // no-annotation, in octets
  110. .length = 0xFFFFFFFF, // unknown data size
  111. .encoding = AU_ENCODING_8B_LPCM,
  112. .samplerate = 48000, // Hz
  113. .channels = 1
  114. };
  115. // fd 1 is stdout
  116. write_au_header(1, &header);
  117. kagome_kagome(&header);
  118. // dur pt vol del
  119. //sin_note(header.samplerate, &header, 440, 150, 0);
  120. //sin_note(header.samplerate/2, &header, note_to_hertz(440, 0), 150, 0);
  121. //sin_note(header.samplerate/4, &header, note_to_hertz(440, 1), 150, 0);
  122. //sin_note(header.samplerate/4, &header, note_to_hertz(440, 1), 150, 0);
  123. return 0;
  124. }