Skip to content

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:

  1. Audio File Basics - Read and inspect audio files
  2. Audio Playback - Play audio files
  3. Audio Recording - Record audio from microphones
  4. MIDI Basics - Send and receive MIDI messages

Audio Processing

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