105 lines
3.6 KiB
Julia
105 lines
3.6 KiB
Julia
# This file has runs the normal tests and also adds tests that can only be run
|
|
# locally on a machine with a sound card. It's mostly to put the library through
|
|
# its paces assuming a human is listening.
|
|
|
|
# include("runtests.jl")
|
|
using Compat
|
|
using PortAudio
|
|
using SampledSignals
|
|
using Test
|
|
using RingBuffers
|
|
|
|
# these default values are specific to my machines
|
|
if Compat.Sys.iswindows()
|
|
default_indev = "Microphone Array (Realtek High "
|
|
default_outdev = "Speaker/Headphone (Realtek High"
|
|
elseif Compat.Sys.isapple()
|
|
default_indev = "Built-in Microphone"
|
|
default_outdev = "Built-in Output"
|
|
elseif Compat.Sys.islinux()
|
|
default_indev = "default"
|
|
default_outdev = "default"
|
|
end
|
|
|
|
@testset "Local Tests" begin
|
|
# @testset "Open Default Device" begin
|
|
# println("Recording...")
|
|
# stream = PortAudioStream(2, 0)
|
|
# buf = read(stream, 5s)
|
|
# close(stream)
|
|
# @test size(buf) == (round(Int, 5 * samplerate(stream)), nchannels(stream.source))
|
|
# println("Playing back recording...")
|
|
# stream = PortAudioStream(0, 2)
|
|
# write(stream, buf)
|
|
# println("flushing...")
|
|
# flush(stream)
|
|
# close(stream)
|
|
# println("Testing pass-through")
|
|
# stream = PortAudioStream(2, 2)
|
|
# write(stream, stream, 5s)
|
|
# flush(stream)
|
|
# close(stream)
|
|
# println("done")
|
|
# end
|
|
# @testset "Samplerate-converting writing" begin
|
|
# stream = PortAudioStream(0, 2)
|
|
# write(stream, SinSource(eltype(stream), samplerate(stream)*0.8, [220, 330]), 3s)
|
|
# write(stream, SinSource(eltype(stream), samplerate(stream)*1.2, [220, 330]), 3s)
|
|
# flush(stream)
|
|
# close(stream)
|
|
# end
|
|
# @testset "Open Device by name" begin
|
|
# stream = PortAudioStream(default_indev, default_outdev)
|
|
# buf = read(stream, 0.001s)
|
|
# @test size(buf) == (round(Int, 0.001 * samplerate(stream)), nchannels(stream.source))
|
|
# write(stream, buf)
|
|
# io = IOBuffer()
|
|
# show(io, stream)
|
|
# @test Compat.occursin("""
|
|
# PortAudioStream{Float32}
|
|
# Samplerate: 44100.0Hz
|
|
# Buffer Size: 4096 frames
|
|
# 2 channel sink: "$default_outdev"
|
|
# 2 channel source: "$default_indev\"""", String(take!(io)))
|
|
# close(stream)
|
|
# end
|
|
# @testset "Error on wrong name" begin
|
|
# @test_throws ErrorException PortAudioStream("foobarbaz")
|
|
# end
|
|
# no way to check that the right data is actually getting read or written here,
|
|
# but at least it's not crashing.
|
|
@testset "Queued Writing" begin
|
|
stream = PortAudioStream(0, 2)
|
|
buf = SampleBuf(rand(eltype(stream), 4800, nchannels(stream.sink))*0.1, samplerate(stream))
|
|
io = IOBuffer()
|
|
t1 = @async begin
|
|
println(io, "t1 - before")
|
|
w = write(stream, buf)
|
|
println(io, "t1 - after")
|
|
w
|
|
end
|
|
t2 = @async begin
|
|
println(io, "t2 - before")
|
|
w = write(stream, buf)
|
|
println(io, "t2 - after")
|
|
w
|
|
end
|
|
@test fetch(t1) == 4800
|
|
@test fetch(t2) == 4800
|
|
seekstart(io)
|
|
print(read(io, String))
|
|
flush(stream)
|
|
close(stream)
|
|
@show t1.state
|
|
@show t2.state
|
|
end
|
|
# @testset "Queued Reading" begin
|
|
# stream = PortAudioStream(2, 0)
|
|
# buf = SampleBuf(rand(eltype(stream), 48000, nchannels(stream.source))*0.1, samplerate(stream))
|
|
# t1 = @async read!(stream, buf)
|
|
# t2 = @async read!(stream, buf)
|
|
# @test fetch(t1) == 48000
|
|
# @test fetch(t2) == 48000
|
|
# close(stream)
|
|
# end
|
|
end
|