CORE-13875 Added russian translation for timeout util
[reactos.git] / base / applications / sndrec32 / audio_waveout.hpp
1 /* PROJECT: ReactOS sndrec32
2 * LICENSE: GPL - See COPYING in the top level directory
3 * FILE: base/applications/sndrec32/audio_waveout.hpp
4 * PURPOSE: Windows MM wave out abstraction
5 * PROGRAMMERS: Marco Pagliaricci (irc: rendar)
6 */
7
8 #ifndef _AUDIOWAVEOUT__H_
9 #define _AUDIOWAVEOUT__H_
10
11 #include "audio_format.hpp"
12 #include "audio_producer.hpp"
13
14 _AUDIO_NAMESPACE_START_
15
16 enum audio_waveout_status
17 {
18 WAVEOUT_NOTREADY,
19 WAVEOUT_READY,
20 WAVEOUT_PLAYING,
21 WAVEOUT_FLUSHING,
22 WAVEOUT_PAUSED,
23 WAVEOUT_STOP,
24 WAVEOUT_ERR
25 };
26
27 class audio_waveout
28 {
29 friend class audio_buffer;
30
31 private:
32 static DWORD WINAPI playing_procedure(LPVOID);
33 HANDLE wakeup_playthread;
34
35 protected:
36 WAVEFORMATEX wave_format;
37 WAVEHDR *wave_headers;
38 HWAVEOUT waveout_handle;
39
40 const audio_format &aud_info;
41 audio_producer &audio_buf;
42
43 /* Audio Playing Thread id */
44 DWORD playthread_id;
45
46 audio_waveout_status status;
47 float buf_secs;
48
49 /* The temporary buffers for the audio data outgoing to the waveout
50 device and its size, and its total number */
51
52 /* base address for entire memory */
53 BYTE *main_buffer;
54
55 /* size in bytes for the entire memory */
56 unsigned int mb_size;
57
58 /* number of little buffers */
59 unsigned int buffers;
60
61 /* Protected Functions */
62
63 void init_(void);
64 void alloc_buffers_mem_(unsigned int, float);
65 void free_buffers_mem_(void);
66
67 void init_headers_(void);
68 void prep_headers_(void);
69 void unprep_headers_(void);
70
71 public:
72 /* Ctors */
73 audio_waveout(const audio_format &aud_fmt,
74 audio_producer &a_buf) : wave_headers(0),
75 aud_info(aud_fmt),
76 audio_buf(a_buf),
77 status(WAVEOUT_NOTREADY),
78 main_buffer(0),
79 mb_size(0),
80 buffers(_AUDIO_DEFAULT_WAVEOUTBUFFERS)
81 {
82 /* Initializing internal wavein data */
83 init_();
84 }
85
86 /* Dtor */
87 ~audio_waveout(void)
88 {
89 }
90
91 /* Public Functions */
92
93 void open(void);
94 void play(void);
95 void pause(void);
96 void stop(void);
97 void close(void);
98
99 audio_waveout_status current_status(void)
100 {
101 return status;
102 }
103
104 BYTE *buf(void)
105 {
106 return main_buffer;
107 }
108
109 unsigned int bufsz(void)
110 {
111 return mb_size;
112 }
113
114 unsigned int samplevalue_max(void)
115 {
116 if (aud_info.bits() == 16)
117 return (unsigned int)65535;
118 else if (aud_info.bits() == 8)
119 return (unsigned int)255;
120 else
121 return 0;
122 }
123
124 unsigned tot_samples_buf(void)
125 {
126 return aud_info.samples_in_bytes(mb_size);
127 }
128
129 unsigned int nsample(unsigned int nsamp)
130 {
131 unsigned int svalue;
132
133 if (aud_info.bits() == 16)
134 svalue = (unsigned int)abs(*((short *)(main_buffer + aud_info.bytes_in_samples(nsamp))));
135 else if (aud_info.bits() == 8)
136 svalue = (unsigned int)((ptrdiff_t) *(main_buffer + aud_info.bytes_in_samples(nsamp)));
137 else
138 svalue = 0;
139
140 return svalue;
141 }
142 };
143
144 _AUDIO_NAMESPACE_END_
145
146 #endif /* _AUDIOWAVEOUT__H_ */