![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
alexwin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 17.4.2017 Репутация: нет Всего: нет |
Здравствуйте
Помогите пожалуйста с задачкой ![]() прочитать данные в массив из wav файла без заголовка (заголовок читается у меня ![]() ![]() Для преобразования Фурье использовать метод трапеций или парабол
#include <cstdlib> #include <iostream> #include <fstream> #include <windows.h> using namespace std; struct WAVHEADER { char chunkId[4]; // Информация о формате файла (RIFF), Содержит символы “RIFF” в ASCII кодировке; unsigned long ChunkSize; // Размер без chunkId[4]; char format[4]; // Формат потоковых данных (WAVE); char subchunk1Id[4]; // Описание параметров WAV-файла (fmt-chunk); unsigned long subchunk1Size; // Размер подструктуры subchunk1 (16 байт); unsigned short wFomatTag; // Аудио формат (PCM = 1); unsigned short nChannels; // Количество каналов (Моно = 1, Стерео = 2); unsigned long SamplesPerSec; // Частота дискретизации в Гц; unsigned long ByteRate; // Кол-во передаваемых байт в секунду воспроизведения; unsigned short blockAlign; // Выравнивание блока данных Размер сэмпла в байтах 16 бит = 2 байта моно, 32 бита = 4 байта стерео (включая все каналы); unsigned short BitsPerSample; // Количество бит в сэмпле. Так называемая “глубина” или точность звучания. 8 бит, 16 бит и т.д. /// битов на отсчет char Subchunk2ID[4]; // Символы "Data", начало чанка данных; unsigned long Subchunk2Size; // Размер области данных в байтах; unsigned char rawData[491516] ; // Raw sound data; }; int main(int argc, char *argv[]) { setlocale(LC_ALL, "Russian"); FILE *wav; wav = fopen("C:\\Windows\\Media\\Alarm01.wav", "rb"); if(wav!=NULL) cout<<"файл открыт для чтения\n"; WAVHEADER header; fread(&header, sizeof(WAVHEADER), 1, wav); // Выводим полученные данные printf("\n Считывание заголовка WAV-файла\n-------------------------------------------------\n"); printf(" Инфо о формате: %c%c%c%c\n", header.chunkId[0], header.chunkId[1], header.chunkId[2], header.chunkId[3]); printf(" Размер: %ld байт\n", header.ChunkSize); printf(" Формат данных: %c%c%c%c\n", header.format[0], header.format[1], header.format[2], header.format[3]); printf(" Параметы WAV-файла: %c%c%c%c\n", header.subchunk1Id[0], header.subchunk1Id[1], header.subchunk1Id[2], header.subchunk1Id[3]); printf(" Размер подструктуры subchunk1Size: %ld\n", header.subchunk1Size); printf(" Аудио формат PCM = 1: %d\n", header.wFomatTag); printf(" Каналов: %d", header.nChannels); if (header.nChannels == 2) { printf(" => Стерео \n"); } else { printf(" => Моно \n"); } printf(" Частота дискретизации: %d Гц\n", header.SamplesPerSec); printf(" Байт в секунду: %ld\n", header.ByteRate); printf(" Выравнивание блока данных в байтах: %d\n", header.blockAlign); printf(" Дискретность-Количество бит сэмпла: %d бит\n", header.BitsPerSample); printf(" Символы 'Data', начало чанка данных: %c%c%c%c\n", header.Subchunk2ID[0],header.Subchunk2ID[1],header.Subchunk2ID[2],header.Subchunk2ID[3]); printf(" Размер области данных: %ld байт\n", header.Subchunk2Size); /* Длительность воспроизведения в секундах float fDurationSeconds = 1.f * header.Subchunk2Size / (header.BitsPerSample / 8) / header.nChannels / header.SamplesPerSec; int iDurationMinutes = (int)(fDurationSeconds) / 60; fDurationSeconds = fDurationSeconds - (iDurationMinutes * 60); printf(" Продолжительность: %02d:%02.f\n", iDurationMinutes, fDurationSeconds); */ cout << "Press the enter key to continue ..."; cin.get(); return EXIT_SUCCESS; } |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
После того, как считали заголовок, нужно узнать сколько байтов осталось в файле и запихнуть их в массив.
P.S. после того, как выполните преобразование Фурье, не забудьте освободить буфер. P.P.S. сначала убидитесь, что бы значение size было подсчитатно верно. Я на 100% не уверен в правильности метода, который я предложил для подсчета размера, но, вроде как, верно в нем все. Это сообщение отредактировал(а) rudolfninja - 17.4.2017, 17:46 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |