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

Прочитать несколько секунд wav файла в массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Есть ли готовая функция для работы с массивами? http://www.cyberforum.ru/cpp-beginners/thread1246178.html
Подскажите, что за функция в cpp есть, для форматирования массивов? Вот в павне можно было сделать так: char str; format(str, 256, "color %x", 1); //справа параметры, как printf, только записывается в массив. system(str); Вот в c++ нет такой, а как же тогда форматировать массивы?
C++ Метод не возвращает значение Здравствуйте. Создал простейший метод, для возвращения введённого значения. А возвращает то-адрес, то-ли что-то непонятно. Прошу объяснить в чём проблема // ConsoleApplication18.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1246170.html
C++ Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: void Zipper::OutCompress(string binary) { FILE *bin = fopen(binary.c_str(), "rb"); char info_block_size; fread(info_block_size, 1, 5, bin); int _sz = atoi(info_block_size);
Найти значение выражения, если знак операции вводится с клавиатуры C++
пример с вводом знака с клавы int a, char b, int c как сделать int s=abc
C++ "Обнаружено исключение. Возможно, оно вызвано расширением" (VS2010) http://www.cyberforum.ru/cpp-beginners/thread1246132.html
C++ Ошибка: undefined reference to при наследовании класса Здравствуйте форумчане. Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок: Ошибка: undefined reference to За основу брал MyService = FacebookService FacebookService.C https://github.com/kdeforche/wt/blob/master/src/Wt/Auth/FacebookService.C FacebookService.H https://github.com/kdeforche/wt/blob/master/src/Wt/Auth/FacebookService OAuthService.C... подробнее

Показать сообщение отдельно
_Ivana
2189 / 1394 / 124
Регистрация: 01.03.2013
Сообщений: 4,148
Записей в блоге: 2
23.08.2014, 16:27     Прочитать несколько секунд wav файла в массив
Есть win32 проект в Студии. Задача - запросить диалог выбора wav файла, проверить что это wav файл, прочитать его хедер, взять оттуда нужные данные в виде чисел - битрейт, количество каналов, формат и т.п. и затем прочитать заранее заданное количество отсчетов в заранее приготовленный для них массив. Причем, если файл будет моно, то отсчеты читаются как есть, если стерео - то при кодировке центральный/разностный считывается только центральный канал, при правый/левый - среднее арифметическое. Если файл будет не 16-битный, то приводим его в 16 бит - домножаем или делим отсчеты на коэффициент. Я сейчас ооочень коряво реализовал чтение моно вавки, но подозреваю что и здесь у меня полно ошибок, например при прочтении хедера даже не могу взять параметры файла. Как это можно сделать по-нормальному? Если будет реализовано по ООП-шному через классы, то разберусь. Если через дополнительные библиотеки - то смотря какие, WinMM.Lib у меня уже так и так используется, а другие не хотелось бы подключать. Хотя если с ними будет красиво и стройно, то тоже придется.
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
void ReadWav_Proc(HWND hWnd)
{
    SetWindowTextW(hwndSta1, L"Read...");
    HANDLE hFile = INVALID_HANDLE_VALUE;
    if((hFile = CreateFile(L"Test.wav", GENERIC_READ, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) {
        SetWindowTextW(hwndSta1, L"Не могу открыть файл");
        return;
    }
    WAVEHDR WaveTestHdr;
    DWORD readBytes;
    wchar_t buf[20];
 
    if (ReadFile(hFile, &WaveTestHdr, sizeof(WAVEHDR), &readBytes, NULL)) {
        wsprintfW(buf, L"%lu", readBytes);
        SetWindowTextW(hwndSta1, buf);
    } else {
        SetWindowTextW(hwndSta1, L"Не могу прочитать хедер файла");
        return;
    }
    if (ReadFile(hFile, waveOut.buf, sizeof(waveOut.buf), &readBytes, NULL)) {
        wsprintfW(buf, L"%lu", readBytes);
        SetWindowTextW(hwndSta1, buf);
    } else {
        SetWindowTextW(hwndSta1, L"Не могу прочитать данные файла");
        return;
    }
    CloseHandle(hFile);
}
Добавлено через 1 час 17 минут
UPD заголовки вроде уже читаю
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
typedef struct  WAV_HEADER{
        char                RIFF[4];        // RIFF Header      Magic header
        unsigned long       ChunkSize;      // RIFF Chunk Size
        char                WAVE[4];        // WAVE Header
        char                fmt[4];         // FMT header
        unsigned long       Subchunk1Size;  // Size of the fmt chunk
        unsigned short      AudioFormat;    // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM
        unsigned short      NumOfChan;      // Number of channels 1=Mono 2=Sterio
        unsigned long       SamplesPerSec;  // Sampling Frequency in Hz
        unsigned long       bytesPerSec;    // bytes per second
        unsigned short      blockAlign;     // 2=16-bit mono, 4=16-bit stereo
        unsigned short      bitsPerSample;  // Number of bits per sample
        char                Subchunk2ID[4]; // "data"  string
        unsigned long       Subchunk2Size;  // Sampled data length
 
    }my_wav_hdr;
    my_wav_hdr WaveTestHdr;
 
    DWORD readBytes;
    wchar_t buf[500];
    if (ReadFile(hFile, &WaveTestHdr, sizeof(WaveTestHdr), &readBytes, NULL)) {
        wsprintfW(buf, L"%.4S %lu %.4S %.4S %lu %u %u %lu %lu %u %u %.4S %lu",
            WaveTestHdr.RIFF,
            WaveTestHdr.ChunkSize,
            WaveTestHdr.WAVE,
            WaveTestHdr.fmt,
            WaveTestHdr.Subchunk1Size,
            WaveTestHdr.AudioFormat,
            WaveTestHdr.NumOfChan,
            WaveTestHdr.SamplesPerSec,
            WaveTestHdr.bytesPerSec,
            WaveTestHdr.blockAlign,
            WaveTestHdr.bitsPerSample,
            WaveTestHdr.Subchunk2ID,
            WaveTestHdr.Subchunk2Size);
        SetWindowTextW(hwndSta1, buf);
    } else {
        SetWindowTextW(hwndSta1, L"Не могу прочитать хедер файла");
        return;
    }
Непонятно только, почему структура заголовка вав файла не задефайнена в ММ-библиотеке, пришлось объявлять свою... Или она там кусками задефайнена, т.к. разные вавки имеют различную структуру заголовков?...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru