我正在編寫一個代碼輸出文件中的數據。代碼生成(幅度)函數尚未定義好。在編譯時,它運行正常,但輸出不是我所期望的。即使使用dwVal=0
,輸出也是相同的:一串升序值而不是正弦值。帶正弦的正弦音產生(雙)意外地填滿了內存塊
long dwData=200;
HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE, dwLength);
int wData=(int)GlobalLock(hData);//no cast to (int)
for(int i=0;i<dwLength;i++){
DWORD dwVal=16384*sin((double)i/20*pi);
memset(&wData+i, dwVal, 2);
};
//save data
if (!PathFileExists(szName1))
strcpy(szName1, "output.pcm");
FILE* file=fopen(szName1, "wb");
for(i=0;i<dwLength;i++){
DWORD j=fputc((int)&wData+i, file);
if (j==EOF){
cvar.mbsz("error writing", "titlu", j);
return;
};
};
fclose(file);
請幫我澄清第一部分(正弦一代)以及它應該是什麼樣子。非常感謝您的時間。
編輯
int *wData=(int*)GlobalLock(hData);//no cast to (int)
DWORD dwVal;
for(int i=0;i<dwLength;i++){
dwVal=16384*sin(pi/20*(long)i);
wData[i]=dwVal;
};
FILE* file=fopen(szName1, "wb");
DWORD j;
for(i=0;i<dwLength;i++){
j=fwrite(&wData[i], 1, 1, file);
if (j==EOF){
return;
};
};
fclose(file);
謝謝MSalters。我試圖在這裏和那裏做一些替換,但不能說它編譯。我是C++中的一個newby,我需要它在C++中...可以爲我寫下for
循環。如果你同意我的觀點,dwVal變量不一定是數組。 dwLength是一個有限長度(200)。
謝謝你的觀察邁克爾華爾茲!
double pi=3.1415926535;
long dwData=200;
HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE, dwLength);
long *wData=(long*)GlobalLock(hData);
long dwVal;
for(int i=0;i<dwLength;i++){
dwVal=16384*sin(i/20*pi);
wData[i]=dwVal;
};
//save data
if (!PathFileExists(szName1))
strcpy(szName1, "output.pcm");
FILE* file=fopen(szName1, "wb");
for(i=0;i<dwLength;i++){
DWORD j=fwrite(&wData[i], 2, 1, file);
if (j==EOF){
cvar.mbsz("error writing", "titlu", 0);
return;
};
};
fclose(file);
我關閉的方式&發佈對象和文件可以嗎?
'dwLength'的內容是什麼? –
更糟糕的是,我回答了一個話題,就像我自己的一樣,在C中給了一個回覆,現在懷疑它會起作用。當我回來時,我會搜索它並重新進行驗證。 – paul