1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_AUDIO_SOUNDS_WAV_AUDIO_HANDLER_H_ 6 #define MEDIA_AUDIO_SOUNDS_WAV_AUDIO_HANDLER_H_ 7 8 #include "base/strings/string_piece.h" 9 #include "base/time/time.h" 10 #include "media/audio/audio_parameters.h" 11 #include "media/base/media_export.h" 12 13 namespace media { 14 15 class AudioBus; 16 17 // This class provides the input from wav file format. See 18 // https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ 19 class MEDIA_EXPORT WavAudioHandler { 20 public: 21 explicit WavAudioHandler(const base::StringPiece& wav_data); 22 virtual ~WavAudioHandler(); 23 24 // Returns true when cursor points to the end of the track. 25 bool AtEnd(size_t cursor) const; 26 27 // Copies the audio data to |bus| starting from the |cursor| and in 28 // the case of success stores the number of written bytes in 29 // |bytes_written|. |bytes_written| should not be NULL. 30 bool CopyTo(AudioBus* bus, size_t cursor, size_t* bytes_written) const; 31 params()32 const AudioParameters& params() const { return params_; } data()33 const base::StringPiece& data() const { return data_; } 34 35 private: 36 // Parses a chunk of wav format data. Returns the length of the chunk. 37 int ParseSubChunk(const base::StringPiece& data); 38 39 // Parses the 'fmt' section chunk and stores |params_|. 40 bool ParseFmtChunk(const base::StringPiece& data); 41 42 // Parses the 'data' section chunk and stores |data_|. 43 bool ParseDataChunk(const base::StringPiece& data); 44 45 // Data part of the |wav_data_|. 46 base::StringPiece data_; 47 48 AudioParameters params_; 49 50 uint16 num_channels_; 51 uint32 sample_rate_; 52 uint16 bits_per_sample_; 53 }; 54 55 } // namespace media 56 57 #endif // MEDIA_AUDIO_SOUNDS_WAV_AUDIO_HANDLER_H_ 58