Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "metadata": {
- "name": "Musichackathon - Machinedness"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
- {
- "cells": [
- {
- "cell_type": "code",
- "collapsed": false,
- "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')",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 28
- },
- {
- "cell_type": "code",
- "collapsed": false,
- "input": "SR = 22050\nN_FFT = 1024\nN_MELS = 256\nHOP = N_FFT / 8\nFMAX = 8000",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 3
- },
- {
- "cell_type": "code",
- "collapsed": false,
- "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",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 4
- },
- {
- "cell_type": "code",
- "collapsed": false,
- "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",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 5
- },
- {
- "cell_type": "code",
- "collapsed": false,
- "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",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 31
- },
- {
- "cell_type": "code",
- "collapsed": false,
- "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",
- "language": "python",
- "metadata": {},
- "outputs": [],
- "prompt_number": 7
- }
- ],
- "metadata": {}
- }
- ]
- }
Add Comment
Please, Sign In to add comment