我正在使用DirectSound处理一个项目,并且我正在努力使声音文件的头信息传递给处理方法。 WAV文件一开始就有一个RIFF chunkID。在调用ProcessWaveFile方法时,我传递文件路径以及头信息。 'RIFF'chunkID存储在char中。我需要能够根据实际文件chunkID检查chunkID的各个字符,以确保文件正确。这是我的代码片段:
if((waveFileHeader.chunkId[0] != chunkID[0]) || (waveFileHeader.chunkId[1] != chunkID[1]) ||
(waveFileHeader.chunkId[2] != chunkID[2]) || (waveFileHeader.chunkId[3] != chunkID[3]))
{
MessageBox(hwnd, L"ChunkID not in the right Format.", L"Error", MB_OK);
return false;
}
chunkId是文件的实际ID,而chunkID是通过要检查的函数传递的ID。你可以看到我试图像这里的数组一样处理它。 chunkId存储在char []中。我应该将chunkID存储在数组中吗?我该如何指定它?
bool ProcessWaveFile(char*, IDirectSoundBuffer8**, HWND, int, char, char, char, char, std::string, int, int);
以上是ProcessWaveFile方法的头文件行。 chunkID被指定为其中一个字符。我可以将它改为char [],但实际调用方法时遇到困难。这是一个示例调用:
result1 = ProcessWaveFile("../terrain_sky/data/sound01.wav", &m_secondaryBuffer1, hwnd,
44100, 'RIFF', 'fmt ', 'WAVE', 'data', "WAVE_PCM_FORMAT", 16, 2);
如何在不中断变量链的情况下声明此调用中包含RIFF的数组值?
答案 0 :(得分:0)
如果您正在寻找一种方便的方法来检查文件是否以“RIFF”开头,那么您可能会有更方便的方法来查找。由于ChunkID长度为4个字节,因此您可能希望将数据类型(也是4个字节长的数据类型)存储在预期的“RIFF”中(而不是长度为4的char数组),然后将前四个字节解析为,例如,一个int。
我有一个以RIFF开头的wav文件,这里是你将前四个字节解释为int时得到的数字。
od -ci -N4 ./test.wav
0000000 R I F F
1179011410
因此选项-ci
首先将每个字节打印为ASCII等效值(RIFF),然后将每组4个字节打印为整数。所以真的,1179011410 ='RIFF',整数可能更容易检查。
但是,除此之外,我不确定为什么需要将'RIFF'传递给ProcessWaveFile()函数。如果您只处理RIFF文件,那么您可能会将这些信息存储在ProcessWaveFile()函数本身中。