Class: RubyDSP::AudioTrack
- Inherits:
-
Object
- Object
- RubyDSP::AudioTrack
- Defined in:
- lib/ruby_dsp.rb,
stubs/ruby_dsp/audio_track.rb
Overview
A high-performance audio track processor backed by miniaudio.
Instance Attribute Summary collapse
-
#channels ⇒ Integer
readonly
The number of audio channels.
-
#file_name ⇒ String
readonly
The path to the loaded audio file.
-
#is_mono? ⇒ Boolean
readonly
True if the track has exactly 1 channel.
-
#sample_count ⇒ Integer
readonly
Number of samples in
samples. -
#sample_rate ⇒ Integer
readonly
The sample rate of the track in Hz.
-
#samples ⇒ Array<Float>
readonly
Vector of samples from the audio file.
Instance Method Summary collapse
-
#add_wave!(wave_type, frequency, duration_sec, start_sec = -1.0,, amplitude = 1.0) ⇒ AudioTrack
Generates and mixes a mathematical waveform into the track.
-
#duration ⇒ Float
Calculates the total duration of the track.
-
#fade_in!(duration_sec) ⇒ AudioTrack
Applies a linear fade-in to the beginning of the audio track.
-
#fade_out!(duration_sec) ⇒ AudioTrack
Applies a linear fade-out to the end of the audio track.
-
#framed_rms(frame_length = 2048, hop_length = 512) ⇒ Array<Array<Float>>
Calculates the framed Root Mean Square (RMS) over time.
-
#framed_zcr(frame_length = 2048, hop_length = 512) ⇒ Array<Array<Float>>
Calculates the framed Zero Crossing Rate (ZCR) over time.
-
#initialize(file_name = '', target_channels = 0, target_sample_rate = 0) ⇒ AudioTrack
constructor
Initializes a new AudioTrack.
-
#normalize!(target_db = -10.0)) ⇒ AudioTrack
Normalizes the audio track to a specific peak decibel level.
-
#pad!(head_sec = 0.0, tail_sec = 0.0) ⇒ AudioTrack
Pads the audio track with digital silence (0.0) at the beginning and/or end.
-
#pad_to_duration!(target_duration_sec) ⇒ AudioTrack
Pads the audio track with digital silence so that it reaches an exact target duration.
-
#peak_amp ⇒ Float
Finds the maximum absolute amplitude across all channels.
-
#resample!(target_rate = 0) ⇒ AudioTrack
Destructively resamples the track to the target rate using linear resampling.
-
#rms ⇒ Array<Float>
Calculates the Root Mean Square (RMS) for the entire track, per channel.
-
#save_track(out_file, format = :auto) ⇒ Boolean
Saves the audio track to disk.
-
#silence_bounds(threshold_db = -60.0,, frame_length = 2048, hop_length = 512) ⇒ Array<Integer>
Finds the start and end sample indices of non-silent audio.
-
#to_mono! ⇒ AudioTrack
Destructively converts the track to mono by averaging the channels.
-
#to_s ⇒ String
A formatted summary of the track.
-
#trim_silence!(threshold_db = -60.0,, frame_length = 2048, hop_length = 512) ⇒ AudioTrack
Destructively trims leading and trailing silence from the track's internal sample array.
-
#zcr ⇒ Array<Float>
Calculates the Zero Crossing Rate (ZCR) for the entire track, per channel.
Constructor Details
#initialize(file_name = '', target_channels = 0, target_sample_rate = 0) ⇒ AudioTrack
Initializes a new AudioTrack.
Decodes the given file using miniaudio. If file_name is an empty string "",
it initializes an empty, blank audio canvas for synthesis and sequencing.
33 34 |
# File 'stubs/ruby_dsp/audio_track.rb', line 33 def initialize(file_name = '', target_channels = 0, target_sample_rate = 0) end |
Instance Attribute Details
#channels ⇒ Integer (readonly)
Returns the number of audio channels.
10 11 12 |
# File 'stubs/ruby_dsp/audio_track.rb', line 10 def channels @channels end |
#file_name ⇒ String (readonly)
Returns the path to the loaded audio file.
7 8 9 |
# File 'stubs/ruby_dsp/audio_track.rb', line 7 def file_name @file_name end |
#is_mono? ⇒ Boolean (readonly)
Returns true if the track has exactly 1 channel.
16 17 18 |
# File 'stubs/ruby_dsp/audio_track.rb', line 16
def is_mono?
@is_mono?
end
|
#sample_count ⇒ Integer (readonly)
Returns number of samples in samples.
22 23 24 |
# File 'stubs/ruby_dsp/audio_track.rb', line 22 def sample_count @sample_count end |
#sample_rate ⇒ Integer (readonly)
Returns the sample rate of the track in Hz.
13 14 15 |
# File 'stubs/ruby_dsp/audio_track.rb', line 13 def sample_rate @sample_rate end |
#samples ⇒ Array<Float> (readonly)
Returns vector of samples from the audio file.
19 20 21 |
# File 'stubs/ruby_dsp/audio_track.rb', line 19 def samples @samples end |
Instance Method Details
#add_wave!(wave_type, frequency, duration_sec, start_sec = -1.0,, amplitude = 1.0) ⇒ AudioTrack
Generates and mixes a mathematical waveform into the track.
Dynamically resizes the track if the wave extends past the current duration. If a wave overlaps with existing audio data, it is mixed (added) together, allowing for polyphony.
179 180 |
# File 'stubs/ruby_dsp/audio_track.rb', line 179 def add_wave!(wave_type, frequency, duration_sec, start_sec = -1.0, amplitude = 1.0) end |
#duration ⇒ Float
Calculates the total duration of the track.
63 64 |
# File 'stubs/ruby_dsp/audio_track.rb', line 63 def duration end |
#fade_in!(duration_sec) ⇒ AudioTrack
Applies a linear fade-in to the beginning of the audio track.
145 146 |
# File 'stubs/ruby_dsp/audio_track.rb', line 145 def fade_in!(duration_sec) end |
#fade_out!(duration_sec) ⇒ AudioTrack
Applies a linear fade-out to the end of the audio track.
151 152 |
# File 'stubs/ruby_dsp/audio_track.rb', line 151 def fade_out!(duration_sec) end |
#framed_rms(frame_length = 2048, hop_length = 512) ⇒ Array<Array<Float>>
Calculates the framed Root Mean Square (RMS) over time.
98 99 |
# File 'stubs/ruby_dsp/audio_track.rb', line 98 def framed_rms(frame_length = 2048, hop_length = 512) end |
#framed_zcr(frame_length = 2048, hop_length = 512) ⇒ Array<Array<Float>>
Calculates the framed Zero Crossing Rate (ZCR) over time.
112 113 |
# File 'stubs/ruby_dsp/audio_track.rb', line 112 def framed_zcr(frame_length = 2048, hop_length = 512) end |
#normalize!(target_db = -10.0)) ⇒ AudioTrack
Normalizes the audio track to a specific peak decibel level.
139 140 |
# File 'stubs/ruby_dsp/audio_track.rb', line 139 def normalize!(target_db = -10.0) end |
#pad!(head_sec = 0.0, tail_sec = 0.0) ⇒ AudioTrack
Pads the audio track with digital silence (0.0) at the beginning and/or end.
158 159 |
# File 'stubs/ruby_dsp/audio_track.rb', line 158 def pad!(head_sec = 0.0, tail_sec = 0.0) end |
#pad_to_duration!(target_duration_sec) ⇒ AudioTrack
Pads the audio track with digital silence so that it reaches an exact target duration. The padding is distributed evenly to both the head and the tail, effectively centering the audio.
165 166 |
# File 'stubs/ruby_dsp/audio_track.rb', line 165 def pad_to_duration!(target_duration_sec) end |
#peak_amp ⇒ Float
Finds the maximum absolute amplitude across all channels.
69 70 |
# File 'stubs/ruby_dsp/audio_track.rb', line 69 def peak_amp end |
#resample!(target_rate = 0) ⇒ AudioTrack
Destructively resamples the track to the target rate using linear resampling.
84 85 |
# File 'stubs/ruby_dsp/audio_track.rb', line 84 def resample!(target_rate = 0) end |
#rms ⇒ Array<Float>
Calculates the Root Mean Square (RMS) for the entire track, per channel.
90 91 |
# File 'stubs/ruby_dsp/audio_track.rb', line 90 def rms end |
#save_track(out_file, format = :auto) ⇒ Boolean
Saves the audio track to disk.
The format can be inferred from the out_file extension, or explicitly forced
via the format argument. If no extension or format is provided, it defaults
to saving as a WAV file and will append the .wav extension automatically.
Note: Currently, only the WAV format (:wav) is supported for encoding.
57 58 |
# File 'stubs/ruby_dsp/audio_track.rb', line 57 def save_track(out_file, format = :auto) end |
#silence_bounds(threshold_db = -60.0,, frame_length = 2048, hop_length = 512) ⇒ Array<Integer>
Finds the start and end sample indices of non-silent audio.
This scans the track's framed RMS energy and compares it against the global peak. Any frame that falls below the top_db threshold relative to the peak is considered silent.
124 125 |
# File 'stubs/ruby_dsp/audio_track.rb', line 124 def silence_bounds(threshold_db = -60.0, frame_length = 2048, hop_length = 512) end |
#to_mono! ⇒ AudioTrack
Destructively converts the track to mono by averaging the channels.
76 77 |
# File 'stubs/ruby_dsp/audio_track.rb', line 76 def to_mono! end |
#to_s ⇒ String
Returns a formatted summary of the track.
183 184 |
# File 'stubs/ruby_dsp/audio_track.rb', line 183 def to_s end |
#trim_silence!(threshold_db = -60.0,, frame_length = 2048, hop_length = 512) ⇒ AudioTrack
Destructively trims leading and trailing silence from the track's internal sample array.
133 134 |
# File 'stubs/ruby_dsp/audio_track.rb', line 133 def trim_silence!(threshold_db = -60.0, frame_length = 2048, hop_length = 512) end |
#zcr ⇒ Array<Float>
Calculates the Zero Crossing Rate (ZCR) for the entire track, per channel.
104 105 |
# File 'stubs/ruby_dsp/audio_track.rb', line 104 def zcr end |