| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2008 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2013-04-17 23:09:55 -04:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-28 08:57:34 +00:00
										 |  |  | // ---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | // Class: WaveFileWriter
 | 
					
						
							|  |  |  | // Description: Simple utility class to make it easy to write long 16-bit stereo
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | // audio streams to disk.
 | 
					
						
							|  |  |  | // Use Start() to start recording to a file, and AddStereoSamples to add wave data.
 | 
					
						
							|  |  |  | // The float variant will convert from -1.0-1.0 range and clamp.
 | 
					
						
							|  |  |  | // Alternatively, AddSamplesBE for big endian wave data.
 | 
					
						
							|  |  |  | // If Stop is not called when it destructs, the destructor will call Stop().
 | 
					
						
							| 
									
										
										
										
											2009-03-28 08:57:34 +00:00
										 |  |  | // ---------------------------------------------------------------------------------
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-02 20:00:48 -05:00
										 |  |  | #include <array>
 | 
					
						
							| 
									
										
										
										
											2014-03-12 15:33:41 -04:00
										 |  |  | #include <string>
 | 
					
						
							| 
									
										
										
										
											2014-09-07 20:06:58 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "Common/FileUtil.h"
 | 
					
						
							| 
									
										
										
										
											2015-09-26 16:13:54 -04:00
										 |  |  | #include "Common/NonCopyable.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-06 11:21:44 -04:00
										 |  |  | class WaveFileWriter : NonCopyable | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	WaveFileWriter(); | 
					
						
							|  |  |  | 	~WaveFileWriter(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-12 15:33:41 -04:00
										 |  |  | 	bool Start(const std::string& filename, unsigned int HLESampleRate); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 	void Stop(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void SetSkipSilence(bool skip) { skip_silence = skip; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-11 22:22:55 -05:00
										 |  |  | 	void AddStereoSamples(const short *sample_data, u32 count); | 
					
						
							|  |  |  | 	void AddStereoSamplesBE(const short *sample_data, u32 count);  // big endian
 | 
					
						
							| 
									
										
										
										
											2013-12-11 08:43:58 -05:00
										 |  |  | 	u32 GetAudioSize() const { return audio_size; } | 
					
						
							| 
									
										
										
										
											2014-09-06 11:21:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2015-12-02 20:00:48 -05:00
										 |  |  | 	static constexpr size_t BUFFER_SIZE = 32 * 1024; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-06 11:21:44 -04:00
										 |  |  | 	File::IOFile file; | 
					
						
							| 
									
										
										
										
											2015-12-02 20:00:48 -05:00
										 |  |  | 	bool skip_silence = false; | 
					
						
							|  |  |  | 	u32 audio_size = 0; | 
					
						
							|  |  |  | 	std::array<short, BUFFER_SIZE> conv_buffer{}; | 
					
						
							| 
									
										
										
										
											2014-09-06 11:21:44 -04:00
										 |  |  | 	void Write(u32 value); | 
					
						
							|  |  |  | 	void Write4(const char* ptr); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | }; |