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}')