Comments (3)
I've fixed the issue, and while I was at it I've also fixed the restriction of the format and data chunk order. I cannot be bothered to fork and make a pull request, so here's my new version of wavread in WAV.jl:
function wavread(io::IO; subrange=(:), format="double")
chunk_size = read_header(io)
samples = Array{Float64, 1}()
nbits = 0
sample_rate = Float32(0.0)
opt = WAVChunk[]
# Subtract the size of the format field from chunk_size; now it holds the size
# of all the sub-chunks
chunk_size -= 4
# GitHub Issue #18: Check if there is enough data to read another chunk
subchunk_header_size = 4 + sizeof(UInt32)
fmt = WAVFormat()
data_position = 0
data_size = 0
while chunk_size >= subchunk_header_size
# Read subchunk ID and size
subchunk_id = Vector{UInt8}(undef, 4)
read!(io, subchunk_id)
subchunk_size = read_le(io, UInt32)
nextchunk_start = position(io) + subchunk_size
if subchunk_size > chunk_size
chunk_size = 0
break
end
chunk_size -= subchunk_header_size + subchunk_size
# check the subchunk ID
if subchunk_id == b"fmt "
fmt = read_format(io, subchunk_size)
sample_rate = Float32(fmt.sample_rate)
nbits = bits_per_sample(fmt)
push!(opt, WAVChunk(fmt))
elseif subchunk_id == b"data"
data_position = position(io)
data_size = subchunk_size
else
subchunk_data = Vector{UInt8}(undef, subchunk_size)
read!(io, subchunk_data)
push!(opt, WAVChunk(Symbol(subchunk_id), subchunk_data))
end
seek(io, nextchunk_start)
end
if data_size > 0 && data_position > 0
seek(io, data_position)
if format == "size"
return convert(Int, data_size / fmt.block_align), convert(Int, fmt.nchannels)
end
samples = read_data(io, data_size, fmt, format, make_range(subrange))
end
return samples, sample_rate, nbits, opt
end
from wav.jl.
A slightly fixed version of that fix is now PR #91.
from wav.jl.
Fixed by #91
from wav.jl.
Related Issues (20)
- Caption for WAV display HOT 3
- Extra \0 bytes in RIFF INFO tags causes wav_info_read() to raise ArgumentError HOT 2
- Buggy interaction with Gtk.jl HOT 2
- wavread needs a "float" data type
- WAV.jl not reading wav files with incorrect file size in header HOT 3
- 256x smaller values using "native" format HOT 5
- wavrecord and simultaneous play and record HOT 7
- Support Julia v0.7? HOT 9
- Artifacts in sound played by wavplay HOT 8
- Playing with @async is blocking HOT 7
- wavplay example not working on Linux HOT 16
- wavread with subrange of step >1 gives wrong result HOT 4
- Add some support for reading from pipe HOT 2
- `wavplay(y, fs)` does not work HOT 11
- TagBot trigger issue HOT 3
- Slower loading because of GC issue
- Affiliate this package with JuliaAudio HOT 4
- Read operations do not start at the start of the file
- wavread cannot access a sample number 59614786 or higher HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wav.jl.