class_docstr: Base class for audio clips.
  
  See ``AudioFileClip`` and ``CompositeAudioClip`` for usable classes.
  
  An AudioClip is a Clip with a ``make_frame``  attribute of
  the form `` t -> [ f_t ]`` for mono sound and
  ``t-> [ f1_t, f2_t ]`` for stereo sound (the arrays are Numpy arrays).
  The `f_t` are floats between -1 and 1. These bounds can be
  trespassed without problems (the program will put the
  sound back into the bounds at conversion time, without much impact).
  
  Parameters
  ----------
  
  make_frame
    A function `t-> frame at time t`. The frame does not mean much
    for a sound, it is just a float. What 'makes' the sound are
    the variations of that float in the time.
  
  duration
    Duration of the clip (in seconds). Some clips are infinite, in
    this case their duration will be ``None``.
  
  nchannels
    Number of channels (one or two for mono or stereo).
  
  Examples
  --------
  
  >>> # Plays the note A in mono (a sine wave of frequency 440 Hz)
  >>> import numpy as np
  >>> make_frame = lambda t: np.sin(440 * 2 * np.pi * t)
  >>> clip = AudioClip(make_frame, duration=5, fps=44100)
  >>> clip.preview()
  
  >>> # Plays the note A in stereo (two sine waves of frequencies 440 and 880 Hz)
  >>> make_frame = lambda t: np.array([
  ...     np.sin(440 * 2 * np.pi * t),
  ...     np.sin(880 * 2 * np.pi * t)
  ... ]).T.copy(order="C")
  >>> clip = AudioClip(make_frame, duration=3, fps=44100)
  >>> clip.preview()
class_docstr_tok: ["Base","class","for","audio","clips",".","See","``","AudioFileClip","``","and","``","CompositeAudioClip","``","for","usable","classes",".","An","AudioClip","is","a","Clip","with","a","``","make_frame","``","attribute","of","the","form","``","t","-",">","[","f_t","]","``","for","mono","sound","and","``","t-",">","[","f1_t",",","f2_t","]","``","for","stereo","sound","(","the","arrays","are","Numpy","arrays",")",".","The","`","f_t","`","are","floats","between","-1","and","1",".","These","bounds","can","be","trespassed","without","problems","(","the","program","will","put","the","sound","back","into","the","bounds","at","conversion","time",",","without","much","impact",")",".","Parameters","--","--","--","--","--","make_frame","A","function","`","t-",">","frame","at","time","t","`",".","The","frame","does","not","mean","much","for","a","sound",",","it","is","just","a","float",".","What","'makes","'","the","sound","are","the","variations","of","that","float","in","the","time",".","duration","Duration","of","the","clip","(","in","seconds",")",".","Some","clips","are","infinite",",","in","this","case","their","duration","will","be","``","None","``",".","nchannels","Number","of","channels","(","one","or","two","for","mono","or","stereo",")",".","Examples","--","--","--","--",">",">",">","#","Plays","the","note","A","in","mono","(","a","sine","wave","of","frequency","440","Hz",")",">",">",">","import","numpy","as","np",">",">",">","make_frame","=","lambda","t",":","np.sin","(","440","*","2","*","np.pi","*","t",")",">",">",">","clip","=","AudioClip","(","make_frame",",","duration=5",",","fps=44100",")",">",">",">","clip.preview","(",")",">",">",">","#","Plays","the","note","A","in","stereo","(","two","sine","waves","of","frequencies","440","and","880","Hz",")",">",">",">","make_frame","=","lambda","t",":","np.array","(","[","...","np.sin","(","440","*","2","*","np.pi","*","t",")",",","...","np.sin","(","880","*","2","*","np.pi","*","t",")","...","]",")",".T.copy","(","order=","''","C","''",")",">",">",">","clip","=","AudioClip","(","make_frame",",","duration=3",",","fps=44100",")",">",">",">","clip.preview","(",")"]
code: def __add__(self, other):
      if isinstance(other, AudioClip):
          return concatenate_audioclips([self, other])
      return super(AudioClip, self).__add__(other)
  
imports: import numbers
  import os
  import numpy
  import proglog
  from moviepy.audio.io.ffmpeg_audiowriter import ffmpeg_audiowrite
  from moviepy.Clip import Clip
  from moviepy.decorators import convert_path_to_string, requires_duration
  from moviepy.tools import extensions_dict
label_desc: Use image node_id 6 for calling the AudioClip obj's underlying member method code with example usage: obj.__add__(other) and returns: super, concatenate_audioclips