Guest User

Untitled

a guest
Jun 23rd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. {
  2. "metadata": {
  3. "name": "Musichackathon - Machinedness"
  4. },
  5. "nbformat": 3,
  6. "nbformat_minor": 0,
  7. "worksheets": [
  8. {
  9. "cells": [
  10. {
  11. "cell_type": "code",
  12. "collapsed": false,
  13. "input": "import os\nimport glob\nimport librosa\n\nfrom pprint import pprint\n\nimport numpy as np\nimport scipy\n\nimport functools\nspecshow = functools.partial(imshow, aspect='auto', interpolation='nearest', origin='lower')",
  14. "language": "python",
  15. "metadata": {},
  16. "outputs": [],
  17. "prompt_number": 28
  18. },
  19. {
  20. "cell_type": "code",
  21. "collapsed": false,
  22. "input": "SR = 22050\nN_FFT = 1024\nN_MELS = 256\nHOP = N_FFT / 8\nFMAX = 8000",
  23. "language": "python",
  24. "metadata": {},
  25. "outputs": [],
  26. "prompt_number": 3
  27. },
  28. {
  29. "cell_type": "code",
  30. "collapsed": false,
  31. "input": "def load_features(f):\n \n y, sr = librosa.load(f, sr=SR)\n\n S = librosa.feature.melspectrogram(y, sr=SR, n_fft=N_FFT, hop_length=HOP, fmax=FMAX, n_mels=N_MELS)\n M = librosa.feature.mfcc(librosa.logamplitude(S))\n \n return S, M",
  32. "language": "python",
  33. "metadata": {},
  34. "outputs": [],
  35. "prompt_number": 4
  36. },
  37. {
  38. "cell_type": "code",
  39. "collapsed": false,
  40. "input": "def beat_stability(S):\n \n onset_strength = np.median(np.maximum(0.0, np.diff(S, axis=1)), axis=0)\n onset_strength = onset_strength / onset_strength.max()\n \n tempo, beats = librosa.beat.beat_track(onsets=onset_strength, hop_length=HOP, sr=SR, trim=False)\n \n beat_times = librosa.core.frames_to_time(beats, sr=SR, hop_length=HOP)\n \n intervals = np.diff(beat_times)\n \n stability = 1.0 - np.std(intervals) / (tempo / 60)\n \n return stability, beats, tempo",
  41. "language": "python",
  42. "metadata": {},
  43. "outputs": [],
  44. "prompt_number": 5
  45. },
  46. {
  47. "cell_type": "code",
  48. "collapsed": false,
  49. "input": "def struct_rep(X, k=0.05, display=True):\n \n true_k = np.ceil(k * X.shape[1])\n R = librosa.segment.recurrence_matrix(X, k=k, width=8)\n S = librosa.segment.structure_feature(R).astype(np.float32)\n S = scipy.signal.medfilt2d(S, np.array([1, 5]))\n \n num_repeats = np.sum(S, axis=0)\n \n if display:\n figure(figsize=(8,8))\n specshow(R, cmap='gray_r')\n xlabel('Beat #')\n ylabel('Beat #')\n title('Beat-beat similarity')\n \n figure(figsize=(8,8))\n subplot(211)\n specshow(S, cmap='gray_r')\n ylabel('Lag')\n title('Beat-lag repetition')\n\n subplot(212)\n plot(num_repeats)\n axis('tight')\n xlabel('Beat #')\n ylabel('# Repetitions')\n \n score = np.mean(num_repeats / true_k)\n return score",
  50. "language": "python",
  51. "metadata": {},
  52. "outputs": [],
  53. "prompt_number": 31
  54. },
  55. {
  56. "cell_type": "code",
  57. "collapsed": false,
  58. "input": "def score_file(f):\n S, M = load_features(f)\n \n stability_score, B, tempo = beat_stability(S)\n M_beat = librosa.feature.sync(M, B, aggregate=np.mean)[1:,:]\n repetition_score = struct_rep(M_beat)\n return stability_score, repetition_score",
  59. "language": "python",
  60. "metadata": {},
  61. "outputs": [],
  62. "prompt_number": 7
  63. }
  64. ],
  65. "metadata": {}
  66. }
  67. ]
  68. }
Add Comment
Please, Sign In to add comment