# 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