Технологии программирования миди

 Навигация:

 Поиск:

 Новости:

17.02.2007
Полностью переработан дизайн сайта.

6.01.2007
Добавлен раздел Наработки Полезные и интересные программы и их исходники от автора.

19.11.2006
Функции WriteVarLen и ReadVarLen портированы с СИ на Delphi читать

14.11.2006
Появилась cтатья Midi-протокол глазами программиста

24.10.2006
Написана вторая часть MMSystem Функции midiOutGetVolume midiOutSetVolume midiOutMessage midiOutShortMsg и midiOutLongMsg

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

1.09.2006
Добавлен раздел MMSystem в котором находятся
подробные опсания функций winmm.dll, определенных в модуле mmSystem.pas,
с примерами их использования в Delphi.

13.08.2006
Опубликован исходник приложения, записывающего игру на клавиатуре
в стандартный midi-файл SMF - 0

4.07.2006
Добавлен раздел Структура формата миди-файла

 Счетчики:
Rambler's Top100 Яндекс цитирования Rambler's Top100
 Контент:

Формат wav-файла, информация о RIFF-структуре файлов

Имеющие отношение к мультимедиа данные (звук, видео и др.) хра-нятся в файлах т.н. RIFF-формата (Resource Interchange File Format формат файла для обмена ресурсами). Как содержащие звук WAV-файлы, так и AVI-файлы, содержащие видеоинформацию, имеют формат RIFF. Файл формата RIFF содержит вложенные фрагменты (chunk’s); внеш-ний фрагмент состоит из заголовка и области данных (рис. 3.9).

Первое двойное слово заголовка содержит четырехбуквенный код FOURCC, идентифицирующий хранящиеся во фрагменте данные. Второе двойное слово заголовка представляет собой размер области данных в байтах (без учета размера самого заголовка).

Область данных имеет переменную длину, однако она должна быть выравнена на границу слова (при необходимости дополняется в конце нулевым байтом до целого числа слов).

Важно понять, что формат RIFF не описывает конкретный формат данных; практически файл в RIFF-формате может содержать любые муль-тимедиа-данные, причем формат конкретных данных зависит от типа этих данных (RIFF является скорее стандартом описания контейнера данных).

Обозначенная как ‘Данные’ область может содержать внутри себя другие фрагменты. Для содержащего звуковые данные файла (WAV-файл) эта область содержит идентификатор данных ‘WAVE’, фраг-мент формата звуковых данных ‘fmt’ (три символа ‘fmt’ и пробел в конце), а также фрагмент звуковых данных .

Файл может дополнительно содержать фрагменты других типов, по-этому не следует предполагать, что заголовок WAV-файла имеет фикси-рованный формат. Например, в формате могут присутствовать фрагменты ‘LIST’ или ‘ABOUT’, содержащие информацию о правах копирования и описание самого мультимедиа-файла.

Означенная на как ‘Формат данных’ область описывает зву-ковые данные. Формат этой области для файлов PCM (записанных с ис-пользованием импульсно-кодовой модуляции) соответствуют структуре PCMWAVEFORMAT, определенной в файле mmsystem.h следующим образом

typedef struct pcmwaveformat_tag
{
WAVEFORMAT wf;
WORD wBitsPerSample; } PCMWAVEFORMAT;
typedef PCMWAVEFORMAT *PPCMWAVEFORMAT; typedef PCMWAVEFORMAT NEAR *NPPCMWAVEFORMAT;
typedef PCMWAVEFORMAT FAR *LPPCMWAVEFORMAT;
Структура WAVEFORMAT описана в файле mmsystem.h следую-щим образом
typedef struct waveformat_tag
{
WORD wFormat Tag; // тип формата
WORD nChannels; // количество каналов (моно или стерео)
DWORD nSanplesPerSec; // частота дискретизации
DWORD nAvgBytesPerSec; // скорость потока данных
WORD nBlockAlign; // выравнивание блока данных } WAVEFORMAT;
typedef WAVEFORMAT *PWAVEFORMAT; typedef WAVEFORMAT NEAR *NPWAVEFORMAT; typedef WAVEFORMAT FAR *LPWAVEFORMAT;

Поле wFormatTag описывает тип формата звуковых данных (для поддерживаемой стандартной библиотекой mmsystem.dll метода импульсно-кодовой модуляции PCM в этом поле должно находиться определенное в файле mmsystem.h значение WAVE_FORMAT_PCM)
#define WAVE_FORMAT_PCM 1
Поле nChannels содержит количество каналов, в нем могут находить-ся значения 1 (моно) или 2 (стерео).
В поле nSamplesPerSec записывается частота дискретизации (количе-ство выборок сигнала в секунду). В этом поле могут находиться стандарт-ные (11025 kГц, 22050 kГц или 44100 kГц) либо нестандартные значения (такие как 5000 kГц или 4400 kГц), однако не все драйверы звуковых адап-теров могут корректно работать с нестандартными частотами дискретиза-ции.
Поле nAvgBytePerSec содержит среднюю скорость потока данных (количество байт в секунду, передаваемых драйверу устройства или полу-чаемых от него). Эта информация может использоваться приложением для оценки размера необходимого для размещения звуковых данных буфера (например, для монофонического сигнала с дискретизацией 8 бит значение скорости численно совпадает со значением частоты дискретизации, для стереофонического сигнала с дискретностью 8 бит она вдвое выше). Точ-ное значение величины nAvgBytePerSec рассчитывается по формуле

nAvgBytePerSec=(nChannel ? nSamples ? wBitsPerample) / 8
В поле nBlockAlign находится информация о выравнивании блока в байтах, причем
nBlockAlign=(nChannels ? wBitsPerSample) / 8
Поле wBitPerSample определяет дискретность сигнала (количество бит, используемое для одной выборки сигнала); обычно используются значения 8 или 16.
Формат самих звуковых данных зависит от количества каналов и от дискретности.

Для монофонического сигнала с дискретностью 8 бит звуковые данные представляют собой массив однобайтовых значений, каждое из которых является выборкой сигнала.
Для стереофонического сигнала с дискретностью 8 бит звуковые дан-ные имеют формат массива двухбайтовых слов, причем младший байт слова соответствует левому каналу, а старший -правому.
Формат звуковых данных с дискретностью 16 бит выглядит аналогич-но (для монофонического сигнала данные хранятся в массиве 16-битовых слов; для стереофонического используется массив двойных слов, причем младшему слову соответствует левый канал, а старшему -правый).
Диапазон изменения значений выборок определяется дискретизацией. Для 8-битовых данных диапазон составляет от 0 до 255 (0xff), причем от-сутствию сигнала (полная тишина) соответствует значение 128 (0x80); для 16-битовых значений диапазон изменения составляет от –32768 (-0x8000) до 32767 (0x7fff), отсутствию сигнала соответствует значение 0.

Содержание
 Bash.org.ru:

 Реклама:

 ©Copyright:
http://www.last.h16.ru - программирование миди. Идея, разработка и поддержка : Mo-skin © 2006-2007
X