Files
ableton-mcp-ai/place_perc_audio.py
2026-03-30 02:35:02 -03:00

96 lines
3.7 KiB
Python

import socket
import json
import os
def send_command(cmd_type, params):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(30)
try:
sock.connect(('127.0.0.1', 9877))
request = json.dumps({'type': cmd_type, 'params': params})
sock.sendall((request + '\n').encode('utf-8'))
response = b''
while True:
chunk = sock.recv(4096)
if not chunk:
break
response += chunk
if b'\n' in chunk:
break
return json.loads(response.decode('utf-8'))
except Exception as e:
return {'status': 'error', 'message': f'Socket error: {str(e)}'}
finally:
sock.close()
samples = {
26: {
'name': 'PERC LOOP 1',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\loops\perc\Perc_Loop_01_Fm_125.wav',
'positions': [0, 8, 16, 24, 32, 40, 48, 56],
'volume': 0.78
},
27: {
'name': 'PERC LOOP 2',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\loops\perc\Perc_Loop_03_A#_125.wav',
'positions': [0, 16, 32, 48, 64, 80],
'volume': 0.75
},
28: {
'name': 'TOP LOOP',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\loops\loop_other\Top_Loop_01_Any_125.wav',
'positions': [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60],
'volume': 0.72
},
29: {
'name': 'SHAKER',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\textures\perc\Kit_03_Shaker_Cm_125.wav',
'positions': [0, 8, 16, 24, 32, 40, 48, 56],
'volume': 0.70
},
30: {
'name': 'CONGA',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\loops\perc\BBH - Primer Impacto - Tom Loop A# 124 Bpm 7.wav',
'positions': [8, 24, 40, 56],
'volume': 0.75
},
31: {
'name': 'COWBELL',
'file': r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\librerias\organized_samples\loops\perc\Perc_Loop_06_Dm_125.wav',
'positions': [4, 12, 20, 28, 36, 44],
'volume': 0.75
}
}
log_path = r'C:\Users\ren\Documents\Ableton\Logs\percussion_group.txt'
print('Placing audio on correct percussion tracks (26-31)...')
results = []
for track_idx, info in samples.items():
print(f'\nProcessing {info["name"]} (track {track_idx})...')
result = send_command('create_arrangement_audio_pattern', {
'track_index': track_idx,
'file_path': info['file'],
'positions': info['positions']
})
results.append({'track': info['name'], 'track_idx': track_idx, 'result': result})
print(f' Audio: {result.get("status", "unknown")}')
vol_result = send_command('set_track_volume', {'index': track_idx, 'volume': info['volume']})
print(f' Volume: {vol_result.get("status", "unknown")} ({info["volume"]})')
with open(log_path, 'a', encoding='utf-8') as f:
f.write(f'\n{info["name"]} (track {track_idx}):\n')
f.write(f' File: {os.path.basename(info["file"])}\n')
f.write(f' Positions: {info["positions"]}\n')
f.write(f' Volume: {info["volume"]}\n')
f.write(f' Result: {json.dumps(result, indent=2)}\n')
with open(log_path, 'a', encoding='utf-8') as f:
f.write('\n=== FINAL PERCUSSION GROUP SUMMARY ===\n')
for r in results:
status = r['result'].get('status', 'unknown')
f.write(f'Track {r["track_idx"]} {r["track"]}: {status}\n')
print(f'{r["track"]}: {status}')