PortAudio.jl/test/runtests_local.jl
2018-08-19 19:14:46 -04:00

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