У меня есть простой читатель WAV, который я нашел онлайн давным -давно, я вернулся к его использованию, но, похоже, он заменит около 1200 образцов в конце чанка данных одним случайным повторяющимся номером , например, -126800. В конце выборки ожидается молчание, поэтому число должно быть нулевым. < /P>
Вот простая программа: < /p>
void main() {
WAV_HEADER* wav = loadWav(".\\audio\\test.wav");
double sample_count = wav->SubChunk2Size * 8 / wav->BitsPerSample;
printf("Sample count: %i\n", (int)sample_count);
vector samples = vector();
for (int i = 0; i < wav->SubChunk2Size; i++)
{
int val = ((wav->data & 0xff) data[i + 1] & 0xff);
samples.push_back(val);
}
printf("done\n");
}
< /code>
И вот WAV Reader: < /p>
typedef struct
{
//riff
uint32_t Chunk_ID;
uint32_t ChunkSize;
uint32_t Format;
//fmt
uint32_t SubChunk1ID;
uint32_t SubChunk1Size;
uint16_t AudioFormat;
uint16_t NumberOfChanels;
uint32_t SampleRate;
uint32_t ByteRate;
uint16_t BlockAlignment;
uint16_t BitsPerSample;
//data
uint32_t SubChunk2ID;
uint32_t SubChunk2Size;
//Everything else is data. We note it's offset
char data[];
} WAV_HEADER;
#pragma pack()
inline WAV_HEADER* loadWav(const char* filePath)
{
long size;
WAV_HEADER* header;
void* buffer;
FILE* file;
fopen_s(&file,filePath, "r");
assert(file);
fseek(file, 0, SEEK_END);
size = ftell(file);
rewind(file);
std::cout
Я не уверен, в чем проблема, я подтвердил, что метадан нет, и не существует несоответствия между числами, считываемыми из заголовка и фактического файл. Я предполагаю, что на моей стороне это размер/смещение, но я не вижу его.
Любая помощь приветствует.>
Подробнее здесь: https://stackoverflow.com/questions/706 ... rather-tha