82 lines
2.5 KiB
Julia
82 lines
2.5 KiB
Julia
module TestSndfile
|
|
|
|
include("testhelpers.jl")
|
|
|
|
using AudioIO
|
|
using FactCheck
|
|
import AudioIO: DeviceInfo, render, AudioSample, AudioBuf
|
|
|
|
facts("WAV file write/read") do
|
|
fname = Pkg.dir("AudioIO", "test", "sinwave.wav")
|
|
|
|
samplerate = 44100
|
|
freq = 440
|
|
t = [0 : 2 * samplerate - 1] / samplerate
|
|
phase = 2 * pi * freq * t
|
|
reference = int16((2 ^ 15 - 1) * sin(phase))
|
|
|
|
AudioIO.open(fname, "w") do f
|
|
write(f, reference)
|
|
end
|
|
|
|
# test basic reading
|
|
AudioIO.open(fname) do f
|
|
@fact f.sfinfo.channels => 1
|
|
@fact f.sfinfo.frames => 2 * samplerate
|
|
actual = read(f)
|
|
@fact length(reference) => length(actual)
|
|
@fact reference => actual[:, 1]
|
|
end
|
|
|
|
# test seeking
|
|
|
|
# test rendering as an AudioNode
|
|
AudioIO.open(fname) do f
|
|
# pretend we have a stream at the same rate as the file
|
|
bufsize = 1024
|
|
input = zeros(AudioSample, bufsize)
|
|
test_info = DeviceInfo(samplerate, bufsize)
|
|
node = FilePlayer(f)
|
|
# convert to floating point because that's what AudioIO uses natively
|
|
expected = convert(AudioBuf, reference ./ (2^15))
|
|
buf = render(node, input, test_info)
|
|
@fact expected[1:bufsize] => buf[1:bufsize]
|
|
buf = render(node, input, test_info)
|
|
@fact expected[bufsize+1:2*bufsize] => buf[1:bufsize]
|
|
end
|
|
end
|
|
|
|
facts("Stereo file reading") do
|
|
fname = Pkg.dir("AudioIO", "test", "440left_880right.wav")
|
|
samplerate = 44100
|
|
t = [0 : 2 * samplerate - 1] / samplerate
|
|
expected = int16((2^15-1) * hcat(sin(2pi*t*440), sin(2pi*t*880)))
|
|
|
|
AudioIO.open(fname) do f
|
|
buf = read(f)
|
|
@fact buf => mse(expected, 5)
|
|
end
|
|
end
|
|
|
|
# note - currently AudioIO just mixes down to Mono. soon we'll support this
|
|
# new-fangled stereo sound stuff
|
|
#facts("Stereo file rendering") do
|
|
# fname = Pkg.dir("AudioIO", "test", "440left_880right.wav")
|
|
# samplerate = 44100
|
|
# bufsize = 1024
|
|
# input = zeros(AudioSample, bufsize)
|
|
# test_info = DeviceInfo(samplerate, bufsize)
|
|
# t = [0 : 2 * samplerate - 1] / samplerate
|
|
# expected = convert(AudioBuf, 0.5 * (sin(2pi*t*440) + sin(2pi*t*880)))
|
|
#
|
|
# AudioIO.open(fname) do f
|
|
# node = FilePlayer(f)
|
|
# buf = render(node, input, test_info)
|
|
# print(size(buf))
|
|
# @fact expected[1:bufsize] => buf[1:bufsize]
|
|
# buf = render(node, input, test_info)
|
|
# @fact expected[bufsize+1:2*bufsize] => buf[1:bufsize]
|
|
# end
|
|
#end
|
|
|
|
end # module TestSndfile
|