Spaces:
Running
Running
/* | |
Copyright 2015 Google Inc. All rights reserved. | |
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. | |
*/ | |
class FileResource; | |
template <class CodecImplementation> | |
class CodecApi { | |
public: | |
CodecApi() { } | |
~CodecApi() { } | |
// Loads audio samples from a file-resource. It sets the internal header | |
// parameters. | |
bool Load(FileResource *fr, std::vector<int16_t> *samples); | |
// Loads audio samples from a file. It sets the internal header parameters. | |
template <class FileResourceType> | |
bool Load(const std::string &filename, std::vector<int16_t> *samples); | |
// Saves audio samples to a file-resource using the internal header | |
// parameters. | |
bool Save(const std::vector<int16_t> &samples, FileResource *fr) const; | |
// Saves audio samples to a file, using the internal header parameters. | |
template <class FileResourceType> | |
bool Save(const std::vector<int16_t> &samples, const std::string &filename) const; | |
// Sets generic header information. | |
bool SetHeaderInfo(int sampling_rate, int num_samples_per_channel); | |
// Gets generic header information. | |
bool GetHeaderInfo(int *sampling_rate, int *num_samples_per_channel); | |
// Reads wave header from file-resource. | |
bool ReadHeader(FileResource *fr); | |
// Reads the audio data from the FileResource, under the condition that the | |
// current position of the FileResource always points to the beginning of the | |
// audio-container. The latter condition is preserved by this function. When | |
// a codec with internal-state is used (i.e. iSAC), the internal state is kept | |
// between sequential reads. The codec is reset prior non-sequential reads. | |
// By definition, the codecs DO NOT check whether you are trying to read | |
// beyond the boundaries of the audio-data container, so, be careful. | |
bool ReadAudioData(int wave_start, int num_samples, | |
std::vector<int16_t> *samples, FileResource *fr); | |
// Reads all audio data contained in the audio container held at the current | |
// position of the FileResource. The functions assumes and preserves the | |
// condition that the current position of the FileResource always points to | |
// the beginning of the audio container. | |
bool ReadAudioContainer(int container_size_in_bytes, | |
std::vector<int16_t> *samples, | |
FileResource *fr); | |
int get_num_samples_per_channel() const; | |
int get_sampling_rate() const; | |
bool set_num_samples_per_channel(int value); | |
bool set_sampling_rate(int value); | |
// Initializes the codec for the particular coding type | |
bool Initialize(WaveCodingType coding_type); | |
private: | |
int num_samples_per_channel_; | |
int sampling_rate_; | |
CodecImplementation codec_; | |
}; | |