Cookbook¶
Ready-to-use recipes for common audio and MIDI processing tasks.
Recipe Overview¶
File Operations¶
- File I/O: Common file reading and writing patterns
- Batch Processing: Process multiple files efficiently
- Format Detection: Detect and validate audio formats
- Format Conversion: Convert between audio formats
Audio Processing¶
- Volume Control: Normalize audio, adjust levels
- Fades: Apply fade in/out effects
- Resampling: Change sample rates with automatic conversion
- Mixing: Mix multiple audio tracks
- Slicing: Split audio into chunks
- Concatenation: Merge multiple audio files
Real-Time Audio¶
- Recording: Capture audio from input devices
- Low-Latency Playback: Minimal latency audio output
- Level Monitoring: Real-time audio level metering
- Effects Processing: Apply real-time audio effects
AudioUnit Plugin Hosting¶
- Plugin Discovery: Find and list available AudioUnit plugins
- Parameter Control: Control plugin parameters and automation
- Preset Management: Save, load, and share plugin presets
- Audio Format Support: Process audio in multiple formats (float32/64, int16/32)
- Plugin Chains: Create multi-effect chains with automatic routing
- MIDI Control: Control instrument plugins with MIDI messages
Ableton Link Integration¶
- Tempo Synchronization: Sync tempo across multiple applications
- Beat-Accurate Timing: Schedule events on specific beats
- AudioPlayer Sync: Synchronize audio playback with Link
- MIDI Clock Sync: Send MIDI clock messages synchronized to Link
- Transport Control: Control playback state across devices
- Multi-Device Sync: Connect multiple Link-enabled applications
MIDI Processing¶
- Device Discovery: Find and list MIDI sources and destinations
- MIDI Input: Receive and process MIDI messages
- MIDI Output: Send MIDI messages to devices
- MIDI Routing: Route MIDI between devices and channels
- MIDI Transformation: Transpose, scale velocity, and transform MIDI data
- MIDI Recording: Record and playback MIDI sequences
Integration¶
- NumPy Integration: Work with NumPy arrays for signal processing
- SciPy Integration: Use SciPy for advanced DSP
- Async I/O: Asynchronous audio file operations
Quick Reference¶
Common Patterns¶
Read audio file:
from coremusic.audio import AudioFile
with AudioFile("audio.wav") as audio:
data, count = audio.read_packets(0, 1024)
samples = audio.read_as_numpy() # or the whole file at once
Load AudioUnit plugin:
from coremusic.audio.audiounit_host import AudioUnitPlugin
with AudioUnitPlugin.from_name("AUDelay") as plugin:
plugin['Delay Time'] = 0.5
output = plugin.process(input_data)
Create plugin chain:
from coremusic.audio.audiounit_host import AudioUnitChain
with AudioUnitChain() as chain:
chain.add_plugin("AUHipass")
chain.add_plugin("AUMatrixReverb")
output = chain.process(input_data, wet_dry_mix=0.8)
Sync with Ableton Link:
from coremusic import link
session = link.LinkSession(bpm=120.0)
session.enabled = True
state = session.capture_app_session_state()
print(f"Tempo: {state.tempo:.1f} BPM")
print(f"Peers: {session.num_peers}")
session.enabled = False
Send MIDI:
from coremusic import capi
from coremusic.midi import note_on
client = capi.midi_client_create("Output")
port = capi.midi_output_port_create(client, "Out")
dest = capi.midi_destination_create(client, "Cookbook Destination")
# Send Note On
capi.midi_send_data(port, dest, note_on("C4", 100))
capi.midi_client_dispose(client)
Tips and Best Practices¶
Performance¶
- Use chunk processing for large files
- Pre-allocate buffers when possible
- Minimize memory copies
- Use appropriate buffer sizes (1024-4096 frames typical)
Resource Management¶
- Always use context managers (
withstatements) - Close resources explicitly if not using context managers
- Handle exceptions to ensure cleanup
- Dispose of MIDI clients and ports properly
Error Handling¶
- Check file existence before opening
- Validate audio formats
- Handle CoreAudio errors gracefully
- Provide meaningful error messages
Thread Safety¶
- AudioUnits are not thread-safe by default
- Use locks when accessing shared resources
- Process audio on dedicated threads
- Avoid blocking the audio callback thread