code: def test_concatenate_audioclips_CompositeAudioClip():
      """Concatenated AudioClips through ``concatenate_audioclips`` should return
      a CompositeAudioClip whose attributes should be consistent:
  
      - Returns CompositeAudioClip.
      - Their fps is taken from the maximum of their audios.
      - Audios are placed one after other:
        - Duration is the sum of their durations.
        - Ends are the accumulated sum of their durations.
        - Starts are the accumulated sum of their durations, but first start is 0
        and latest is ignored.
      - Channels are the max channels of their clips.
      """
      frequencies = [440, 880, 1760]
      durations = [2, 5, 1]
      fpss = [44100, 22050, 11025]
  
      clips = [
          AudioClip(
              lambda t: [np.sin(frequency * 2 * np.pi * t)],
              duration=duration,
              fps=fps,
          )
          for frequency, duration, fps in zip(
              frequencies, durations, fpss
          )
      ]
  
      concat_clip = concatenate_audioclips(clips)
  
      # should return a CompositeAudioClip
      assert isinstance(concat_clip, CompositeAudioClip)
  
      # fps of the greatest fps passed into it
      assert concat_clip.fps == 44100
  
      # audios placed on after other
      assert concat_clip.duration == sum(durations)
      assert list(concat_clip.ends) == list(np.cumsum(durations))
      assert list(concat_clip.starts), list(
          np.cumsum([0, *durations[:-1]])
      )
  
      # channels are maximum number of channels of the clips
      assert concat_clip.nchannels == max(
          clip.nchannels for clip in clips
      )
  
file_path: moviepy/tests/test_AudioClips.py
imports: import os
  import numpy
  import pytest
  from moviepy.audio.AudioClip import AudioArrayClip, AudioClip, CompositeAudioClip, concatenate_audioclips
  from moviepy.audio.io.AudioFileClip import AudioFileClip
label_desc: Use image node_id 4 for calling a global function with example usage: test_concatenate_audioclips_CompositeAudioClip() without return types