Skip to content

Instantly share code, notes, and snippets.

@saaj
Created March 20, 2024 21:31
Show Gist options
  • Save saaj/533a974683106faed746176ae2ceb8d6 to your computer and use it in GitHub Desktop.
Save saaj/533a974683106faed746176ae2ceb8d6 to your computer and use it in GitHub Desktop.
Update Pulseeffects output preset JSON from AutoEq txt
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"source": [
"eq = '''\n",
"Preamp: -6.81 dB\n",
"Filter 1: ON LSC Fc 105.0 Hz Gain -9.2 dB Q 0.70\n",
"Filter 2: ON PK Fc 24.4 Hz Gain -2.2 dB Q 1.56\n",
"Filter 3: ON PK Fc 36.9 Hz Gain -1.9 dB Q 2.47\n",
"Filter 4: ON PK Fc 121.2 Hz Gain 0.6 dB Q 2.62\n",
"Filter 5: ON PK Fc 148.0 Hz Gain -3.8 dB Q 1.52\n",
"Filter 6: ON PK Fc 306.4 Hz Gain -2.2 dB Q 2.58\n",
"Filter 7: ON PK Fc 1769.9 Hz Gain 2.0 dB Q 2.08\n",
"Filter 8: ON PK Fc 2442.2 Hz Gain 6.0 dB Q 2.39\n",
"Filter 9: ON PK Fc 9948.0 Hz Gain 1.4 dB Q 3.07\n",
"Filter 10: ON HSC Fc 10000.0 Hz Gain 5.2 dB Q 0.70\n",
"'''"
],
"outputs": [],
"execution_count": 1,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"config_file = '~/.config/PulseEffects/output/MOMENTUM4.json'"
],
"outputs": [],
"execution_count": 2,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"from collections import namedtuple\n",
"from decimal import Decimal\n",
"\n",
"# Filter 2: ON PK Fc 64.8 Hz Gain 4.0 dB Q 1.10\n",
"Band = namedtuple('Band', ['type', 'frequency', 'gain', 'q'])\n",
"\n",
"def parse_eq(s):\n",
" preamp_line, *filter_lines = s.strip().splitlines()\n",
" bands = []\n",
" for filter_line in filter_lines:\n",
" parts = filter_line.split()\n",
" bands.append(\n",
" Band(parts[3], Decimal(parts[5]), Decimal(parts[8]), Decimal(parts[11]))\n",
" ) \n",
" return Decimal(preamp_line.split()[1]), bands"
],
"outputs": [],
"execution_count": 3,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": true
}
},
{
"cell_type": "code",
"source": [
"equalizer_tpl = {\n",
" 'state': 'true',\n",
" 'mode': 'IIR',\n",
" 'num-bands': '10',\n",
" 'input-gain': '0',\n",
" 'output-gain': '0',\n",
" 'split-channels': 'false',\n",
" 'left': {},\n",
" 'right': {},\n",
"}\n",
"band_tpl = {\n",
" 'type': 'Bell',\n",
" 'mode': 'RLC (BT)',\n",
" 'slope': 'x1',\n",
" 'solo': 'false',\n",
" 'mute': 'false',\n",
" 'gain': '-3',\n",
" 'frequency': '98',\n",
" 'q': '1',\n",
"}\n",
"preamp, bands = parse_eq(eq)\n",
"\n",
"equalizer = equalizer_tpl.copy()\n",
"equalizer['num-bands'] = str(len(bands))\n",
"equalizer['input-gain'] = str(preamp)\n",
"for i, band in enumerate(bands):\n",
" equalizer['left'][f'band{i}'] = equalizer['right'][f'band{i}'] = {\n",
" **band_tpl,\n",
" 'type': {'LSC': 'Lo-shelf', 'HSC': 'Hi-shelf', 'PK': 'Bell'}.get(band.type),\n",
" 'frequency': str(band.frequency),\n",
" 'gain': str(band.gain),\n",
" 'q': str(band.q), \n",
" }"
],
"outputs": [],
"execution_count": 4,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": true
}
},
{
"cell_type": "code",
"source": [
"from IPython.display import JSON\n",
"\n",
"JSON(equalizer)"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 5,
"data": {
"text/plain": [
"<IPython.core.display.JSON object>"
],
"application/json": {
"state": "true",
"mode": "IIR",
"num-bands": "10",
"input-gain": "-6.81",
"output-gain": "0",
"split-channels": "false",
"left": {
"band0": {
"type": "Lo-shelf",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-9.2",
"frequency": "105.0",
"q": "0.70"
},
"band1": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-2.2",
"frequency": "24.4",
"q": "1.56"
},
"band2": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-1.9",
"frequency": "36.9",
"q": "2.47"
},
"band3": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "0.6",
"frequency": "121.2",
"q": "2.62"
},
"band4": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-3.8",
"frequency": "148.0",
"q": "1.52"
},
"band5": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-2.2",
"frequency": "306.4",
"q": "2.58"
},
"band6": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "2.0",
"frequency": "1769.9",
"q": "2.08"
},
"band7": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "6.0",
"frequency": "2442.2",
"q": "2.39"
},
"band8": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "1.4",
"frequency": "9948.0",
"q": "3.07"
},
"band9": {
"type": "Hi-shelf",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "5.2",
"frequency": "10000.0",
"q": "0.70"
}
},
"right": {
"band0": {
"type": "Lo-shelf",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-9.2",
"frequency": "105.0",
"q": "0.70"
},
"band1": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-2.2",
"frequency": "24.4",
"q": "1.56"
},
"band2": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-1.9",
"frequency": "36.9",
"q": "2.47"
},
"band3": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "0.6",
"frequency": "121.2",
"q": "2.62"
},
"band4": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-3.8",
"frequency": "148.0",
"q": "1.52"
},
"band5": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "-2.2",
"frequency": "306.4",
"q": "2.58"
},
"band6": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "2.0",
"frequency": "1769.9",
"q": "2.08"
},
"band7": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "6.0",
"frequency": "2442.2",
"q": "2.39"
},
"band8": {
"type": "Bell",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "1.4",
"frequency": "9948.0",
"q": "3.07"
},
"band9": {
"type": "Hi-shelf",
"mode": "RLC (BT)",
"slope": "x1",
"solo": "false",
"mute": "false",
"gain": "5.2",
"frequency": "10000.0",
"q": "0.70"
}
}
}
},
"metadata": {
"application/json": {
"expanded": false,
"root": "root"
}
}
}
],
"execution_count": 5,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": true
}
},
{
"cell_type": "code",
"source": [
"import json\n",
"import os.path\n",
"\n",
"with open(os.path.expanduser(config_file), 'r+') as f:\n",
" pulseeffect_config = json.load(f)\n",
" pulseeffect_config['output']['equalizer'] = equalizer\n",
" \n",
" f.seek(0)\n",
" f.truncate()\n",
" json.dump(pulseeffect_config, f, indent=4)\n",
"print('OK')"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"OK\n"
]
}
],
"execution_count": 6,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": true
}
}
],
"metadata": {
"kernel_info": {
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.8.10",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"kernelspec": {
"name": "python3",
"language": "python",
"display_name": "Python 3"
},
"nteract": {
"version": "0.14.5"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment