Skip to content

Commit 9b3e849

Browse files
committed
fix
1 parent 52a46fd commit 9b3e849

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

src/AudioSchedules.jl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ julia> push!(audio_schedule, Map(sin, Cycles(660Hz)), 2s, @envelope(
136136
))
137137
138138
julia> audio_schedule
139-
4.0 s^2 44100.0 Hz AudioSchedule
139+
4.0 s 44100.0 Hz AudioSchedule
140140
```
141141
142142
You can iterate over an `AudioSchedule`. Each element will just be a vector
@@ -165,17 +165,13 @@ julia> PortAudioStream(0, 1, warn_xruns = false) do stream
165165
julia> PortAudioStream(0, 2) do stream
166166
write(stream, audio_schedule)
167167
end
168-
ERROR: ArgumentError: PortAudioStream{Float32}
169-
Samplerate: 44100.0Hz
170-
2 channel sink: "default" does not have 1 output channel
168+
ERROR: ArgumentError: PortAudioStream does not have 1 output channel
171169
[...]
172170
173171
julia> PortAudioStream(0, 1, samplerate = 48000) do stream
174172
write(stream, audio_schedule)
175173
end
176-
ERROR: ArgumentError: Sample rates of PortAudioStream{Float32}
177-
Samplerate: 48000.0Hz
178-
1 channel sink: "default" and 4.0 s^2 44100.0 Hz AudioSchedule do not match
174+
ERROR: ArgumentError: Sample rates of PortAudioStream (48000.0) and AudioSchedule (44100.0) do not match
179175
[...]
180176
```
181177
@@ -251,14 +247,14 @@ julia> push!(audio_schedule, Map(sin, Cycles(440Hz)), 0s, @envelope(
251247
))
252248
253249
julia> duration(audio_schedule)
254-
2.0 s^2
250+
2.0 s
255251
```
256252
"""
257253
function duration(audio_schedule::AudioSchedule)
258254
triggers = audio_schedule.triggers
259255
if length(triggers) > 0
260256
# time from first instrument turned on to last turned off
261-
(last(triggers)[1] - first(triggers)[1])s
257+
last(triggers)[1] - first(triggers)[1]
262258
else
263259
# zero for an empty schedule
264260
0.0s
@@ -320,7 +316,7 @@ For example, `@envelope(0, Line => 1s, 1, Line => 1s, 0)` will create an envelop
320316
julia> using AudioSchedules
321317
322318
julia> @envelope(0, Line => 1s, 1, Line => 1s, 0)
323-
(Line(0.0, 1.0 s^-1) => 1.0 s, Line(1.0, -1.0 s^-1) => 1.0 s)
319+
(Line(0.0, 1.0 s⁻¹) => 1.0 s, Line(1.0, -1.0 s⁻¹) => 1.0 s)
324320
325321
julia> @envelope(1, 2, 3)
326322
ERROR: LoadError: ArgumentError: 2 is not a pair
@@ -419,7 +415,8 @@ function trigger_iterate(
419415
activated = audio_schedule.activated
420416
triggers = audio_schedule.triggers
421417
# pull the rest of the triggers at the current time
422-
while schedule_time == trigger_time
418+
# that is, all triggers less than 1 sample away
419+
while trigger_time - schedule_time < 1 / sample_rate
423420
activated[instrument_index] = !activated[instrument_index]
424421
iteration = iterate(triggers, trigger_state)
425422
if iteration === nothing
@@ -488,10 +485,10 @@ function write(
488485
)
489486
sink_messenger = stream.sink_messenger
490487
if nchannels(sink_messenger) != 1
491-
throw(ArgumentError("$stream does not have 1 output channel"))
488+
throw(ArgumentError("PortAudioStream does not have 1 output channel"))
492489
end
493490
if samplerate(stream) != samplerate(audio_schedule)
494-
throw(ArgumentError("Sample rates of $stream and $audio_schedule do not match"))
491+
throw(ArgumentError("Sample rates of PortAudioStream ($(samplerate(stream))) and AudioSchedule ($(samplerate(audio_schedule))) do not match"))
495492
end
496493
buffer = sink_messenger.buffer
497494
buffer_at = 0

0 commit comments

Comments
 (0)