45 #include <asoundlib.h> 46 snd_pcm_uframes_t SetMicParams(snd_pcm_t **,
DTWconst);
56 snd_pcm_uframes_t SetMicParams(snd_pcm_t **DeviceID,
DTWconst Param)
58 snd_pcm_hw_params_t *HwParams;
59 snd_pcm_uframes_t BufferSize=0;
60 snd_pcm_format_t format;
61 snd_pcm_access_t acces;
62 unsigned int tmp, rrate;
65 CHECKERR(snd_pcm_open(DeviceID, Param.
SoundID, SND_PCM_STREAM_CAPTURE, 0));
68 CHECKERR(snd_pcm_hw_params_malloc(&HwParams));
71 CHECKERR(snd_pcm_hw_params_any((*DeviceID), HwParams));
74 CHECKERR(snd_pcm_hw_params_set_access((*DeviceID), HwParams, AlsaAccessMode));
77 CHECKERR(snd_pcm_hw_params_set_format((*DeviceID), HwParams, AlsaAccessFormat));
80 CHECKERR(snd_pcm_hw_params_set_channels((*DeviceID), HwParams, AlsaChannels));
84 CHECKERR(snd_pcm_hw_params_set_rate_near((*DeviceID), HwParams, &rrate, 0));
87 CHECKERR(snd_pcm_hw_params((*DeviceID), HwParams));
90 CHECKERR(snd_pcm_hw_params_get_buffer_size(HwParams, &BufferSize));
93 if (rrate != AlsaRate) CHECKERR(ErrAlsaHw);
95 printf(
"Rate %u\n", rrate);
98 CHECKERR(snd_pcm_hw_params_get_access(HwParams, &acces));
99 if (acces != AlsaAccessMode) CHECKERR(ErrAlsaHw);
101 printf(
"Access %u\n", (
unsigned int)acces);
104 CHECKERR(snd_pcm_hw_params_get_format(HwParams, &format));
105 if (format != AlsaAccessFormat) CHECKERR(ErrAlsaHw);
107 printf(
"Format %u\n", (
unsigned int)format);
110 CHECKERR(snd_pcm_hw_params_get_channels(HwParams, &tmp));
111 if (tmp != AlsaChannels) CHECKERR(ErrAlsaHw);
113 printf(
"Channels number %u\n", tmp);
114 printf(
"Buffer Size %lu\n", BufferSize);
118 snd_pcm_hw_params_free(HwParams);
134 unsigned char buffer[4];
137 if (fread(Header->
riff,
sizeof(Header->
riff), 1, fp) != 1)
return ErrReadFile;
139 printf(
"(01-04) riff string: %s\n", Header->
riff);
143 if (fread(buffer, 4, 1, fp) != 1)
return ErrReadFile;
144 Header->
size = buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24);
146 printf(
"(05-08) Overall file size %u bytes\n", Header->
size);
150 if (fread(Header->
wave,
sizeof(Header->
wave), 1, fp) != 1)
return ErrReadFile;
152 printf(
"(09-12) wave string: %s\n", Header->
wave);
156 if (fread(Header->
fmt,
sizeof(Header->
fmt), 1, fp) != 1)
return ErrReadFile;
158 printf(
"(13-16) fmt string: %s\n", Header->
fmt);
162 if (fread(buffer, 4, 1, fp) != 1)
return ErrReadFile;
163 Header->
fmt_length = buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24);
165 printf(
"(17-20) Length of the format data: %u bytes\n", Header->
fmt_length);
169 printf(
"Fmt data length not equal to 16, not supported. End\n");
174 if (fread(buffer, 2, 1, fp) != 1)
return ErrReadFile;
175 Header->
format_type = buffer[0] | (buffer[1] << 8);
177 printf(
"(21-22) Format type: %u (1 is PCM) \n", Header->
format_type);
181 printf(
"Format type not equal to PCM, not supported. End\n");
186 if (fread(buffer, 2, 1, fp) != 1)
return ErrReadFile;
187 Header->
channels = buffer[0] | (buffer[1] << 8);
189 printf(
"(23-24) Number of channels: %u\n", Header->
channels);
193 printf(
"Number of channels not equal to 1 (mono), not supported. End\n");
198 if (fread(buffer, 4, 1, fp) != 1)
return ErrReadFile;
199 Header->
sample_rate = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24);
201 printf(
"(25-28) Sample rate: %u\n", Header->
sample_rate);
205 if (fread(buffer, 4, 1, fp) != 1)
return ErrReadFile;
206 Header->
byte_rate = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24);
208 printf(
"(29-32) Byte Rate: %u\n", Header->
byte_rate);
212 if (fread(buffer, 2, 1, fp) != 1)
return ErrReadFile;
213 Header->
block_align = buffer[0] | (buffer[1] << 8);
215 printf(
"(33-34) Block Alignment: %u\n", Header->
block_align);
219 if (fread(buffer, 2, 1, fp) != 1)
return ErrReadFile;
226 printf(
"byte rate is not equal to (sample_rate * channels * bits_per_sample), not supported. End\n");
236 printf(
"(37-40) String DATA: %s\n", Header->
data_header);
238 if (strncasecmp(
"data", Header->
data_header, 4) != 0)
240 printf(
"Not standard wav file header size (44 bytes), not supported. End\n");
245 if (fread(buffer, 4, 1, fp) != 1)
return ErrReadFile;
246 Header->
data_size = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24);
248 printf(
"(41-44) size of data section is %u bytes\n", Header->
data_size);
253 printf(
"Number of samples: %lu\n", Header->
num_samples);
257 printf(
"(data_size / block_align) not equal to ((8*data_size) / (channels*bits_per_sample)). End\n");
267 printf(
"Byte per sample is not equal to 2. End\n");
285 MyType pss, pas, psa, paa, norm;
288 obsprob = 1 / (1 + expf(-obsprob));
290 obsprob = 1 / (1 + exp(-obsprob));
294 pss = (*prob_silen) * (MyType)HMMremain;
295 pas = (*prob_audio) * (MyType)HMMchange;
296 psa = (*prob_silen) * (MyType)HMMchange;
297 paa = (*prob_audio) * (MyType)HMMremain;
300 (*prob_silen) = pss * obsprob;
302 (*prob_silen) = pas * obsprob;
305 (*prob_audio) = psa * (1-obsprob);
307 (*prob_audio) = paa * (1-obsprob);
309 norm = (*prob_silen) + (*prob_audio);
311 (*prob_silen) = (*prob_silen) / norm;
312 (*prob_audio) = (*prob_audio) / norm;
314 return (*prob_silen > *prob_audio);
int Read_WAVHeader(WAVHeader *, FILE *)
Read_WAVHeader reads header of a WAVE file, checks its compability and fill Header struct...
General header file with constants, defines, structs, etc. using by ReMAS, both CPU and GPU...
bool DetectSilence(MyType, MyType *, MyType *)
DetectSilence checks whether audio (frame) is silence or audio.
Struct for store global information of the problem. Each composition needs a file with values for th...