cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mtsOpenALRecord.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Marcin Balicki
7  Created on: 2011
8 
9  (C) Copyright 2011-2013 Johns Hopkins University (JHU), All Rights Reserved.
10 
11 --- begin cisst license - do not edit ---
12 
13 This software is provided "as is" under an open source license, with
14 no warranty. The complete license can be found in license.txt and
15 http://www.cisst.org/cisst/license.txt.
16 
17 --- end cisst license ---
18 
19 */
20 
21 #ifndef _mtsOpenALRecord_h
22 #define _mtsOpenALRecord_h
23 
24 #include <al.h>
25 #include <alc.h>
26 
29 
30 // forward declaration of header classes
31 struct osaOpenALCAIHeader;
32 struct osaOpenALWAVHeader;
33 
34 // Always include last!
36 
41 
42 //mono 16 bit at 441000 Hz is about 320 Mbytes per hour.
43 
45  // used to control the log level
47 
48 protected:
49  enum {BUFFERSIZE = 50000};
50 
51  enum FileType {CAI, WAV};
54  FILE * SoundFile;
56 
59  ALCdevice * CaptureDevice;
60  ALchar SoundBuffer[BUFFERSIZE];
61 
63  int SoundFmt;
64  unsigned short NumChannels;
65  unsigned short NumBits;
66  unsigned int BytesPerSample;
67 
72 
74 
75  //CAI Specific
76  //bool started;
77 
78  void Record(void);
79  void Stop(void);
81  void SetCaptureDeviceName(const mtsStdString & deviceName);
82  void SetCaptureDeviceID(const mtsUInt & deviceID);
83  void GetCaptureDeviceNames(mtsStdStringVec & names) const;
84 
85  void CalcStreamVolume(ALchar * stream, int numberOfSamples);
86 
87  void PrintCAIHeader(osaOpenALCAIHeader * header);
88 
89  std::string GetALErrorString(ALenum err);
90  bool CheckALError(std::string & error);
91 
93 
94  void OpenHeaderFile(const std::string & filename);
95  void CloseHeaderFile(void);
96  void WriteToHeaderFile(const double & timestamp, const int bytes);
97 
98  std::ofstream HeaderStream;
100 
101 public:
102  enum SoundFormat {MONO8, MONO16, STEREO8, STEREO16};
103  // provide a name for the task and define the frequency (time
104  // interval between calls to the periodic Run). Also used to
105  // populate the interface(s)
106  mtsOpenALRecord(const std::string & taskName, double period, int frequency = 44100, SoundFormat fmt = mtsOpenALRecord::MONO16);
107  ~mtsOpenALRecord();
108  // all four methods are pure virtual in mtsTask
109  void Configure(const std::string & CMN_UNUSED(filename)) {};
110  void SetFileName(const mtsStdString &fileName);
111  void GetFileName(mtsStdString &fileName) const;
112 
113  void Startup(void); // set some initial values
114  void Run(void); // performed periodically
115  void Cleanup(void) {}; // user defined cleanup
116 
117 
118 };
119 
121 
122 #endif
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
int SoundFmt
Definition: mtsOpenALRecord.h:63
Definition: mtsOpenALRecord.h:44
const osaTimeServer * TimeServer
Definition: mtsOpenALRecord.h:73
#define CMN_UNUSED(argument)
Definition: cmnPortability.h:479
Definition: mtsOpenALRecord.h:102
mtsDouble StreamVolume
Definition: mtsOpenALRecord.h:92
int SoundFrequency
Definition: mtsOpenALRecord.h:62
unsigned short NumChannels
Definition: mtsOpenALRecord.h:64
Definition: mtsOpenALRecord.h:102
double LastHeaderUpdateTime
Definition: mtsOpenALRecord.h:99
Definition: osaOpenALAudioTypes.h:59
unsigned short NumBits
Definition: mtsOpenALRecord.h:65
mtsDouble Time
Definition: mtsOpenALRecord.h:70
virtual void Startup(void)
Definition: mtsComponent.h:262
mtsStdString FileName
Definition: mtsOpenALRecord.h:53
void Cleanup(void)
Definition: mtsOpenALRecord.h:115
FILE * SoundFile
Definition: mtsOpenALRecord.h:54
unsigned int BytesPerSample
Definition: mtsOpenALRecord.h:66
Definition: mtsVector.h:33
#define CMN_LOG_ALLOW_ERRORS_AND_WARNINGS
Definition: cmnLogLoD.h:72
void Configure(const std::string &CMN_UNUSED(filename))
Definition: mtsOpenALRecord.h:109
osaOpenALWAVHeader * WAVHeader
Definition: mtsOpenALRecord.h:58
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
mtsDouble FileSize
Definition: mtsOpenALRecord.h:71
SoundFormat
Definition: mtsOpenALRecord.h:102
Defines a periodic task.
mtsDouble EndTime
Definition: mtsOpenALRecord.h:69
Definition: osaOpenALAudioTypes.h:99
Class for relative time.
Definition: osaTimeServer.h:73
mtsBool IsRecording
Definition: mtsOpenALRecord.h:52
virtual void Run(void)=0
osaOpenALCAIHeader * CAIHeader
Definition: mtsOpenALRecord.h:57
mtsDouble StartTime
Definition: mtsOpenALRecord.h:68
ALCdevice * CaptureDevice
Definition: mtsOpenALRecord.h:59
Definition: mtsTaskPeriodic.h:80
const int CMN_NO_DYNAMIC_CREATION
Definition: cmnClassRegisterMacros.h:328
FileType
Definition: mtsOpenALRecord.h:51
CMN_DECLARE_SERVICES_INSTANTIATION(mtsOpenALRecord)
std::ofstream HeaderStream
Definition: mtsOpenALRecord.h:98
FileType FType
Definition: mtsOpenALRecord.h:55