{#
 SPDX-FileCopyrightText: Copyright 2021 Arm Limited and/or its affiliates <open-source-office@arm.com>
 SPDX-License-Identifier: Apache-2.0

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
#}
{{common_template_header}}

#ifndef GENERATED_AUDIOCLIPS_H
#define GENERATED_AUDIOCLIPS_H

#include <cstdint>
#include <stddef.h>

#define NUMBER_OF_FILES ({{clips_count}}U)

{% for var_name, size in varname_size %}
extern const int16_t {{var_name}}[{{size}}];
{% endfor %}

/**
 * @brief       Gets the filename for the baked-in input array
 * @param[in]   idx     Index of the input.
 * @return      const C string pointer to the name.
 **/
const char* GetFilename(const uint32_t idx);

/**
 * @brief       Gets the pointer to audio data.
 * @param[in]   idx     Index of the input.
 * @return      Pointer to 16-bit signed integer data.
 **/
const int16_t* GetAudioArray(const uint32_t idx);

/**
 * @brief       Gets the size of the input array.
 * @param[in]   idx     Index of the input.
 * @return      Size of the input array in bytes.
 **/
uint32_t GetAudioArraySize(const uint32_t idx);

#endif /* GENERATED_AUDIOCLIPS_H */
