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

Чтение 16-и битных слов из бинарника (загрузка Wav) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Простая графическая система http://www.cyberforum.ru/cpp-beginners/thread819947.html
Здарова! Решаю задачку: Реализуйте простую графическую систему, используя доступные на вашем компьютере графические средства (если их нет — используйте ASCII представление, где пиксел, это знакоместо): Window(n,m) создает на экране область размером nxm. Координаты декартовы. Окно w типа Window имеет координаты w.current(). Начальные координаты равны Point(0,0). Координаты можно задать с помощью...
C++ исправьте ошибку (изменить регистр букв в файле) Здравствуйте! Задача - заменить все строчные буквы следующие после точки или точка+пробел на заглавные. Попыталась сделать с помощью toupper, но ничего не выходит. Может можно каким-нибудь другим способом? В программировании недолго,не судите строго,если ошибки глупые. Прилагаю код программы (в ней еще заменяются двойные пробелы на одиночные, эта часть работает исправно). Код замены регистра... http://www.cyberforum.ru/cpp-beginners/thread819942.html
Как можно получить все подмножества множества? C++
Например из множества, представлнного массивом должны получиться подмножества:
C++ Метод Зейделя для СЛАУ
Написала код по Методу Зейделя, но НИКАК НЕ ПОЛУЧАЕТСЯ сделать так, чтобы выводило все итерации на экран!:(:(:( Прошу помочь! Код: #include<iostream> #include<cmath> using namespace std; #define N 100 void main() { int i,j,n,k=0;
C++ увеличить все элементы массива в n раз http://www.cyberforum.ru/cpp-beginners/thread819914.html
увеличить все элементы массива в n раз
C++ Не найден оператор, принимающий правый операнд #include <iostream> #include <string> using namespace std; int main() { int x=5; int y=7; std::cout << endl ; std::cout << x+y << "" << x*y; подробнее

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

Чтение 16-и битных слов из бинарника (загрузка Wav) - C++

27.03.2013, 12:56. Просмотров 1608. Ответов 3
Метки (Все метки)

Привет! Загружаю WAV. Данные в файле для формата звуковых данных с дискретностью 16 бит монофонического сигнала хранятся в массиве 16-битовых слов.
Вот читаю я заголовок файла,
C++
1
2
std::fstream fs("1.wav",std::ios::in | std::ios::binary);  
 fs.read((char*)&wav,sizeof(WaveHeader));
А дальше как быть? Если последовательность данных там в 16-и битных словах, как записать команду read хотя бы для первого слова , чтоб данные оказывались в int в итоге?

Добавлено через 16 минут
Тоесть есть поле в хэдере wav - wav.ID_SIZE_DATA. В 16-и битном формате оно всё равно содержит кол-во байт, тоесть кол-во чаров и если я пытаюсь загрузить так (типа в int два char), всё равно получается лажа на выходе.
C++
1
2
3
int *buf=new int[wav.ID_SIZE_DATA/2];
  for(int i=0;i<wav.ID_SIZE_DATA/2;i++)
      fs.read((char*)buf,sizeof(int));
Добавлено через 4 минуты
Точнее сам напутал, в int не два чара, по крайней мере в 32-х битной oc.
В short - точно два байта, тоесть два char. Думаю вопрос сводится к чтению двух байт, тоесть двух char, и объединения их в один short. Вот как бы это сделать? Тоесть есть у меня два переменных типа char, и из них надо получить один short, ну и наверное, первый char - старшие 8 бит, а второй - младшие. Тоесть как объединить это два char в один short, не прибегая к ассемблеру, ибо на регистрах это сделать легко

Добавлено через 4 минуты
В общем битовые операции спасут мир, на этом же форуме нашёл :-)
C++
1
2
3
4
5
6
7
8
9
 byte y = 5, x = 4;
            short z;
 
            z = x;
 
            int tmp = z;
            tmp = tmp << 8;
            z = (short)tmp;
            z = (short)(z | y);
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru