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

Ошибка загрузки сэмплов из WAV - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1 http://www.cyberforum.ru/cpp-beginners/thread1100924.html
Задание: Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1. Нули из массива удалила, и теперь не знаю как вставлять 1 в полученный массив. // #include...
C++ С клавиатуры вводятся координаты 2 линий Здравствуйте...задание:С клавиатуры вводятся координаты 2 линий. Если угол между ними 90±10 градусов, то вывести сообщение, что они перпендикулярны http://www.cyberforum.ru/cpp-beginners/thread1100915.html
Метод Адамса для решения дифференциальных уравнений второго порядка C++
Очень нужна помощь.. У кого есть текст программы метода Адамса для решения дифференциальных уравнений второго порядка на С++, можете скинуть код, очень нужно
Вычислить количество элементов массива, стоящих на четных и нечетных позициях C++
Помогите пожалуйста исправить ошибки в программе, с использованием шаблов класса. Задача состоит в том что нужно вычислить кол-во элементов массива, стоящих на четных и нечетных позициях. Вот...
C++ Создание программы для распредиления текста по файлам http://www.cyberforum.ru/cpp-beginners/thread1100861.html
Здравствуйте уважаемые пользователи. У меня возник вопрос, как можно написать программу, которая будет из определенных 100 предложений, выбирать одно и сохранять его в файл, как бы рандомно.То есть...
C++ Сортировка массива Помогите, пожалуйста, не могу отсортировать символы с помощью таблицы ANSI #include <iostream> using namespace std; void main() { int n; cout<<"Vvedit rozmirnist 1-oj mnogunu A n="; подробнее

Показать сообщение отдельно
korul
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9

Ошибка загрузки сэмплов из WAV - C++

20.02.2014, 00:48. Просмотров 783. Ответов 5
Метки (Все метки)

Здравствуйте, извиняюсь сразу,миллион раз обсуждали эту проблему,но поиск мне не помог ее решить.
у меня программа загружает wav файл и потом я должен получить массив с отчетами, я не знаю как учесть заголовок,чтобы он не записывался в сэмплы, но беда вся в том , что n (количество отчетов) у меня получается в 2 раза больше чем j (сколько отчетов записывается в массив) ,зарание благодарен
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <fstream>
 
using namespace std;
// Структура, описывающая заголовок WAV файла.
struct WAVHEADER
{
    // WAV-формат начинается с RIFF-заголовка:
 
    // Содержит символы "RIFF" в ASCII кодировке
    // (0x52494646 в big-endian представлении)
    char chunkId[4];
 
    // 36 + subchunk2Size, или более точно:
    // 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
    // Это оставшийся размер цепочки, начиная с этой позиции.
    // Иначе говоря, это размер файла - 8, то есть,
    // исключены поля chunkId и chunkSize.
    unsigned long chunkSize;
 
    // Содержит символы "WAVE"
    // (0x57415645 в big-endian представлении)
    char format[4];
 
    // Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
    // Подцепочка "fmt " описывает формат звуковых данных:
    
    // Содержит символы "fmt "
    // (0x666d7420 в big-endian представлении)
    char subchunk1Id[4];
 
    // 16 для формата PCM.
    // Это оставшийся размер подцепочки, начиная с этой позиции.
    unsigned long subchunk1Size;
 
    // Аудио формат, полный список можно получить здесь [url]http://audiocoding.ru/wav_formats.txt[/url]
    // Для PCM = 1 (то есть, Линейное квантование).
    // Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
    unsigned short audioFormat;
 
    // Количество каналов. Моно = 1, Стерео = 2 и т.д.
    unsigned short numChannels;
 
    // Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
    unsigned long sampleRate;
 
    // sampleRate * numChannels * bitsPerSample/8
    unsigned long byteRate;
 
    // numChannels * bitsPerSample/8
    // Количество байт для одного сэмпла, включая все каналы.
    unsigned short blockAlign;
 
    // Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
    unsigned short bitsPerSample;
 
    // Подцепочка "data" содержит аудио-данные и их размер.
 
    // Содержит символы "data"
    // (0x64617461 в big-endian представлении)
    char subchunk2Id[4];
 
    // numSamples * numChannels * bitsPerSample/8
    // Количество байт в области данных.
    unsigned long subchunk2Size;
 
    // Далее следуют непосредственно Wav данные.
    
};
 
 
 
 
 
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    FILE *file;
    errno_t err;
    err = fopen_s(&file, "Slipknot - Three Nil.wav", "rb");
    if (err)
    {
        printf_s("Failed open file, error %d", err);
        return 0;
    }
 
    WAVHEADER header;
 
    fread_s(&header, sizeof(WAVHEADER), sizeof(WAVHEADER), 1, file);
 
    // Выводим полученные данные
    printf_s("Sample rate: %d\n", header.sampleRate);
    printf_s("Channels: %d\n", header.numChannels);
    printf_s("Bits per sample: %d\n", header.bitsPerSample);
 
 
   // Посчитаем длительность воспроизведения в секундах
float fDurationSeconds = 1.f * header.subchunk2Size / (header.bitsPerSample / 8) / header.numChannels / header.sampleRate;
int iDurationMinutes = (int)(fDurationSeconds) / 60;
fDurationSeconds = fDurationSeconds - (iDurationMinutes * 60);
printf_s("Duration: %02d:%02.f\n", iDurationMinutes, fDurationSeconds);
 
//выгрузим данные из wav    
 ifstream in ("Slipknot - Three Nil.wav", ios::binary); // open file
    if(!in) {cout << "LOX"; return 0;} 
    in.seekg(0, ios::end);
 
    long q=in.tellg();
    long bitsize = 8*in.tellg();
    //размер файла в байтах. 1 бит - 1 цифра. т.о. размер *8=количество элементов/32 получим кол-во отчетов
    long n = (bitsize/header.bitsPerSample*header.numChannels);
 
 
   // long n=header.subchunk2Size*8/(header.numChannels * header.bitsPerSample);
 
    float *data = new float[n];  //объявляем массив данных выбранного канала
    
    ifstream instrm ("Slipknot - Three Nil.wav", ios::binary); //заново открываем для считывания данных
    float a = 0;
    int j = 0;
    int i = 0;
    cout << "\nЗагрузка данных в память\n" << endl;
    while(instrm.read((char *)&a, sizeof(float)))   // читаем числа по одному из файла и заполняем массив
    {                                             
        data[j] = a;
        //cout<<data[j]<<endl;
        j++;                    
           
    }
    cout << "Загрузка " << j << " объектов завершена\n" << endl;  
 
    fclose(file);
 
   
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru