Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dr_wav: Distortion on output after seeking #264

Open
bjorn-nesby opened this issue Mar 1, 2024 · 0 comments
Open

dr_wav: Distortion on output after seeking #264

bjorn-nesby opened this issue Mar 1, 2024 · 0 comments

Comments

@bjorn-nesby
Copy link

It's possible for the dr_wav decoder to output distorted audio for certain files.

The problem is reproduced by downloading these test files, and compiling this program (a simple miniaudio player) to play them back.

The program will ask you to input a file, after which it will start playing the file. Once you press return, it will then seek forward half the total number of frames (you should hear nasty distorted audio as a result, so watch out!!).

I found that the distortion occurs only when the program has played back a bit of the audio, and then perform a seek in the forward direction. In order words, if the program was to start playback from halfway inside the file, the problem doesn't manifest itself.
Also, the seek needs to be of a certain size (relative to the playback position) before the distortion will happen.

I've noticed that the problem affects both .aif and .wav files, but only seems to occur with 24-bit audio.

In case it's useful, I also captured 40-something bytes from the output buffer (see below), with GOOD being the correct output (captured immediately after a seek without playing audio beforehand), and BAD being the distorted output (captured immediately after a seek, but having played back some audio first).

  1. BAD is offset by 10 bytes (for better overview, I've aligned the values in the capture below). Assuming that each sample in the audio signal consist of 6-bytes (true for 24-bit audio), this could explain the distortion.
  2. Additionally, BAD contains a different value for every fourth byte.
BAD     GOOD
-----------------------

-       152
-       213
-       1
-       2
-       78
-       1
-       142
-       32
-       242
-       53
179     179
254     254
142     9       -
23      23
230     230
53      231     -
181     181
252     252
9       71      -
185     185
222     222
231     163     -
178     178
252     252
71      133     -
110     110
220     220
163     151     -
100     100
255     255
133     98      -
253     253
222     222    
151     240     -    
120     120    
4       4  
98      140     -   
179     179    
230     230    
240     45      -    
57      57   
11      11   
140     149     -
1       1  
244     244    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant