summaryrefslogtreecommitdiff
path: root/animism-align/cli/commands/peaks/parse.py
blob: 1740c447ce1476ae2c893da932cf17d1e450941f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""
Extract peaks from an MP3 file.
"""

import click

@click.command()
@click.option('-i', '--input', 'fp_in', required=True,
  help='Input file')
@click.pass_context
def cli(ctx, fp_in):
  """Extract peaks from an audio file.
  """
  print("This script is deprecated.  Extract peaks using the web UI!")
  return

  import os
  import math
  import librosa
  import numpy
  import json

  from app.settings import app_cfg

  if not os.path.exists(fp_in):
    print(f"fp_in does not exist: {fp_in}")
    return

  print(f"Loading {fp_in}")
  y, sr = librosa.load(fp_in, sr=None)

  sr_10 = sr / 10
  steps = math.ceil(y.shape[0] / sr_10)

  peaks = numpy.ndarray(steps)

  for i in range(steps):
    offset_start = math.floor(i * sr_10)
    offset_end = math.ceil((i + 1) * sr_10)
    slice = y[offset_start:offset_end]
    peak = max(abs(slice.min()), slice.max())
    peaks[i] = float('%.3f' % peak)
    # peaks[i * 2 + 1] = float('%.3f' % slice.max())

  with open(os.path.join(app_cfg.DIR_DATA_STORE, 'peaks/peaks.json'), 'w') as fp_out:
    json.dump(peaks.tolist(), fp_out, separators=(',', ':'))

  print("Wrote peaks.json")