Comments (8)
By the way: reading out the field subchunk2size
by using
header = read("test.wav", 46)
sum(header[41:44] .* (256.^(0:3)))
yields 32000
, which is wrong, since it should be 64000
. (Note: subchunk2size
equals number_samples * number_channels * bits_per_sample / 8
).
from wav.jl.
I just figured out that the value corresponding to the field chunksize
is correct; however, the value corresponding to subchunk2size
is wrong. My current workaround is as follows:
# Note: `number_samples` and `path_file` is given.
# Read header.
file_stream = open(path_file, "r+")
header = read(file_stream, 46)
# Find characters `data` to determine length (44-bytes or 46-bytes) of header.
# Hex-string below corresponds to the characters `data`.
range_matched_sequence = search(header, [0x64, 0x61, 0x74, 0x61])
if !isempty(range_matched_sequence)
indices_data_size = range_matched_sequence + 4;
if ==(maximum(indices_data_size), 46)
warn("File features 46-byte header.")
end
else
error("Invalid file header.")
end
# Get value that corresponds to field `blockalign`.
block_align = sum(header[33:34] .* (256.^(0:1)))
if ~isinteger(block_align)
error("Corrupted file: non-integer block align.")
end
# Update header.
header[indices_data_size] = reverse(hex2bytes(hex(number_samples*block_align, 8)))
# Overwrite file's header by updated header.
seekstart(file_stream)
write(file_stream, header)
close(file_stream)
This way I avoid reading and writing the whole file.
from wav.jl.
And by the way: Do you assume 44-byte and/or 46-byte header files?
from wav.jl.
I skimmed through the code and realized that wavappend
(or even the whole WAV-package) only supports 44-byte headers. (Please correct me if I'm wrong.) If this is the case, I would suggest that the package should either
- throw an error if it appends to a wave file that features a 46-byte header or
- converts the 46-byte header into a 44-byte header as follows:
# `header` is an array containing the first 46 bytes of the wave file
if ==(header[17], 0x12)
warning("Converting 46-byte header into 44-byte header.")
header[17] = 0x10
deleteat!(header, [37,38])
end
from wav.jl.
Hi, everyone. I've found and fixed the bug related to the aforementioned problem. Please go through my pull-request in order to figure out what I've changed.
from wav.jl.
Thanks @beyondvoid
Itβs been a while since I wrote the header code. Iβll take a look and get back to you.
from wav.jl.
Hi, @dancasimiro. Thanks for taking a look. If you are interested you can find detailed information on the header at http://soundfile.sapp.org/doc/WaveFormat/.
from wav.jl.
Fixed by pull request #61.
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
- Chunk padding not recognized HOT 3
- 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.