当前位置: 技术问答>linux和unix
录音暂停后的可疑数据。。。
来源: 互联网 发布时间:2016-07-23
本文导语: 小弟用qt加c语言在linux下做了一个录音程序。。 在录音线程中用个bool变量控制循环 while(1) { if (status) { read(dsp_fd,buf,sizeof(buf)); write(file_fd,buf,sizeof(buf)); } } status 是bool 变量; ds...
小弟用qt加c语言在linux下做了一个录音程序。。
在录音线程中用个bool变量控制循环
while(1)
{
if (status)
{
read(dsp_fd,buf,sizeof(buf));
write(file_fd,buf,sizeof(buf));
}
}
status 是bool 变量;
dsp_fd 和file_fd 分别是dsp设备的文件描述符 和打开的文件描述符;
buf 是我自己定义的一个缓冲区 char buf[44040];
该线程循环中每次都是从dsp设备读取一段数据然后写入文件。主界面按暂停的时候修改status的状态,从而使录音线程处于暂停不录数据阶段。 但是我在用测时间的函数测一下之后发现一些搞不清如何运行而来的一些数据:
while(1)
{
if (status)
{
double time1 = capturecurrenttime();
read(dsp_fd,buf,sizeof(buf));
double time2 = capturecurrenttime();
double usetime = time2 - time1;
printf("usetime = %f n",usetime);
write(file_fd,buf,sizeof(buf));
}
}
capturecurrenttime()该函数是自己定义的获取时间函数;
数据显示结果:
usetime = 0.282044
usetime = 0.278234
usetime = 0.278569
usetime = 0.185704
usetime = 0.278592
(按暂停后这里停止输出)
(在按录音,该录音程序继续运行输出)
(出现了疑惑数据(红色部分)):
usetime = 0.000085
usetime = 0.000059
usetime = 0.000051
usetime = 0.000049
usetime = 0.000038
。。。。。。
usetime = 3.159125
(继续录音又恢复正常输出)
usetime = 0.278616
.。。。。。。
总结:中间这段录音数据不知道为什么会读取到。。因为按照程序的话暂停后read函数不会在执行也就不会读取dsp的数据,我想会不会是dsp设备里面的问题?也许dsp缓冲区会有问题吧? 但是搞不清楚,也就没什么对策修改了。。。恳请各位大侠指教!!!
在录音线程中用个bool变量控制循环
while(1)
{
if (status)
{
read(dsp_fd,buf,sizeof(buf));
write(file_fd,buf,sizeof(buf));
}
}
status 是bool 变量;
dsp_fd 和file_fd 分别是dsp设备的文件描述符 和打开的文件描述符;
buf 是我自己定义的一个缓冲区 char buf[44040];
该线程循环中每次都是从dsp设备读取一段数据然后写入文件。主界面按暂停的时候修改status的状态,从而使录音线程处于暂停不录数据阶段。 但是我在用测时间的函数测一下之后发现一些搞不清如何运行而来的一些数据:
while(1)
{
if (status)
{
double time1 = capturecurrenttime();
read(dsp_fd,buf,sizeof(buf));
double time2 = capturecurrenttime();
double usetime = time2 - time1;
printf("usetime = %f n",usetime);
write(file_fd,buf,sizeof(buf));
}
}
capturecurrenttime()该函数是自己定义的获取时间函数;
数据显示结果:
usetime = 0.282044
usetime = 0.278234
usetime = 0.278569
usetime = 0.185704
usetime = 0.278592
(按暂停后这里停止输出)
(在按录音,该录音程序继续运行输出)
(出现了疑惑数据(红色部分)):
usetime = 0.000085
usetime = 0.000059
usetime = 0.000051
usetime = 0.000049
usetime = 0.000038
。。。。。。
usetime = 3.159125
(继续录音又恢复正常输出)
usetime = 0.278616
.。。。。。。
总结:中间这段录音数据不知道为什么会读取到。。因为按照程序的话暂停后read函数不会在执行也就不会读取dsp的数据,我想会不会是dsp设备里面的问题?也许dsp缓冲区会有问题吧? 但是搞不清楚,也就没什么对策修改了。。。恳请各位大侠指教!!!
|
while(1)
{
if (status)
{
read(dsp_fd,buf,sizeof(buf));
write(file_fd,buf,sizeof(buf));
}
}
这个线程很占系统资源。
建议加入线程同步机制。
{
if (status)
{
read(dsp_fd,buf,sizeof(buf));
write(file_fd,buf,sizeof(buf));
}
}
这个线程很占系统资源。
建议加入线程同步机制。
|
帮顶、、