Tutorials¶
Step-by-step tutorials for common audio and MIDI tasks with coremusic.
Tutorial Overview¶
Getting Started¶
Start here if you're new to coremusic:
- Audio File Basics - Read and inspect audio files
- Audio Playback - Play audio files
- Audio Recording - Record audio from microphones
- MIDI Basics - Send and receive MIDI messages
Audio Processing¶
- Audio File Basics - Read, write, and analyze audio files
- Audio Playback - Simple to advanced audio playback
- Audio Recording - Capture audio from input devices
- Effects Processing - Apply AudioUnit effects to audio
- Async Audio - Non-blocking audio operations
MIDI¶
- MIDI Basics - MIDI fundamentals: devices, messages, sending/receiving
- MIDI Transform - Transform MIDI with composable pipelines (transpose, quantize, humanize)
Music Theory and Generative¶
- Music Theory - Notes, intervals, scales, chords, progressions
- Generative algorithms: arpeggiators, Euclidean rhythms, Markov chains
Quick Reference¶
Audio Files¶
from coremusic.audio import AudioFile
# Object-oriented API (recommended)
with AudioFile("audio.wav") as audio:
print(f"Duration: {audio.duration:.2f}s")
print(f"Sample rate: {audio.format.sample_rate}Hz")
data, count = audio.read_packets(0, 1000)
Audio Playback¶
import time
from coremusic.base import AudioPlayer
player = AudioPlayer()
player.load_file("audio.wav")
player.setup_output()
player.play()
while player.is_playing():
time.sleep(0.1)
player.stop()
Audio Recording¶
from coremusic.capi import AudioRecorder
recorder = AudioRecorder(sample_rate=44100.0, channels=1)
recorder.setup_input(duration=1.0)
recorder.start()
# Pump the CoreAudio run loop until the requested duration has been captured
while recorder.is_recording():
recorder.run_loop(0.1)
recorder.stop()
recorder.save_to_file("recording.wav")
print(f"Recorded {recorder.get_recorded_duration():.2f}s")
Effects Processing¶
from coremusic.audio import AudioEffectsChain
chain = AudioEffectsChain()
chain.open()
reverb = chain.add_effect_by_name("AUReverb2")
output = chain.add_output()
chain.connect(reverb, output)
chain.initialize()
chain.start()
# ... process audio through chain
chain.stop()
chain.dispose()
MIDI¶
import time
from coremusic.midi import MIDIClient, get_destinations, note_off, note_on
client = MIDIClient("My App")
port = client.create_output_port("Output")
destinations = get_destinations()
dest = destinations[0] if destinations else client.create_virtual_destination("Synth")
# Send Note On (middle C, velocity 100)
port.send_data(dest, note_on("C4", 100))
time.sleep(0.5)
# Send Note Off
port.send_data(dest, note_off("C4"))
client.dispose()
Command Line Examples¶
# Play audio
coremusic audio play music.wav
# Record audio
coremusic audio record -o recording.wav --duration 10
# Apply effect
coremusic plugin process AUReverb2 input.wav -o output.wav
# Monitor MIDI
coremusic midi monitor
# List devices
coremusic device list
See Also¶
- Getting Started - Installation and setup
- Cookbook - Ready-to-use recipes
- API Reference - Complete API reference
- CLI Guide - Command-line interface guide