use 'SHFileOperation', which copies, removes, renames or deletes a file system object

C++:
  1. #include <tchar.h>
  2. #include <shellapi.h>
  3.  
  4. bool DeleteDirectory(LPCTSTR lpszDir, bool noRecycleBin = true)
  5. {
  6.   int len = _tcslen(lpszDir);
  7.   TCHAR *pszFrom = new TCHAR[len+2];
  8.   _tcscpy(pszFrom, lpszDir);
  9.   pszFrom[len] = 0;
  10.   pszFrom[len+1] = 0;
  11.  
  12.   SHFILEOPSTRUCT fileop;
  13.   fileop.hwnd   = NULL;    // no status display
  14.   fileop.wFunc  = FO_DELETE;  // delete operation
  15.   fileop.pFrom  = pszFrom;  // source file name as double null terminated string
  16.   fileop.pTo    = NULL;    // no destination needed
  17.   fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT;  // do not prompt the user
  18.  
  19.   if(!noRecycleBin)
  20.     fileop.fFlags |= FOF_ALLOWUNDO;
  21.  
  22.   fileop.fAnyOperationsAborted = FALSE;
  23.   fileop.lpszProgressTitle     = NULL;
  24.   fileop.hNameMappings         = NULL;
  25.  
  26.   int ret = SHFileOperation(&fileop);
  27.   delete [] pszFrom; 
  28.   return (ret == 0);
  29. }
  30.  
  31. int main()
  32. {
  33.   DeleteDirectory("d:\\Test", false);
  34.   return 0;
  35. }


reference : How to delete a directory and subdirectories?

在 winxp 遇到一個檔案大小為 0,沒有副檔名的檔案,用del 指令砍不掉,用 unlocker 程式也顯示沒被其它程式佔用。解決的方法就到dos下,執行 dir/x 指令查看此檔案的短檔名,再執行「 del 短檔名」 即可刪除。

六月 10th, 2008SendMessage to Control WMP

先用 spy 得到 wmp 的 windows class 及 caption,並只觀察「WM_COMMAND」message,可發現當 pause、stop、resume 時,wParam 參數 會隨之變化。

C++:
  1. #include <windows.h>
  2.  
  3. void main(int argc, char** argv)
  4. {
  5.     if (argc> 1)
  6.     {
  7.         int n = atoi(argv[1]);
  8.         HWND wmp = FindWindow("WMPlayerApp", "Windows Media Player");
  9.  
  10.         switch(n)
  11.         {
  12.             case 0: //pause,play
  13.             SendMessage(wmp, WM_COMMAND, 18808, 0);
  14.             break;
  15.            
  16.             case 1: //stop
  17.             SendMessage(wmp, WM_COMMAND, 18809, 0);
  18.             break;
  19.            
  20.             case 2: //next
  21.             SendMessage(wmp, WM_COMMAND, 18811, 0);
  22.             break;
  23.            
  24.             case 3: //prev
  25.             SendMessage(wmp, WM_COMMAND, 18810, 0);
  26.             break;
  27.  
  28.             case 4: //random
  29.             SendMessage(wmp, WM_COMMAND, 18842, 0);
  30.             break;
  31.            
  32.            
  33.         }
  34.        
  35.     }
  36. }


若有一數列為

CODE:
  1. 1.0,
  2.   0.0,
  3.   0.0,
  4.   4.2,
  5.   3.1,
  6.   4.8,
  7.   0.0,
  8.   7.1,
  9.   0.0,
  10.   1.0,
  11.   2.0,
  12.   0.0,
  13.   0.0,
  14.   1.5,
  15.   0.0,
  16.   1,1


欲尋找此數列 不為零的群組,並計算此群組的平均
例如

CODE:
  1. 1  1.0,    avg = 1.0 
  2.     0.0
  3.     0.0
  4. 2  4.2
  5. 2  3.1,    avg = (4.2+3.1+4.8)/3 
  6. 2  4.8
  7.     0.0
  8. 3  7.1,    avg = 7.1 
  9.     0.0
  10. 4  1.0,    avg = (1.0 + 2.0) /2 
  11. 4  2.0
  12.     0.0
  13.     0.0
  14. 5  1.5,    avg = 1.5 
  15.     0.0
  16. 6  1,1     avg = 1.1


C++:
  1. #include <stdio.h>
  2.  
  3. void main()
  4. {
  5.     int i = 0, preFlag = 0, curFlag = 0;
  6.     float fsum = 0.0f;
  7.     int n = 0, nReg = 0;
  8.     float af[16] = {
  9.         1.0,
  10.         0.0,
  11.         0.0,
  12.         4.2,
  13.         3.1,
  14.         4.8,
  15.         0.0,
  16.         7.1,
  17.         0.0,
  18.         1.0,
  19.         2.0,
  20.         0.0,
  21.         0.0,
  22.         1.5,
  23.         0.0,
  24.         1.1
  25.     };
  26.    
  27.     for (i = 0 ; i <16; i++)
  28.     {
  29.         curFlag = (af[i] == 0.0 ? 0 : 1);
  30.         if (preFlag == 0 && curFlag == 1)
  31.         {   
  32.             nReg++;
  33.         }
  34.        
  35.         if (curFlag == 1)
  36.         {
  37.             fsum += af[i];
  38.             n++;
  39.             printf("reg %d : %.2f\n", nReg, af[i]);
  40.         }
  41.  
  42.         if (preFlag == 1 && curFlag == 0 || (curFlag == 1 && (i == 15)))
  43.         {
  44.             printf("avg:%.2f\n", fsum/n);
  45.             fsum = 0;
  46.             n = 0;
  47.         }
  48.        
  49.         preFlag = curFlag; 
  50.     }
  51.  
  52.    
  53.     printf("Total Regions:%d\n", nReg);
  54. }


輸出

CODE:
  1. reg 1 : 1.00
  2. avg:1.00
  3. reg 2 : 4.20
  4. reg 2 : 3.10
  5. reg 2 : 4.80
  6. avg:4.03
  7. reg 3 : 7.10
  8. avg:7.10
  9. reg 4 : 1.00
  10. reg 4 : 2.00
  11. avg:1.50
  12. reg 5 : 1.50
  13. avg:1.50
  14. reg 6 : 1.10
  15. avg:1.10


SoX is a command line utility that can convert various formats of computer audio files in to other formats。

ex1: convert 16k 16bit pcm file to 8k 、8 bit ulaw file

sox -t raw -r 16000 -2 -s -c 1 src.pcm -t raw -U -r 8000 dest.ulaw

ex2: merge files

sox -t raw -s -2 -c 1 -r 8000 --combine concatenate m1.pcm -t raw -s -2 -c 1 -r 8000 m2.pcm merge.wav

ex3: trim a file

sox -t raw -s -2 -c 1 -r 8000 m1.pcm m1-out.wav trim 1.0 1.5

ex4: add silence // add 0 sec to the file begin , 0.5 second to the file end.

sox -t raw -s -2 -c -1 -r 8000 m1.pcm m1-out.wav pad 0 0.5

-t : file type (raw : no header) -r : sampling rate
-2 : bytes per sample
-c : channel
-U : ulaw
1.0 : begin time (second)
1.5 : duration ( second)

Make the Same Dir Structure From Src to Dest
若有一來源路徑列表為
c:\corpus\maggie\123\01.pcm
c:\corpus\maggie\456\02.pcm
c:\corpus\maggie\789\03.pcm

想在 z:\speech 目錄下複製來源路徑相同的目錄結構,如
z:\speech\corpus\maggie\123\01.ulaw
z:\speech\corpus\maggie\456\02.ulaw
z:\speech\corpus\maggie\789\03.ulaw

PERL:
  1. use File::Path;
  2. #use File::Basename;
  3. my $prefix = 'z:\corpus';
  4. my $sublayer = 1;
  5. open(F, shift) || die $!;
  6. while(<F>)
  7. {
  8.     chomp;
  9.     my @dirs = split(/\\/);
  10.     @dirs = @dirs[$sublayer..$#dirs];
  11.     my $pcm = pop @dirs;
  12.     $dir = $prefix . "\\" . join("\\", @dirs);
  13.     $pcm =~ s/pcm$/ulaw/i;
  14.     $pcm = $dir . "\\" . $pcm;
  15.  
  16.              #print $dir . "\n";
  17.              #print $pcm . "\n";
  18.  
  19.              `pcm2ulaw $_  $pcm`;
  20. }
  21. close F;



© 2007 EvoTalk | iKon Wordpress Theme by TextNData | Powered by Wordpress | rakCha web directory
header.php