You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
| 
											10 years ago
										 | /*
 | ||
|  |  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | ||
|  |  * | ||
|  |  *  Use of this source code is governed by a BSD-style license | ||
|  |  *  that can be found in the LICENSE file in the root of the source | ||
|  |  *  tree. An additional intellectual property rights grant can be found | ||
|  |  *  in the file PATENTS.  All contributing project authors may | ||
|  |  *  be found in the AUTHORS file in the root of the source tree. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef WEBRTC_COMMON_AUDIO_WAV_WRITER_H_
 | ||
|  | #define WEBRTC_COMMON_AUDIO_WAV_WRITER_H_
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | 
 | ||
|  | #include <stdint.h>
 | ||
|  | #include <cstddef>
 | ||
|  | #include <string>
 | ||
|  | 
 | ||
|  | namespace webrtc { | ||
|  | 
 | ||
|  | // Simple C++ class for writing 16-bit PCM WAV files. All error handling is
 | ||
|  | // by calls to FATAL_ERROR(), making it unsuitable for anything but debug code.
 | ||
|  | class WavFile { | ||
|  |  public: | ||
|  |   // Open a new WAV file for writing.
 | ||
|  |   WavFile(const std::string& filename, int sample_rate, int num_channels); | ||
|  | 
 | ||
|  |   // Close the WAV file, after writing its header.
 | ||
|  |   ~WavFile(); | ||
|  | 
 | ||
|  |   // Write additional samples to the file. Each sample is in the range
 | ||
|  |   // [-32768,32767], and there must be the previously specified number of
 | ||
|  |   // interleaved channels.
 | ||
|  |   void WriteSamples(const float* samples, size_t num_samples); | ||
|  | 
 | ||
|  |   int sample_rate() const { return sample_rate_; } | ||
|  |   int num_channels() const { return num_channels_; } | ||
|  |   uint32_t num_samples() const { return num_samples_; } | ||
|  | 
 | ||
|  |  private: | ||
|  |   void WriteSamples(const int16_t* samples, size_t num_samples); | ||
|  |   void Close(); | ||
|  |   const int sample_rate_; | ||
|  |   const int num_channels_; | ||
|  |   uint32_t num_samples_;  // total number of samples written to file
 | ||
|  |   FILE* file_handle_;  // output file, owned by this class
 | ||
|  | }; | ||
|  | 
 | ||
|  | }  // namespace webrtc
 | ||
|  | 
 | ||
|  | extern "C" { | ||
|  | #endif  // __cplusplus
 | ||
|  | 
 | ||
|  | // C wrappers for the WavFile class.
 | ||
|  | typedef struct rtc_WavFile rtc_WavFile; | ||
|  | rtc_WavFile* rtc_WavOpen(const char* filename, | ||
|  |                          int sample_rate, | ||
|  |                          int num_channels); | ||
|  | void rtc_WavClose(rtc_WavFile* wf); | ||
|  | void rtc_WavWriteSamples(rtc_WavFile* wf, | ||
|  |                          const float* samples, | ||
|  |                          size_t num_samples); | ||
|  | int rtc_WavSampleRate(const rtc_WavFile* wf); | ||
|  | int rtc_WavNumChannels(const rtc_WavFile* wf); | ||
|  | uint32_t rtc_WavNumSamples(const rtc_WavFile* wf); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | }  // extern "C"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif  // WEBRTC_COMMON_AUDIO_WAV_WRITER_H_
 |