Commit a678ab5f authored by Jan Kiene's avatar Jan Kiene
Browse files

add argument for skipping frame-wise diff

parent d6d6812b
Loading
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ def cut(x: np.ndarray, limits: Tuple[int, int]) -> np.ndarray:
    return y


def compare(ref: np.ndarray, test: np.ndarray, fs: int) -> dict:
def compare(ref: np.ndarray, test: np.ndarray, fs: int, per_frame: bool=True) -> dict:
    """Compare two audio arrays

    Parameters
@@ -246,12 +246,14 @@ def compare(ref: np.ndarray, test: np.ndarray, fs: int) -> dict:
        "max_abs_diff": 0,
        "max_abs_diff_pos_sample": 0,
        "max_abs_diff_pos_channel": 0,
        "max_abs_diff_pos_frame": 0,
        "nsamples_diff": 0,
        "nsamples_diff_percentage": 0.0,
        "nframes_diff": 0,
        "nframes_diff_percentage": 0.0,
    }
    if per_frame:
        result["max_abs_diff_pos_frame"] = 0
        result["nframes_diff"] = 0
        result["nframes_diff_percentage"] = 0.0

    if max_diff != 0:
        if diff.ndim == 1:
            nsamples_total = diff.shape
@@ -268,21 +270,25 @@ def compare(ref: np.ndarray, test: np.ndarray, fs: int) -> dict:
        nsamples_diff_percentage = nsamples_diff / (nsamples_total * nchannels) * 100.0
        nframes = nsamples_total // framesize
        nframes_diff = 0
        for fr in range(nframes):
            diff_fr = diff[fr * framesize : ((fr + 1) * framesize), :]
            nframes_diff += 1 if diff_fr.nonzero()[0].size > 0 else 0
        nframes_diff_percentage = nframes_diff / nframes * 100.0

        result = {
            "bitexact": False,
            "max_abs_diff": max_diff,
            "max_abs_diff_pos_sample": max_diff_pos[0],
            "max_abs_diff_pos_channel": max_diff_pos[2],
            "max_abs_diff_pos_frame": max_diff_pos[1],
            "nsamples_diff": nsamples_diff,
            "nsamples_diff_percentage": nsamples_diff_percentage,
            "nframes_diff": nframes_diff,
            "nframes_diff_percentage": nframes_diff_percentage,
        }

        if per_frame:
            for fr in range(nframes):
                diff_fr = diff[fr * framesize : ((fr + 1) * framesize), :]
                nframes_diff += 1 if diff_fr.nonzero()[0].size > 0 else 0
            nframes_diff_percentage = nframes_diff / nframes * 100.0
            result["max_abs_diff_pos_frame"] = max_diff_pos[1]
            result["nframes_diff"] = nframes_diff
            result["nframes_diff_percentage"] = nframes_diff_percentage

    return result


+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ def cmp_pcm(file1, file2, oc, fs) -> (int, str):
        )
        return 1, "FAIL: File lengths differ"

    cmp_result = pyaudio3dtools.audioarray.compare(s1, s2, fs)
    cmp_result = pyaudio3dtools.audioarray.compare(s1, s2, fs, per_frame=False)

    if cmp_result["bitexact"]:
        return 0, "SUCCESS: Files are bitexact"