/examples/stretch/beatshift.py

http://echo-nest-remix.googlecode.com/ · Python · 50 lines · 33 code · 6 blank · 11 comment · 4 complexity · c6b0105106e0db6e5b64760eec7c90c5 MD5 · raw file

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. """
  4. beatshift.py
  5. Pitchshift each beat based on its position in the bar.
  6. Beat one is unchanged, beat two is shifted down one half step,
  7. beat three is shifted down two half steps, etc.
  8. Created by Ben Lacker on 2009-06-24.
  9. """
  10. import numpy
  11. import os
  12. import random
  13. import sys
  14. import time
  15. import soundtouch
  16. from echonest import audio, modify
  17. USAGE = """
  18. Usage:
  19. python beatshift.py <input_filename> <output_filename>
  20. Exampel:
  21. python beatshift.py CryMeARiver.mp3 CryMeAShifty.mp3
  22. """
  23. def main():
  24. try:
  25. in_filename = sys.argv[1]
  26. out_filename = sys.argv[2]
  27. except Exception:
  28. print USAGE
  29. sys.exit(-1)
  30. st = modify.Modify()
  31. afile = audio.LocalAudioFile(in_filename)
  32. beats = afile.analysis.beats
  33. out_shape = (len(afile.data),)
  34. out_data = audio.AudioData(shape=out_shape, numChannels=1, sampleRate=44100)
  35. for i, beat in enumerate(beats):
  36. data = afile[beat].data
  37. number = beat.local_context()[0] % 12
  38. new_ad = st.shiftPitchSemiTones(afile[beat], number*-1)
  39. out_data.append(new_ad)
  40. out_data.encode(out_filename)
  41. if __name__ == '__main__':
  42. main()