Как использовать WAVEHDR - PullRequest
2 голосов
/ 20 июня 2011

Где найти информацию о том, какие данные должны быть в буфере lpData для структуры WAVEHDR?

MSDN просто говорит:

lpData

Указатель на буфер сигналов.

typedef struct wavehdr_tag {
    LPSTR               lpData;
    DWORD               dwBufferLength;
    DWORD               dwBytesRecorded;
    DWORD_PTR           dwUser;
    DWORD               dwFlags;
    DWORD               dwLoops;
    struct wavehdr_tag  *lpNext;
    DWORD_PTR           reserved;
} WAVEHDR, *LPWAVEHDR;

Спасибо

Ответы [ 4 ]

3 голосов
/ 27 сентября 2012

Я нашел этот учебник Дэвида Овертона очень полезным.

По сути, когда вы вызываете waveOutOpen, вы передаете структуру формата. Вот из его кода:

WAVEFORMATEX wfx; /* look this up in your documentation */
wfx.nSamplesPerSec = 44100; /* sample rate */
wfx.wBitsPerSample = 16; /* sample size */
wfx.nChannels = 2; /* channels*/

Тогда ваши данные в lpData занимают всего 2 байта на выборку (короткое число со знаком), слева, справа, слева и т. Д.

1 голос
/ 27 апреля 2017

lpData похож на старый буфер DOS DMA. Таким образом, вы можете написать фрагмент трека на нем, как цикл одного блока.

Итак, в C вы объявляете некоторый правильный массив ... char myarray [porpersize]. и затем вы указываете это - >>> myhdrstruc.lpData = & myarray [0]

0 голосов
/ 20 июня 2011

Это расплывчато, потому что данные могут быть в разных форматах.Формат обычно определяется как WAVEFORMATEX .

0 голосов
/ 20 июня 2011

CCRMA имеет хороший обзор формата волнового файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...