# HG changeset patch # User Chris Cannam # Date 1355406761 0 # Node ID ed031bfa8184579eff8d46213772f1611df201c8 # Parent 149d6911ca12c352674a882e269a8493ed3092f1 Working framer; handle end of stream correctly diff -r 149d6911ca12 -r ed031bfa8184 audiofile.yeti --- 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 } diff -r 149d6911ca12 -r ed031bfa8184 framer.yeti --- 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 +} - - -{ } -