<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Hello Federico,<br>
<br>
Le 25/02/2019 à 01:06, Federico Miyara a écrit :<br>
</div>
<blockquote cite="mid:5C73318B.1010100@fceia.unr.edu.ar" type="cite">
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
<br>
Dear all,<br>
<br>
I'm reviewing the wavread function code which I could find (on
Windows 7) at the following path:<br>
<br>
<font face="Courier New, Courier, monospace">C:\Program
Files\scilab-6.0.2\modules\sound\macros\wavread.sci <br>
<br>
<font face="Courier New, Courier, monospace">There is a code
segment at the beginninig <font face="Courier New, Courier,
monospace">intended to detect if the wavfile has or not the
.wav extension:</font></font></font><span
style="color:rgb(160,32,240);"><br>
</span><span style="color:rgb(75,149,50);font-style:italic;"><br>
// Append .wav extension if necessary</span><span
style="color:rgb(160,32,240);"><br>
if</span> <span style="color:rgb(74,85,219);">(</span> <span
style="color:rgb(50,185,185);">strindex</span><span
style="color:rgb(74,85,219);">(</span><span
style="color:rgb(0,0,0);">wavfile</span><span
style="color:rgb(0,0,0);">,</span> <span
style="color:rgb(188,143,143);">"</span><span
style="color:rgb(188,143,143);">.</span><span
style="color:rgb(188,143,143);">"</span><span
style="color:rgb(74,85,219);">)</span> <span
style="color:rgb(92,92,92);">==</span> <span
style="color:rgb(74,85,219);">[</span><span
style="color:rgb(74,85,219);">]</span> <span
style="color:rgb(74,85,219);">)</span> <span
style="color:rgb(160,32,240);">then</span> <br>
<span style="color:rgb(0,0,0);">wavfile</span> <span
style="color:rgb(92,92,92);">=</span> <span
style="color:rgb(0,0,0);">wavfile</span> <span
style="color:rgb(92,92,92);">+</span> <span
style="color:rgb(188,143,143);">"</span><span
style="color:rgb(188,143,143);">.wav</span><span
style="color:rgb(188,143,143);">"</span><span
style="color:rgb(0,0,0);">;</span> <br>
<span style="color:rgb(160,32,240);">end</span><font face="Courier
New, Courier, monospace"><font face="Courier New, Courier,
monospace"><font face="Courier New, Courier, monospace"><br>
<br>
This contains a bug, since the wavfile name might contain a
dot different from the one bet<font face="Courier New,
Courier, monospace">ween the name and the extension. The
normal case would be<br>
<br>
<font face="Courier New, Courier, monospace">sound.wav<br>
<br>
<font face="Courier New, Courier, monospace">and in this
case the code works fine if the trailing .wav is
absent. Bu<font face="Courier New, Courier, monospace">t
<font face="Courier New, Courier, monospace">in a
case such as<br>
<br>
<font face="Courier New, Courier, monospace">sound_v1.1.wav<br>
<br>
the code will detect a dot within the
abbreviated name 'sound_v1.1' and will not
append the .wav extension, hence the function
will fail to find and open the file. <br>
<br>
<font face="Courier New, Courier, monospace">Fortunately
the issue is solved quite easily:<br>
</font></font></font></font></font></font></font></font></font></font><br>
<span style="color:rgb(75,149,50);font-style:italic;">// Append
.wav extension if necessary</span><span
style="color:rgb(160,32,240);"><br>
if</span> <span style="color:rgb(74,85,219);">(</span><span
style="color:rgb(92,92,92);"> ~</span><span
style="color:rgb(74,85,219);">(</span><span
style="color:rgb(50,185,185);">max</span><span
style="color:rgb(74,85,219);">(</span><span
style="color:rgb(50,185,185);">strindex</span><span
style="color:rgb(74,85,219);">(</span><span
style="color:rgb(0,0,0);">wavfile</span><span
style="color:rgb(0,0,0);">,</span><span
style="color:rgb(188,143,143);">'</span><span
style="color:rgb(188,143,143);">.wav</span><span
style="color:rgb(188,143,143);">'</span><span
style="color:rgb(74,85,219);">)</span><span
style="color:rgb(74,85,219);">)</span> <span
style="color:rgb(92,92,92);">==</span> <span
style="color:rgb(50,185,185);">length</span><span
style="color:rgb(74,85,219);">(</span><span
style="color:rgb(0,0,0);">wavfile</span><span
style="color:rgb(74,85,219);">)</span><span
style="color:rgb(92,92,92);">-</span><span
style="color:rgb(188,143,143);">3</span><span
style="color:rgb(74,85,219);">)</span><span
style="color:rgb(74,85,219);"></span> <span
style="color:rgb(74,85,219);">)</span> <span
style="color:rgb(160,32,240);">then</span> <br>
<span style="color:rgb(0,0,0);">wavfile</span> <span
style="color:rgb(92,92,92);">=</span> <span
style="color:rgb(0,0,0);">wavfile</span> <span
style="color:rgb(92,92,92);">+</span> <span
style="color:rgb(188,143,143);">'</span><span
style="color:rgb(188,143,143);">.wav'</span><span
style="color:rgb(188,143,143);"></span><span
style="color:rgb(0,0,0);">;</span> <br>
<span style="color:rgb(160,32,240);">end</span><font face="Courier
New, Courier, monospace"><font face="Courier New, Courier,
monospace"><font face="Courier New, Courier, monospace"><br>
</font></font></font></blockquote>
<br>
You are right. The current test is very fragile.<br>
The regular way would rather be<br>
<br>
<font size="-1"><tt>if fileparts(wavfile,"extension")<>"wav",</tt><tt><br>
</tt><tt> wavfile = wavfile+ ".wav"</tt><tt><br>
</tt><tt>end</tt></font><br>
<br>
Maybe fileparts() did not yet exist when the code was written.<br>
<br>
Please do not hesitate to open another bug report to gather all this
in a trackable place.<br>
<br>
Regards<br>
Samuel<br>
<br>
</body>
</html>