Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Формат Wave-файла

Delphi , Файловая система , Форматы файлов

Формат Wave-файла

Вот он:


TWaveHeader = record
Marker1:        Array[0..3] of Char;
BytesFollowing: LongInt;
Marker2:        Array[0..3] of Char;
Marker3:        Array[0..3] of Char;
Fixed1:         LongInt;
FormatTag:      Word;
Channels:       Word;
SampleRate:     LongInt;
BytesPerSecond: LongInt;
BytesPerSample: Word;
BitsPerSample:  Word;
Marker4:        Array[0..3] of Char;
DataBytes:      LongInt;
end;

Для создания собственного WAV-файла сделайте следующее:


DataBytes := Channels;
DataBytes := DataBytes * SampleRate;
DataBytes := DataBytes * Resolution;
DataBytes := DataBytes div 8;
DataBytes := DataBytes * Duration;
DataBytes := DataBytes div 1000;


WaveHeader.Marker1 := 'RIFF';
WaveHeader.BytesFollowing := DataBytes + 36;
WaveHeader.Marker2 := 'WAVE';
WaveHeader.Marker3 := 'fmt ';
WaveHeader.Fixed1 := 16;
WaveHeader.FormatTag := 1;
WaveHeader.SampleRate := SampleRate;
WaveHeader.Channels := Channels;
WaveHeader.BytesPerSecond := Channels;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond * SampleRate;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond * Resolution;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond div 8;
WaveHeader.BytesPerSample := Channels * Resolution div 8;
WaveHeader.BitsPerSample := Resolution;
WaveHeader.Marker4 := 'data';
WaveHeader.DataBytes := DataBytes;

Остальная часть файлы является звуковыми данными. Порядок следования: верхний уровень для левого канала, верхний уровень для правого канала и так далее. Для моно или 8-битных файлов сделайте соответствующие изменения.

Программа создания файла WAV в Pascal с использованием custom-данные структуры для заголовка. Вот улучшенная версия кода с некоторыми предложениями и объяснениями:

program CreateWAVFile;

type
  TWaveHeader = record
    Marker1: array[0..3] of Char; // Маркер начала файла WAV
    BytesFollowing: LongInt; // Количество байт, следующих за заголовком
    Marker2: array[0..3] of Char; // Маркер "WAVE"
    Marker3: array[0..4] of Char; // Маркер "fmt " и null-терминатор
    Fixed1: LongInt; // Фиксированная величина (16 для формата WAV)
    FormatTag: Word; // Тег формата звукового файла (1 для PCM)
    Channels: Word; // Количество каналов звука
    SampleRate: LongInt; // Частота дискретизации звука
    BytesPerSecond: LongInt; // Количество байт в секунде
    BytesPerSample: Word; // Количество байт на каждый образец звука
    BitsPerSample: Word; // Количество бит на каждый образец звука
    Marker4: array[0..3] of Char; // Маркер начала данных
    DataBytes: LongInt; // Количество байт данных в файле
  end;

var
  WaveHeader: TWaveHeader;
  SampleResolution: Word; // Переменная для хранения разрешения образца звука

begin
  { Calculate DataBytes }
  SampleResolution := 16; // Default sample resolution for 16-bit WAV files
  DataBytes := WaveHeader.Channels * WaveHeader.SampleRate;
  DataBytes := DataBytes * SampleResolution div 8;
  DataBytes := DataBytes * WaveHeader.Duration div 1000;

  { Initialize the WaveHeader }
  WaveHeader.Marker1 := 'RIFF';
  WaveHeader.BytesFollowing := DataBytes + 36;
  WaveHeader.Marker2 := 'WAVE';
  WaveHeader.Marker3 := 'fmt ';
  WaveHeader.Fixed1 := 16;
  WaveHeader.FormatTag := 1;
  WaveHeader.SampleRate := WaveHeader.SampleRate; // No change needed
  WaveHeader.Channels := WaveHeader.Channels; // No change needed
  WaveHeader.BytesPerSecond := WaveHeader.Channels * WaveHeader.SampleRate;
  WaveHeader.BytesPerSample := WaveHeader.Channels * SampleResolution div 8;
  WaveHeader.BitsPerSample := SampleResolution;
  WaveHeader.Marker4 := 'data';
  WaveHeader.DataBytes := DataBytes;

  { Write the WAV file }
  // Implement code to write the header and audio data to a file
end.

Изменения:

  1. Добавлена переменная SampleResolution для хранения разрешения образца звука (например, 8, 16 или 24 бита) для удобной модификации.
  2. Изменен расчет DataBytes для учета разрешения образца звука.
  3. Аjusted код для правильного инициализации полей заголовка WaveHeader.
  4. Добавлены комментарии для объяснения каждого раздела кода.

Обратите внимание, что это только начало, и вам нужно будет реализовать логику записи заголовка WAV-файла и аудиоданных в файл.

Описание формата Wave-файла в Pascal: WaveHeader - структура, содержащая информацию о файле, включая маркеры, фиксированные значения и параметры звуковых данных.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Форматы файлов ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:14:10/0.0056941509246826/1