🔊 audio - Audio Processing
Audio I/O, DSP, Synthesis, Effects, MIDI
163
Functions
1,669
Lines
55 KB
Size
🚀 Quick Start
içe_aktar audio
// Load audio file
değişken ses = audio.load("music.wav")
audio.play(ses)
// Generate sound (synthesizer)
değişken osc = audio.oscillator_create(SINE, 440.0) // A4 note
audio.oscillator_play(osc, 1.0) // 1 second
// Microphone input
değişken mic = audio.input_open()
değişken buffer = audio.input_read(mic, 1024)
// Real-time processing
değişken output = audio.output_open(44100, 2) // 44.1kHz stereo
döngü yap
değişken samples = audio.input_read(mic, 512)
// Apply effect
değişken processed = audio.reverb(samples, 0.5)
audio.output_write(output, processed)
son
📚 Features
- I/O: WAV, MP3, OGG, FLAC loading/saving
- Playback: Real-time audio playback, streaming
- Synthesis: Oscillator (sine, square, sawtooth, triangle), ADSR envelope
- Effects: Reverb, delay, chorus, distortion, EQ, compressor
- DSP: FFT, IFFT, filters (lowpass, highpass, bandpass), convolution
- MIDI: MIDI input/output, note parsing
💡 Examples
Synthesizer (ADSR Envelope)
içe_aktar audio, math
fonksiyon synthesizer_note(frekans: kesir, süre: kesir) -> AudioBuffer yap
değişken sample_rate = 44100
değişken num_samples = (sample_rate * süre).tamsayı()
// ADSR parameters
değişken attack = 0.05 // 50ms attack
değişken decay = 0.1 // 100ms decay
değişken sustain = 0.7 // 70% sustain level
değişken release = 0.2 // 200ms release
değişken buffer = audio.buffer_create(num_samples, 1)
her i içinde aralık(0, num_samples) için yap
değişken t = i.kesir() / sample_rate
// Oscillator
değişken sample = math.sin(2.0 * math.PI * frekans * t)
// ADSR envelope
değişken amplitude = 0.0
eğer t < attack ise yap
amplitude = t / attack
son değilse eğer t < (attack + decay) ise yap
değişken decay_t = (t - attack) / decay
amplitude = 1.0 - decay_t * (1.0 - sustain)
son değilse eğer t < (süre - release) ise yap
amplitude = sustain
son değilse yap
değişken release_t = (t - (süre - release)) / release
amplitude = sustain * (1.0 - release_t)
son
audio.buffer_set(buffer, i, sample * amplitude * 0.3)
son
dön buffer
son
// C major chord
değişken C4 = synthesizer_note(261.63, 2.0) // C
değişken E4 = synthesizer_note(329.63, 2.0) // E
değişken G4 = synthesizer_note(392.00, 2.0) // G
// Mix
değişken chord = audio.mix([C4, E4, G4])
audio.play(chord)
Real-time Audio Effects Processor
içe_aktar audio
// Effect chain
sınıf EffectChain yap
değişken effects: Dizi
fonksiyon yeni() yap
self.effects = []
son
fonksiyon ekle(effect: Effect) yap
self.effects.ekle(effect)
son
fonksiyon process(input: AudioBuffer) -> AudioBuffer yap
değişken output = input
her effect içinde self.effects için yap
output = effect.process(output)
son
dön output
son
son
// Reverb effect
sınıf Reverb yap
değişken decay: kesir
değişken delay_buffer: AudioBuffer
fonksiyon yeni(decay_factor: kesir) yap
self.decay = decay_factor
self.delay_buffer = audio.buffer_create(44100, 1) // 1 second buffer
son
fonksiyon process(input: AudioBuffer) -> AudioBuffer yap
değişken output = audio.buffer_create(input.uzunluk(), 1)
her i içinde aralık(0, input.uzunluk()) için yap
değişken sample = audio.buffer_get(input, i)
değişken delayed = audio.buffer_get(self.delay_buffer, i % self.delay_buffer.uzunluk())
değişken mixed = sample + delayed * self.decay
audio.buffer_set(output, i, mixed)
audio.buffer_set(self.delay_buffer, i % self.delay_buffer.uzunluk(), mixed)
son
dön output
son
son
// Effect chain setup
değişken chain = EffectChain.yeni()
chain.ekle(Reverb.yeni(0.5))
chain.ekle(audio.compressor_create(-20.0, 4.0)) // Threshold, ratio
// Real-time processing
değişken input = audio.input_open()
değişken output = audio.output_open(44100, 1)
döngü yap
değişken buffer = audio.input_read(input, 512)
değişken processed = chain.process(buffer)
audio.output_write(output, processed)
son