From f9cb679215266442c13a5959a329ec838c1d1b8c Mon Sep 17 00:00:00 2001 From: Lars Immisch Date: Mon, 20 Nov 2023 12:43:25 +0100 Subject: [PATCH] Address feedback, add test. --- rem/aufile/aufile.c | 16 ++++++++-------- test/CMakeLists.txt | 1 + test/aulength.c | 36 ++++++++++++++++++++++++++++++++++++ test/data/beep.wav | Bin 0 -> 6156 bytes test/test.c | 1 + test/test.h | 1 + 6 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 test/aulength.c create mode 100644 test/data/beep.wav diff --git a/rem/aufile/aufile.c b/rem/aufile/aufile.c index 2064baf9b..13f2cd26b 100644 --- a/rem/aufile/aufile.c +++ b/rem/aufile/aufile.c @@ -260,18 +260,18 @@ size_t aufile_get_length(struct aufile *af, const struct aufile_prm *prm) switch (prm->fmt) { case AUFMT_PCMA: case AUFMT_PCMU: - return af->datasize / prm->channels * 1000 - / prm->srate; + return af->datasize * 1000 / + (prm->channels * prm->srate); case AUFMT_S16LE: - return af->datasize / 2 / prm->channels * 1000 - / prm->srate; + return af->datasize * 1000 / + (prm->channels * prm->srate * 2); case AUFMT_S24_3LE: - return af->datasize / 3 / prm->channels * 1000 - / prm->srate; + return af->datasize * 1000 / + (prm->channels * prm->srate * 3); case AUFMT_S32LE: case AUFMT_FLOAT: - return af->datasize / 4 / prm->channels * 1000 - / prm->srate; + return af->datasize * 1000 / + (prm->channels * prm->srate * 4); default: return 0; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c61cfbb96..9412ac2f5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -70,6 +70,7 @@ set(SRCS aes.c async.c aubuf.c + aulength.c aulevel.c auresamp.c av1.c diff --git a/test/aulength.c b/test/aulength.c new file mode 100644 index 000000000..9ab7891c9 --- /dev/null +++ b/test/aulength.c @@ -0,0 +1,36 @@ +/** + * @file src/aulength.c audio file duration test + * + * Copyright (C) 2023 Lars Immisch + */ + +#include +#include +#include "test.h" + + +#define DEBUG_MODULE "aulength" +#define DEBUG_LEVEL 5 +#include + + +int test_aulength(void) +{ + struct aufile *af; + struct aufile_prm prm; + char path[256]; + + re_snprintf(path, sizeof(path), "%s/beep.wav", test_datapath()); + + int err = aufile_open(&af, &prm, path, AUFILE_READ); + if (err) + return err; + + size_t length = aufile_get_length(af, &prm); + TEST_EQUALS(67, length); + +out: + mem_deref(af); + + return err; +} diff --git a/test/data/beep.wav b/test/data/beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..a148a48aef8380792d9e36af36f0e50bace99212 GIT binary patch literal 6156 zcmeHL4Nw&K6<_d_4~ZZmU=VLP6gXf%?mRedfkWg&sUA8?#kQtqZ*LDzxDW3Z4lqe= z>PM)p9n+3Xrj4nYq{$>{F||pIrq;%Y&7i;@A0nSY6p^5aLI_CN?%t;-($Z+BnGAcw z?4P&q{oZ@O_x^AHvzv0Vvw5Kake|LKORc5A0000y*xxEX0PK+ifF}?DsBj9$cmQyX z;R78^6wt&Vz%PNScwyhX38{bM%Uu<# z1z+c!!O+~OH$FJP+n;lwHky{@MtU6ilMno=w5e*($ek_oTbj-!DLx6x`9neYQ1;-d z{x8b%+HY$<+$}p9o%_C-r}>_@1+C9olk9cwgLfmACAOU{ycM?gnf}i{doQ7Ksp9lb zpC8J9+_pJw<;BIs9p*Plfb_mQ|grWMYEnkvX zlRsy_IKO*+XBCQiy;s9ud@KfNx_En`vLZoL51U0mLDyvUK(jx zHqn8M+>C7}g+F+Ts{6`MFZ_Lb&CM-H#l%sI_fl}#iH5$h14#Y=+V*mEoC20K zw==je6>gr~WocgWBA?%Mc61$b^mbfp`-*i7>+5s8-->^GxV9=jcg}tK*y3zK{pG#)24TN@;Vp**%NGNd>N$7f zimvf`vf~cU{VTn9QB`E@m2E?Rhc}M+UhV{ALSC`xJ&wi~^rm&oW4pY5N^e*QuBdE{ z9ISxf8J%bf<|9kiG!qU6z<(_N@(MlJ0=In?(p=B~FqF1@%xr-^y>YJVxbTEe0A1x@67{pTj9bUx{bQYt zwc+!^e%&xR5deqwS9k1;dDic0{nJnR#>hL)^rypV6XzQK7`8V2xkmZ;>+r#W?zYJ& zKmYc6gYO<8zbm8fW5|=KwG=Kf^A9!c9$kP04+gbrSG>Ovpg;0zj*aMUx$Xtkc`&qJ z$l-_!&8LSI$f==cTTVx=3CgE?d4ciLo?rBY#-HRR($zsRk=t7j4ewdXjANte9u>@5 zppID%TxWuSJB%MN!gvE?3=f!K<^YonI|KlR@nBb;_CHSQSaWyonFpuF>RE5>%-|*m zcX1Mj)OO##QL**tA^=E9D>dLmAxVKsvOuFt6%3yKn*h|PQU&=53RGdpAa`iimK({< z<+*u8c_ATF3DV@gDWzDc)}SRR94yrq=}cH@ssLB%l_bWlIWZytttwPusvwjG#%7NQQ|-m{<(jFM-^bU8NXRYHU+x zw%s55U#egSMHw&zF`Lb>c_pkj79b*-OopIhL@b6_4aiicqwrElXNt6eIB+sa6JgXC zD2-kRa=5rsUreP61e_!1Wlv0N$W%C8=}fRSO_7#Wlc0v-#5T0U)Fpn{GzGEc`aj|z6SNZlcpO+E9I3ddc{mlW za5jov>3%C%*j%h6iZq7DBOyn(p_uwVkYH;N_g&%$!&;aJHx1 zD5yl1SBRNJ%OQNQI*bQZczQNvTYjp)cJRG`MN&EkvjJK Jo0