FE_io.cpp
上传用户:italyroyal
上传日期:2013-05-06
资源大小:473k
文件大小:3k
源码类别:

语音合成与识别

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // This is a part of the Feature program.
  3. // Version: 1.0
  4. // Date: February 22, 2003
  5. // Programmer: Oh-Wook Kwon
  6. // Copyright(c) 2003 Oh-Wook Kwon. All rights reserved. owkwon@ucsd.edu
  7. ///////////////////////////////////////////////////////////////////////////////
  8. #include "StdAfx.h"
  9. #include "FE_feature.h"
  10. int Fe::ad_read(FILE *fp, short *buf, int n)
  11. {
  12. int num_data;
  13. if(!buf) return 0;
  14. num_data = FREAD(buf,sizeof(short),n,fp);
  15. return(num_data);
  16. }
  17. int Fe::ad_write(FILE *fp, short *buf, int n)
  18. {
  19. int num_data;
  20. if(!buf) return 0;
  21. num_data = FWRITE(buf,sizeof(short),n,fp);
  22. return(num_data);
  23. }
  24. int Fe::read_feature_basic(FeMatrix<float>& feat, int dim, FILE *fi)
  25. {
  26. int l;
  27. if(feat.size()==0) return 0;
  28. for (l=0; ; l++){
  29. if(FREAD(&feat[l][0], sizeof(float), dim, fi)==0) 
  30. return(l);
  31. }
  32. return l;
  33. }
  34. int Fe::write_feature_basic(FeMatrix<float>& feat, int num_frames, int dim, FILE *fo)
  35. {
  36. if(feat.size()==0) return 0;
  37. for (int l=0; l < num_frames; l++){
  38. FWRITE(&feat[l][0], sizeof(float), dim, fo);
  39. }
  40. return 1;
  41. }
  42. int Fe::write_feature_vectors(FILE *fo, FeMatrix<float>& feat, int* pTag, const char* featname)
  43. {
  44. int num_frames = feat.size();
  45. if(num_frames == 0) return 0;
  46. int dim = feat[0].size();
  47. int nsave = dim;
  48. if(pTag){
  49. nsave = 0;
  50. for(int i=0;i<dim;i++)
  51. if(pTag[i]) nsave++;
  52. }
  53. fprintf(fo,"#DATA %sn", ((featname) ? featname : ""));
  54. for (int n=0; n<num_frames; n++){
  55. fprintf(fo, "%f %d ",(float)(n*m_shiftSizeMs/1000.0),nsave);
  56. for (int j=0; j<dim; j++) {
  57. if(pTag && pTag[j]) fprintf(fo, " %f ",feat[n][j]);
  58. }
  59. fprintf(fo, "n");
  60. }
  61. return(1);
  62. }
  63. int Fe::FREAD(void *ptr, int size, int nitems, FILE *stream)
  64. {
  65. assert(size==1 || size==2 || size==4 || size==8);
  66. char c,*p,*q;
  67. int i,j,n;
  68. n=fread(ptr,size,nitems,stream);
  69. if(m_swapByte){
  70. for(i=0;i<size/2;i++){
  71. for(j=0,p=(char*)ptr+i,q=(char*)ptr+(size-1-i);j<n;j++,p+=size,q+=size){
  72. c=(*p);
  73. (*p)=(*q);
  74. (*q)=c;
  75. }
  76. }
  77. }
  78. return(n);
  79. }
  80. int Fe::FWRITE(void *ptr, int size, int nitems, FILE *stream)
  81. {
  82. assert(size==1 || size==2 || size==4 || size==8);
  83. char c,*p,*q;
  84. int i,j,n;
  85. if(m_swapByte){
  86. vector<char> tmp;
  87. tmp.resize(size*nitems);
  88. for(i=0,p=(char*)ptr;i<(size*nitems);i++,p++) tmp[i]=(*p);
  89. for(i=0;i<size/2;i++){
  90. for(j=0,p=&tmp[0]+i,q=&tmp[0]+(size-1-i);j<nitems;j++,p+=size,q+=size){
  91. c=(*p);
  92. (*p)=(*q);
  93. (*q)=c;
  94. }
  95. }
  96. n=fwrite(&tmp[0],size,nitems,stream);
  97. }
  98. else{
  99. n=fwrite(ptr,size,nitems,stream);
  100. }
  101. return(n);
  102. }