Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Работа с Wav файлом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа читающая почту http://www.cyberforum.ru/cpp/thread1224741.html
Привет. Надумал такую идею. Есть почтовый ящик с кучей писем. Нужно из этого ящика скопировать в таблицу word дату, отправителя и название каждого письма. Ящик открывается в браузере(или если будет...
C++ Написать скрипт для игры WoW на проверку баффов из БД и сохранение их в отдельную таблицу помогите написать скрипт На проверку баффов из бд и сохранение их в отдельную таблицу. игра world of warcraft по типу этого bool Unit::HasAura(uint32 spellId, uint64 casterGUID, uint64... http://www.cyberforum.ru/cpp/thread1224718.html
Написать функцию вычисляющую амплитудный спектр отсчетов звукового сигнала формата WAV C++
Нужно написать функцию вычисляющую амплитудный спектр отсчетов звукового сигнала формата WAV. Посоветуйте с чего начать выполнение задания, что изучить? на данный момент я пока понял, что нужно...
Большая загрузка при распознавании лиц с камеры C++
Всем привет. почти закончил писать программу и столкнулся с такой проблемой. Есть кусок когда, который отвечает за распоознование лиц с камеры void Faces(IplImage* frame1) { CascadeClassifier...
C++ Как скачать с базы данных sqllite нужные мне данные в структуру? http://www.cyberforum.ru/cpp/thread1224453.html
Подскажите пожалуйста, работаю через sqllite, как скачать с базы данных нужные мне данные, например в структуру rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); static int...
C++ После сборки в Release краш с Access Violation Имеется Dll, собранная в Release /MT. На Win8 все прекрасно работает, а на 7ке крашится с исключением c0000005. Причем если запускать в режиме совместимости, то ошибка исчезает. А так же, когда... подробнее

Показать сообщение отдельно
Myha_fly
Заблокирован

Работа с Wav файлом - C++

09.07.2014, 11:57. Просмотров 3024. Ответов 18
Метки (Все метки)

Пишу курсовую. Надо получить спект Wav файла. Прочитал достаточно статей и форумов. В общем оформил шапку и вытащил параметры.

Для того, что бы получить спектр нужно применить преобразование Фурье, но для этого нужны данные.
тут у меня и возникли вопросы.
И как я понимаю сами данные Wav файла находятся после шапки.

Но я не понимаю, как узнать сколько их и какой размерности. То есть, нужно ли создавать для них массив и какой размерности. В каком формате данные. и в каком их лучше всего отправить на обработку

нашел вот это (0x00,0x01),(0x22,0x43),(0x74,0x15),(0x74,0x65)... - 16 бит моно

что касается самого wav файла, работаю с 44100Гц 1 канал 2 байта

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <fstream>
#include <iostream>
using namespace std;
struct WAVHEADER
{
char chunkId[4];// RIFF-заголовок:
unsigned long chunkSize;
char format[4]; // Содержит символы "WAVE"
char subchunk1Id[4];// Содержит символы "fmt "
unsigned long subchunk1Size; // Это оставшийся размер подцепочки, начиная с этой позиции.
unsigned short audioFormat;// Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
unsigned short numChannels;// Количество каналов. Моно = 1, Стерео = 2 и т.д.
unsigned long sampleRate;// Частота дискретизации. 8000 Гц, 44100 Гц и т.д
unsigned long byteRate;// sampleRate * numChannels * bitsPerSample/8
unsigned short blockAlign; // numChannels * bitsPerSample/8  Количество байт для одного сэмпла, включая все каналы.
unsigned short bitsPerSample; // Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
char subchunk2Id[4]; // Содержит символы "data"
unsigned long subchunk2Size; //numSamples * numChannels * bitsPerSample/8 Количество байт в области данных.
};
void main(){
    FILE *file;
    errno_t err;
    err = fopen_s(&file, "00032.00.wav", "rb");
    if (err)
    {
    printf_s("Failed open file, error %d", err);
    system("pause");
    exit(0);
    }
    WAVHEADER head;
    fread_s(&head, sizeof(WAVHEADER), sizeof(WAVHEADER), 1, file);
    
    float fDurationSeconds = 1.f * head.subchunk2Size / (head.bitsPerSample / 8) / head.numChannels / head.sampleRate;
    int iDurationMinutes = (int)floor(fDurationSeconds) / 60;
    fDurationSeconds = fDurationSeconds - (iDurationMinutes * 60);
    printf_s("Duration: %02d:%02.f\n", iDurationMinutes, fDurationSeconds);
 
    printf_s("Sample rate: %d\n", head.sampleRate);
    printf_s("Channels: %d\n", head.numChannels);
    printf_s("Byte per sample: %d\n", head.bitsPerSample/8);
    /*printf_s("Byte Rate: %d\n", head.byteRate);
    printf_s("Block Align: %d\n", head.blockAlign);
    printf_s("Subchunk 2 Size: %d\n", head.subchunk2Size);*/
    system("pause");
 
???????????????????
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru