spectrum.py 691 B

123456789101112131415161718192021222324252627282930313233
  1. import numpy as np
  2. import librosa
  3. import math
  4. import sys
  5. print("Loading file")
  6. audio, sample_rate = librosa.load(sys.argv[1], duration=60, offset=0, sr=15360)
  7. print("Getting spectrum")
  8. spectrum = librosa.stft(audio)
  9. S = np.abs(spectrum)
  10. fout = open("spectrum.h", "w")
  11. print("Writing file")
  12. fn = 36
  13. fs = int(len(S) / fn)
  14. fout.write("const uint16_t spectrum[][4] = {\n")
  15. for t in range(0,len(S[0]-1)):
  16. fout.write("{ ")
  17. f_prev = 0
  18. for f in [8, 45, 300, 600]:
  19. v = 0
  20. for i in range(f_prev, f): v += S[i][t]
  21. if v != 0: v = int(v/30)
  22. if v < 0: v = 0
  23. f_prev = f
  24. fout.write(str(int(v)) + ", ")
  25. fout.write("},\n")
  26. fout.write("};\n")
  27. fout.close()
  28. print("Finished")