📄 wavwriter.c
字号:
/*File Name:WavWriter.c*/
#include <pthread.h>
#include "Ldb.h"
#include "WavWriter.h"
#include "WavFile.h"
#include "ShellCmd.h"
#include "LocoSystem.h"
#include "Utility.h"
#include "Recorder.h"
#include "LocoLog.h"
/*****************************/
/*转换线程*/
pthread_t f_wavThrd;
/*录音停止标志*/
char f_wavStop = 1;
/*录音线程函数*/
void *wav_writer(void *arg);
/*原始声音文件保存目录*/
char f_sndDir[SYS_PATH_MAX_LEN];
/*wav文件保存目录*/
char f_wavDir[SYS_PATH_MAX_LEN];
/*****************************/
int wav_writerStart(const char *pSnddir, const char *pWavDir)
{
if (f_wavStop == 0 || pSnddir == NULL || pWavDir == NULL)
return 0;
memset(f_wavDir, 0, SYS_PATH_MAX_LEN);
sprintf(f_wavDir, "%s/%s", pWavDir, SYS_WAV_DIR);
memset(f_sndDir, 0, SYS_PATH_MAX_LEN);
strcpy(f_sndDir, pSnddir);
//创建保存wav的目录
if(ldb_fileCreateDir(f_wavDir) == -1)
{
LDB_ERR_MSGF("can not create wav directory %s", f_wavDir);
return -1;
}
//创建监视线程
if( pthread_create(&f_wavThrd, NULL, wav_writer, NULL) != 0)
{
LDB_ERR_MSGF("can not create wav converter thread");
return -1;
}
f_wavStop = 0;
return 0;
}
int wav_writerIsStop()
{
return f_wavStop;
}
void wav_writerStop()
{
if (f_wavStop == 1)
return;
//等待线程结束
f_wavStop = 1;
if ( pthread_join(f_wavThrd, NULL) != 0)
{
LDB_DEBUG_MSGF("wav converter thread exits abnormally");
}
}
//0 不用save, 1 save到u盘
int wav_isAccept(const char *pdir)
{
char date[9];
int i;
printf("check acceptance of %s\n", pdir);
//表示没有设置filter
if (g_filter.days == 0)
return 1;
if (strlen(pdir) < strlen(".xxxxx.yyyymmdd") )
{
return 0;
}
memset(date, 0, sizeof(date));
i = strlen(pdir) - sizeof("yyyymmdd");
strncpy(date, pdir+i+1, 8);
for (i=0; i<g_filter.days; i++)
{
if (strcmp(date, g_filter.date[i]) == 0)
{
return 1;
}
}
return 0;
}
void *wav_writer(void *arg)
{
S_ShellDF df;
int i, count, size;
char **files;
char **dirs;
int dir_count, dir_index;
char wav_dir[SYS_PATH_MAX_LEN];
char wav_name[SYS_PATH_MAX_LEN];
char snd_name[SYS_PATH_MAX_LEN];
char snd_dir[SYS_PATH_MAX_LEN];
char log[SYS_PATH_MAX_LEN];
dir_count = ldb_fileGetDirList(f_sndDir, &dirs);
if (dir_count == 0)
goto WAV_WRITER_END;
//记录U盘空间
shell_df(&df, f_wavDir, LOCO_KILO_SIZE);
for (dir_index=0; dir_index<dir_count; dir_index++)
{
if (0 == wav_isAccept(dirs[dir_index]) )
continue;
memset(snd_dir, 0, sizeof(snd_dir));
sprintf(snd_dir, "%s/%s", f_sndDir, dirs[dir_index]);
memset(log, 0, sizeof(log));
sprintf(log, "download files under %s", snd_dir);
log_info(log);
count = ldb_fileGetList(snd_dir, &files);
if (count == 0)
{
memset(log, 0, sizeof(log));
sprintf(log, "No sound files under %s", dirs[dir_index]);
log_info(log);
continue;
}
memset(wav_dir, 0, sizeof(wav_dir));
sprintf(wav_dir, "%s/%s", f_wavDir, dirs[dir_index]);
if(ldb_fileCreateDir(wav_dir) == -1)
{
memset(log, 0, sizeof(log));
sprintf(log, "can not create wav directory %s", wav_dir);
log_error(log);
goto WAV_WRITER_END;
}
//获得播放文件列表
for (i=0; i<count; i++)
{
if (f_wavStop == 1)
goto WAV_WRITER_END;
//检查磁盘空间
if (df.free < SYS_UDISK_FULL)
{
log_error("Not enough space on U disk! Exiting download sound files");
loco_audioPrompt(AP_UDISK_FULL);
goto WAV_WRITER_END;
}
memset(snd_name, 0, SYS_PATH_MAX_LEN);
memset(wav_name, 0, SYS_PATH_MAX_LEN);
sprintf(snd_name, "%s/%s", snd_dir, files[i]);
sprintf(wav_name, "%s/%s%s", wav_dir, files[i], ".wav");
if (wavf_convert(snd_name, wav_name) == 0)
{
size = ldb_fileSize(wav_name)/LOCO_KILO_SIZE + 1;
df.free -= size;
//转换成功,删除整个目录
LDB_DEBUG_MSGF("Successfully convert files %s to %s.", snd_name, wav_name);
memset(log, 0, sizeof(log));
sprintf(log, "Successfully convert files %s to %s.", snd_name, wav_name);
log_info(log);
}
else
{
LDB_ERR_MSGF("Failed convert files %s.", snd_name);
memset(log, 0, sizeof(log));
sprintf(log, "Failed convert file %s.", snd_name);
log_error(log);
}
free(files[i]);
files[i] = NULL;
}
free(files);
files = NULL;
}
WAV_WRITER_END:
printf("wav converter finished\n");
for (; i<count; i++)
{
if (files[i] != NULL)
{
free(files[i]);
files[i] = NULL;
}
}
if (files != NULL)
{
free(files);
files = NULL;
}
for (i=0; i<dir_count; i++)
free(dirs[i]);
free(dirs);
f_wavThrd = -1;
f_wavStop = 1;
loco_cmdFinished(CMD_RCD_SAVE, f_wavDir);
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -