Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2012, 18:25   #1
Niaden
Новичок
Джуниор
 
Регистрация: 29.10.2012
Сообщений: 4
По умолчанию Какой тип данных использовать для хранения сэмплов wav файла, если нужно его конвертировать в lossless?

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


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

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

Используемая среда - Visual Studio 2010 C++


Код:
#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;
}
Niaden вне форума Ответить с цитированием
Старый 30.10.2012, 18:59   #2
Niaden
Новичок
Джуниор
 
Регистрация: 29.10.2012
Сообщений: 4
По умолчанию

тупанул)
дело в поле BitPerSample и в том, что в базовых кодерах-декодерах идет 16 бит на сэмпл) поэтому и юзают везде short.
Niaden вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно получить данные из wav-файла в массив. sazca C# (си шарп) 1 22.02.2012 12:08
если я хочу чтобы переменная была рандом, нужно просто написать, что типа а:=random? какой это будет тип переменных? gylayko Помощь студентам 6 04.10.2011 12:58
Использовать перечислимый тип для хранения названий с последующей выдачей значений созданного перечислимого типа (C#) satna Помощь студентам 1 12.09.2011 21:03
Какой лучше использовать строковый тип? Anuta_Kotova Общие вопросы C/C++ 20 25.06.2009 18:55
тип поля для хранения текста > 255 символов komex БД в Delphi 4 23.09.2007 12:38