code: def VOICE(input_shape,
             conv_layers,
             dense_layers,
             output_layer=[1, 'sigmoid'],
             padding='same', 
             optimizer='adam',
             loss='binary_crossentropy'):
      
  
      inputs = Input(shape=input_shape)
      
      for i, c in enumerate(conv_layers):
          if i == 0:
              conv = Conv1D(c[0][0], c[0][1], padding=padding)(inputs)
          else:
              conv = Conv1D(c[0][0], c[0][1], padding=padding)(drop)
          bn = BatchNormalization()(conv)
          act = LeakyReLU(alpha=c[2])(bn)
          pool = MaxPooling1D(pool_size=c[1][0], strides=c[1][1], padding=padding)(act)
          drop = Dropout(c[3])(pool)
      
      drop = Flatten()(drop)
  
      for i, d in enumerate(dense_layers):
          dense = Dense(d[0], activation='relu')(drop)
          bn = BatchNormalization()(dense)
          act = LeakyReLU(alpha=d[1])(bn)
          drop = Dropout(d[2])(act)
      
      output = Dense(output_layer[0], activation=output_layer[1])(drop)
      
      model = Model(inputs=inputs, outputs=output)
      model.compile(loss=loss, optimizer=optimizer, metrics=['accuracy'])
      
      return model
docs: Conv1D CNN used primarily for voice data.
      
      Args:
          input_shape (tuple): The shape of the input layer
          targets (int): Number of targets
          conv_layers (list): Conv layer descriptor [[(filter, kernel), (pool_size, stride), leak, drop], ... []]
          dense_layers (TYPE): Dense layer descriptor [[fully_connected, leak, drop]]
          padding (str, optional): Type of padding for conv and pooling layers
          optimizer (str or object optional): Keras optimizer as string or keras optimizer
      
      Returns:
          TYPE: model, build_arguments