Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Niaden
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 15
1

Какой тип данных использовать для хранения сэмплов?

30.10.2012, 18:59. Просмотров 491. Ответов 0
Метки нет (Все метки)

Добрый день. Начал изучать формат .wav. Хочу прочитать его заголовок, ну и, собсно, данные. С заголовками все ясно.
А какой тип данных мне использовать для сэмплов, чтобы был доступ к каждому сэмплу?
или доступ к каждому сэмплу не нужен? и достаточно будет двухбайтового short int?
Начал юзать прогу 010 Editor - реадер двоичных файлов. там представляется структура читаемого файла. Эта прога написана на Си и вот там для хранения сэмплов используется short.


Вот прога для считывания данных с файла .wav. Считываю данные и проверяю, правильно ли считалось методом вывода прочитанного на консоль и сверки с байтами файла аааа.wav в проге 010 Editor. В конце проги динамически выделяю массив short. Прога работает, но насчет типа данных для сэмплов я не уверен. нужен ли доступ к 1му сэмплу? или можно обойтись к доступу к паре сэмплов?

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

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
#include <iostream>
 
using namespace std;
 
struct Wav_Header
{
    char Wav_ChunkId[4];
    int Wav_ChunkSize;
    char Wav_Format[4];
    char Wav_SubChunkId[4];
    int Wav_SubChunkSize;
    short int Wav_AudioFormat;
    short int Wav_NumChannels;
    int Wav_SampleRate;
    int Wav_ByteRate;
    short int Wav_BlockAlign;
    short int Wav_BitPerSample;
    char Wav_SubChunk2Id[4];
    int Wav_SubChunk2Size;
};
 
int main()
{
    FILE *rd_wav;
    Wav_Header ob1;
    cout<<sizeof(short)<<endl;
    if ((rd_wav=fopen("c:\\aaaa.wav","rb"))==NULL)
        {
        fprintf(stderr,"owibka otkritiya faila dlya 4teniya");
        return 1;
        }
 
    fread(&ob1,sizeof(ob1),1,rd_wav);
    cout<<ob1.Wav_ChunkSize<<endl;
    for (int i=0; i<4; i++)
        cout<<ob1.Wav_ChunkId[i];
    cout<<'\n';
    for (int i=0; i<4; i++)
        cout<<ob1.Wav_Format[i];
    cout<<'\n';
    for (int i=0; i<4; i++)
        cout<<ob1.Wav_SubChunkId[i];
    cout<<'\n';
    cout<<ob1.Wav_SubChunkSize<<endl;
    cout<<ob1.Wav_AudioFormat<<endl;
    cout<<ob1.Wav_NumChannels<<endl;
    cout<<ob1.Wav_SampleRate<<endl;
    cout<<ob1.Wav_ByteRate<<endl;
    cout<<ob1.Wav_BlockAlign<<endl;
    cout<<ob1.Wav_BitPerSample<<endl;
    for (int i=0; i<4; i++)
        cout<<ob1.Wav_SubChunk2Id[i];
    cout<<'\n';
    cout<<ob1.Wav_SubChunk2Size<<endl;
    short* buffer=new short [ob1.Wav_SubChunk2Size/2];
    fread(buffer, 2, ob1.Wav_SubChunk2Size/2, rd_wav);
    cout<<"buffer1="<<buffer[0]<<endl;
    cout<<"buffer2="<<buffer[1]<<endl;
    delete [] buffer;
    fclose(rd_wav);
    return 0;
}
Добавлено через 41 минуту
тупанул)
дело в поле BitPerSample и в том, что в базовых кодерах-декодерах идет 16 бит на сэмпл) поэтому и юзают везде short.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 18:59
Ответы с готовыми решениями:

Какой тип данных использовать для работы с большими числами?
Здравствуйте! Какой тип данных можно использовать для больших чисел( unsigned...

Какой тип использовать для создания рекрсивного массива
Здравствуйте. Не в первый раз встречаюсь с различными задачами в которых...

Использовать в качестве контейнера для хранения данных динамические массивы
Задача состоит в том, чтобы разработать программу, используя в качестве...

Создать тип данных для хранения строки символов. С перегрузкой оператора
Полностью задание: &quot;Создать тип данных для хранения строки символов....

Создать класс, содержащий поля, которые можно использовать для хранения данных
Создать класс &lt;имя класса&gt; (имя класса задается в соответствии с выбранным...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 18:59

Создать тип данных для хранения массива логических величин, перегрузить операторы поэлементно
Создать тип данных для хранения массива логических величин. Перегрузить...

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

Какой тип данных нужен для возведения в степень
Добрый день. При возведении числа в степень столкнулся с проблемой, что при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru