Я пытался отследить это некоторое время, но я не знаю, где искать дальше. Всякий раз, когда я вызываю waveOutPrepareHeader (), я получаю INVALPARAMS, указывающий «Базовый адрес буфера не выровнен с размером выборки».
В настоящее время я готовлю свой заголовок из данных после тега «data» (и длины) из файла, используя метод, найденный через MSDN.
public Wave.SystemError Read(BinaryReader rdr, uint readLength)
{
dwBufferLength = readLength;
byte[] data = new byte[readLength];
rdr.Read(data, 0, data.Length);
if (lpData == IntPtr.Zero)
lpData = Memory.LocalAlloc(Memory.LMEM_FIXED,
(uint)data.Length);
if (lpData == IntPtr.Zero)
return Wave.SystemError.NOMEM;
Marshal.Copy(data, 0, lpData, data.Length);
return Wave.SystemError.NOERROR;
}
Все параметры класса обнуляются перед использованием, после вызова этой функции в волновом файле я получаю
dwBufferLength = 32768
dwBytesRecorded = 0
dwFlags = 0
dwLoops = 0
dwUser = 0
lpData = 384656
lpNext = 0
reserved = 0
при передаче в
return waveOutPrepareHeader(hWaveOut,
ref headerBuffer[buffIndex],
(uint)Marshal.SizeOf(headerBuffer[buffIndex]));
где headerBuffer [buffIndex] - вышеупомянутый WAVEHDR, который я получаю 11 (MMSYSERR_INVALPARAM). Я проверил, и мой hWaveOut и размер кажутся нормальными, поэтому я вынужден сделать вывод, что проблема с заголовком, но я не могу понять, что не так или даже что проверить.
Что мне нужно сделать, чтобы исправить эту ошибку или, если это не удалось, что я могу проверить, чтобы выяснить, что ее вызывает? Любая помощь будет принята с благодарностью