Тогда вот впринципе код, файл проверял, частота, битрейт совпадает(при дебаге смотрел). Что не так не знаю(
#include"windows.h"
#include<string>
#include"XAudio2.h"
struct sWavHeader
{
// WAV-формат начинается с RIFF-заголовка:
// Содержит символы "RIFF" в ASCII кодировке
// (0x52494646 в big-endian представлении)
char m_cChunkId[4];
// 36 + subchunk2Size, или более точно:
// 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
// Это оставшийся размер цепочки, начиная с этой позиции.
// Иначе говоря, это размер файла - 8, то есть,
// исключены поля chunkId и chunkSize.
DWORD m_dwChunkSize;
// Содержит символы "WAVE"
// (0x57415645 в big-endian представлении)
char m_cFormat[4];
// Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
// Подцепочка "fmt " описывает формат звуковых данных:
// Содержит символы "fmt "
// (0x666d7420 в big-endian представлении)
char m_cSubchunk1Id[4];
// 16 для формата PCM.
// Это оставшийся размер подцепочки, начиная с этой позиции.
DWORD m_dwSubchunk1Size;
// Аудио формат, полный список можно получить здесь http://audiocoding.ru/wav_formats.txt
// Для PCM = 1 (то есть, Линейное квантование).
// Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
WORD m_wAudioFormat;
// Количество каналов. Моно = 1, Стерео = 2 и т.д.
WORD m_wNumChannels;
// Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
DWORD m_dwSampleRate;
// sampleRate * numChannels * bitsPerSample/8
DWORD m_dwByteRate;
// numChannels * bitsPerSample/8
// Количество байт для одного сэмпла, включая все каналы.
WORD m_wBlockAlign;
// Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
WORD m_wBitsPerSample;
// Подцепочка "data" содержит аудио-данные и их размер.
// Содержит символы "data"
// (0x64617461 в big-endian представлении)
char m_cSubchunk2Id[4];
// numSamples * numChannels * bitsPerSample/8
// Количество байт в области данных.
DWORD m_dwSubchunk2Size;
// Далее следуют непосредственно Wav данные.
};
//Заголовок wav файла
WAVEFORMATEX g_sDataDesc;
//Интерфейс звука
IXAudio2SourceVoice* g_pSource;
//Буффер и информация о аудио данных для интерфейса
XAUDIO2_BUFFER g_sBuffer;
//Основной аудио интерфейс
IXAudio2* g_pAudio;
//Основной голос
IXAudio2MasteringVoice* g_pMasteringVoice;
//Хендл файла
HANDLE v_hFile;
//Структура загаловка wav файла
sWavHeader v_sWavHeader;
//Буффер данных из файла
BYTE* g_pBuffer;
//Считаные байты
DWORD v_dwReadBytes;
int __stdcall WinMain(HINSTANCE a_hInstance,
HINSTANCE a_hPrevInstance,
LPSTR a_pCmdLine, int a_iCmdShow)
{
CoInitializeEx(0,COINIT_MULTITHREADED);
if(FAILED(XAudio2Create(&g_pAudio)))
{
MessageBox(NULL, "Can't create main audio interface.", "Error", MB_OK);
return false;
}
g_pAudio->CreateMasteringVoice(&g_pMasteringVoice);
//Открываем файл и считываем информацию об аудио файле
v_hFile=CreateFile("Grom.wav",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,0);
ReadFile(v_hFile,(void*)&v_sWavHeader,sizeof(sWavHeader),&v_dwReadBytes,NULL);
//Выделяю память под буффер
g_pBuffer=new BYTE[v_sWavHeader.m_dwChunkSize-36];
//Считываю аудио данные
ReadFile(v_hFile,(void*)g_pBuffer,v_sWavHeader.m_dwChunkSize-36,&v_dwReadBytes,NULL);
CloseHandle(v_hFile);
//Заполняю структуры для хаудио2
g_sDataDesc.wFormatTag=1;
g_sDataDesc.nChannels=v_sWavHeader.m_wNumChannels;
g_sDataDesc.nSamplesPerSec=v_sWavHeader.m_dwSampleRate;
g_sDataDesc.nAvgBytesPerSec=v_sWavHeader.m_dwByteRate;
g_sDataDesc.nBlockAlign=v_sWavHeader.m_wBlockAlign;
g_sDataDesc.wBitsPerSample=v_sWavHeader.m_wBitsPerSample;
g_sDataDesc.cbSize=18;
g_sBuffer.Flags=XAUDIO2_END_OF_STREAM;
g_sBuffer.AudioBytes=v_sWavHeader.m_dwChunkSize-36;
g_sBuffer.pAudioData=g_pBuffer;
g_sBuffer.PlayBegin=0;
g_sBuffer.PlayLength=0;
g_sBuffer.LoopBegin=0;
g_sBuffer.LoopLength=0;
g_sBuffer.LoopCount=XAUDIO2_LOOP_INFINITE;
//Создаю источник
g_pAudio->CreateSourceVoice(&g_pSource,&g_sDataDesc);
//Передаю информацию в буффер
g_pSource->SubmitSourceBuffer(&g_sBuffer);
//И о божественная какашка, почему ты проигрываешь белый шум!!!!!!
g_pSource->Start();
MessageBox(NULL, "Stop.", "Message", MB_OK);
g_pSource->Stop();
g_pSource->DestroyVoice();
g_pMasteringVoice->DestroyVoice();
g_pAudio->Release();
CoUninitialize();
return 0;
}