Мне нужно воспроизвести аудиофайл (.wav) с функцией waveOutOpen. Я нашел руководство для этого. http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId = 3 но я не знаю, как это изменить для файлов .wav. Пожалуйста, помогите мне…
Тебе нужно mmioOpen
, mmioRead
функции для чтения полезных данных из файла .WAV, а затем вы сможете поставить в очередь буферы, используя waveOut*
API. Если данные в формате PCM, вы можете отправить их для воспроизведения напрямую, в противном случае вам может понадобиться распаковать их с помощью ACM API.
Вы найдете отличные фрагменты кода, ища упомянутые функции API:
вот как я это делаю (файл wav хранится в ресурсе):
static void PlaySound(LPCTSTR lpszSound)
{
HRSRC hRes; // resource handle to wave file
HGLOBAL hData;
BOOL bOk = FALSE;
if ((hRes = ::FindResource(AfxGetResourceHandle(), lpszSound,
_T("WAVE"))) != NULL &&
(hData = ::LoadResource(AfxGetResourceHandle(), hRes)) != NULL)
{
// found the resource, play it
bOk = ::sndPlaySound((LPCTSTR)::LockResource(hData),
SND_MEMORY|SND_ASYNC|SND_NODEFAULT);
::FreeResource(hData);
}
//if (!bOk)
//{
// static BOOL bReported = FALSE;
// if (!bReported)
// {
// AfxMessageBox(IDS_CANNOT_PLAY_SOUND);
// bReported = TRUE; // once please
// }
//}
}
inline static void PlaySound(UINT nIDS)
{ ::PlaySound(MAKEINTRESOURCE(nIDS)); }