code: def test_ir_convolution(ir_files, jam_fixture, n_fft, rolloff_value):
      D = muda.deformers.IRConvolution(
          ir_files=ir_files, n_fft=n_fft, rolloff_value=rolloff_value
      )
  
      jam_orig = deepcopy(jam_fixture)
      orig_duration = librosa.get_duration(
          **jam_orig.sandbox.muda["_audio"]
      )
  
      for jam_new in D.transform(jam_orig):
          # Verify that the original jam reference hasn't changed
          assert jam_new is not jam_orig
  
          # Testing with shifted impulse
          __test_shifted_impulse(
              jam_orig,
              jam_new,
              ir_files,
              orig_duration,
              n_fft=n_fft,
              rolloff_value=rolloff_value,
          )
  
          # Verify that the state and history objects are intact
          __test_deformer_history(D, jam_new.sandbox.muda.history[-1])
  
      # Serialization test
      D2 = muda.deserialize(muda.serialize(D))
      __test_params(D, D2)
  
imports: from copy import deepcopy
  import re
  import six
  import numpy
  import soundfile
  import jams
  import librosa
  import muda
  import pytest
  import scipy
  from contextlib import contextmanager
label_desc: Use image node_id 38 for calling a global function with example usage: test_ir_convolution(ir_files, jam_fixture, n_fft, rolloff_value) without return types