Mercurial > hg > may
changeset 11:ed031bfa8184
Working framer; handle end of stream correctly
author | Chris Cannam |
---|---|
date | Thu, 13 Dec 2012 13:52:41 +0000 |
parents | 149d6911ca12 |
children | 2afcb56f57b1 |
files | audiofile.yeti framer.yeti |
diffstat | 2 files changed, 22 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/audiofile.yeti Thu Dec 13 11:13:35 2012 +0000 +++ b/audiofile.yeti Thu Dec 13 13:52:41 2012 +0000 @@ -17,6 +17,9 @@ format = stream#getFormat(); { stream, format } ); +finished? { stream is ~AudioInputStream } = + not (stream#available() > 0); + close { stream is ~AudioInputStream } = stream#close(); @@ -67,10 +70,13 @@ bytesPerSample = format#getSampleSizeInBits() / 8; bytes = new byte[nframes * channels * bytesPerSample]; bytesRead = stream#read(bytes); - n = bytesRead / bytesPerSample; - doubles = new double[n]; - decode { format } bytes doubles n; - doubles; + if bytesRead <= 0 then new double[0]; + else + n = int(bytesRead / bytesPerSample); + doubles = new double[n]; + decode { format } bytes doubles n; + doubles; + fi; ); read { format is ~AudioFormat, stream is ~AudioInputStream } n = @@ -104,6 +110,7 @@ readAllInterleaved, readMono, readAllMono, + finished?, close }
--- a/framer.yeti Thu Dec 13 11:13:35 2012 +0000 +++ b/framer.yeti Thu Dec 13 13:52:41 2012 +0000 @@ -1,14 +1,19 @@ module framer; +vec = load fvector; af = load audiofile; +flist blocksize file = + if af.finished? file then + (af.close file; [] ); + else + af.readMono file blocksize :. \(flist blocksize file); + fi; +frames blocksize filename = flist blocksize (af.open filename); -retrieveFrame blocksize filename = - (f = af.open filename; \(af.read f blocksize)); +{ + frames +} - - -{ } -