This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我已经将一个.PCM 文件转换为一个.wav 文件并知道它的声音。 将.PCM 文件转换为.csv 文件并读取.csv 文件的图形以表示声音文件的声音幅度后、我现在尝试了解如何输入.csv 文件、 然后输出.wav 文件并查看它是否听起来相同。 但是、每次我使用 Code Composer Studio v.10调试程序时、它都会跳过 while 循环。 是否有人看到我的代码中的错误位置以及我缺少的内容? 基本上、我对.PCM 至.csv 和.PCM 至.wav 转换使用了相同的代码、只是我切换了文件路径、但它不起作用。 如果有任何帮助,我会非常感激…
下面是我的代码...
--------------------------------------------------------------------
/*
* fileIOTest.c
*
*创建日期:2012年3月10日
*作者:BLEE
*
*对于"实时数字信号处理:
*基础知识、实施和应用、第三版"
*作者:Sen M. Kuo、Bob H. Lee 和 Wenshun Tian
*出版商:John Wiley and Sons、Ltd
*
#include
#include
#include "tidtypes.h"
uint8 waveHeader[44]={// WAV 文件头的44字节
0x52、0x49、0x46、0x46、0x00、 0x00、0x00、0x00、
0x57、0x41、0x56、0x45、0x66、 0x6D、0x74、0x20、
0x10、0x00、0x00、0x00、0x01、 0x00、0x01、0x00、
0x40、0x1F、0x00、0x00、0x80、 0x3E、0x00、0x00、
0x02、0x00、0x10、0x00、0x64、 0x61、0x74、0x61、
0x00、0x00、0x00、0x00};
#define 大小1024
uint8 ch[size];//声明实验的 char[1024]数组
void main()
{
文件*FP1,*FP2;//文件指针
uint32 i;
//unsigned int j;//用作计数器的 unsigned long 整数
printf ("Exp. 1.2 --文件 io\n");
FP1 = fopen ("E:\\Code Composer Studio Workspace\\EE489\\Lab1_FileIO_1_\out.xlsx"、"rb");//打开输入文件
//fp1 = fopen ("..\\.cproject"、"rb");//打开输入文件
fp2 = fopen ("E:\\Code Composer Studio Workspace\\EE489\\Lab1_FileIO_1\\output\\C55DSPUSBStickAudioTest.wav"、"WB");//打开输出文件
如果(FP1 =NULL)//检查输入文件是否存在
{
printf ("打开输入文件'out.xlsx'\n"\n 失败);
EXIT (0);
}
fseek (fp2、44、0);//高级输出文件点44字节
I=0;
while (fread (ch、sizeof (UINT8)、size、FP1)=size)//以输入数据字节的大小读取
{
// fread (ch、sizeof (uint8)、size、fp1);
// j++;
fwrite (ch、sizeof (UINT8)、size、fP2);//将数据字节的大小写入输出文件
//fwrite (ch、sizeof (UINT8)、size、FP3);//将数据字节的大小写入输出文件
i +=大小;
printf ("%ld 字节已处理\n"、i);//显示已处理的数据数
}
waveHeader[40]=(uint8)(I&0xff);//将 size 参数更新为 WAV 标题
waveHeader[41]=(uint8)(i>>8)&0xff;
waveHeader[42]=(uint8)(I>>16)&0xff;
waveHeader[43]=(uint8)(i>>24)&0xff;
WaveHeader[4]= waveHeader[40];
WaveHeader[5]= waveHeader[41];
WaveHeader[6]= waveHeader[42];
WaveHeader[7]= waveHeader[43];
回卷(FP2);//将输出文件点调整为开始
fwrite (waveHeader、sizeof (UINT8)、44、FP2);//将44字节 WAV 报头写入输出文件
fclose (FP1);//关闭输入文件
fclose (FP2);//关闭输出文件
printf ("\nExp --已完成\n");
}
--------------------------------------------------------------------
我怀疑 C I/O 函数(printf、fopen 等)有问题 请告诉我文章 使用 printf 的提示是否 解决了问题。
谢谢、此致、
乔治
如前所述、它仅跳过 while 循环、条件是它读取的输入为1024字节。 因此、它可能与 while 环路有关
while 循环由对 fread 的调用是否成功控制。 它必须在第一次调用时失败。 为什么失败? 先前的 fseek 是否也失败?
谢谢、此致、
乔治
显然,由于 fread()没有在每8个位块中采用1024的无符号整数,因此无法读取。 不过、这会让我进入死区;while 循环在读取.PCM 文件并将其转换为.xlsx 和.wav 文件时成功、但另一方面、它仍然失败。
我仍然认为 使用 printf 的提示之一 可能会有所帮助。 您可能已经在所有程序中溢出了堆栈、但到目前为止、它还没有失败。
谢谢、此致、
乔治
我现在注意到您的代码中出现了这个问题...
[引用用户="Eric Graham "]
fp2 = fopen ("E:\\Code Composer Studio Workspace\\EE489\\Lab1_FileIO_1\\output\\C55DSPUSBStickAudioTest.wav"、"WB");//打开输出文件
如果(FP1 =NULL)//检查输入文件是否存在
[/报价]
fopen 会分配给 FP2、但 FP1会检查为 NULL。 您需要检查 FP2是否为 NULL。
很抱歉、我没有早点注意到这一点。
谢谢、此致、
乔治