| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Implementation of TtsDataReceiver that resamples the audio to a |
| // different sample rate and then passes the resampled audio through |
| // to another callback. |
| |
| #ifndef SPEECH_CLIENT_SYNTHESIS_SERVICE_RESAMPLER_H_ |
| #define SPEECH_CLIENT_SYNTHESIS_SERVICE_RESAMPLER_H_ |
| |
| #include <stdint.h> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| |
| #include "tts_receiver.h" |
| |
| namespace speech_synthesis { |
| |
| class Resampler : public TtsDataReceiver { |
| public: |
| // Resamples the audio passed to this object's Receive method and passes |
| // the resampled audio through to the destination. |
| Resampler(TtsDataReceiver *destination, |
| int source_rate, |
| int dest_rate, |
| int buffer_size); |
| |
| virtual ~Resampler(); |
| |
| // TtsDataReceiver override. |
| virtual tts_callback_status Receive(int rate, |
| int num_channels, |
| const int16_t* data, |
| int num_samples, |
| tts_synth_status status) OVERRIDE; |
| |
| int source_rate() { return source_rate_; } |
| |
| int dest_rate() { return dest_rate_; } |
| |
| private: |
| TtsDataReceiver* destination_; |
| int source_rate_; |
| int dest_rate_; |
| double factor_; |
| int buffer_size_; |
| void* resample_handle_; |
| std::vector<float> in_floats_; |
| std::vector<float> out_floats_; |
| std::vector<int16_t> out_int16s_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Resampler); |
| }; |
| } // namespace speech_synthesis |
| |
| #endif // SPEECH_CLIENT_SYNTHESIS_SERVICE_RESAMPLER_H_ |