Остальная часть файлы является звуковыми данными. Порядок следования: верхний
уровень для левого канала, верхний уровень для правого канала и так далее. Для
моно или 8-битных файлов сделайте соответствующие изменения.
Программа создания файла WAV в Pascal с использованием custom-данные структуры для заголовка. Вот улучшенная версия кода с некоторыми предложениями и объяснениями:
programCreateWAVFile;typeTWaveHeader=recordMarker1:array[0..3]ofChar;// Маркер начала файла WAVBytesFollowing:LongInt;// Количество байт, следующих за заголовкомMarker2:array[0..3]ofChar;// Маркер "WAVE"Marker3:array[0..4]ofChar;// Маркер "fmt " и null-терминаторFixed1:LongInt;// Фиксированная величина (16 для формата WAV)FormatTag:Word;// Тег формата звукового файла (1 для PCM)Channels:Word;// Количество каналов звукаSampleRate:LongInt;// Частота дискретизации звукаBytesPerSecond:LongInt;// Количество байт в секундеBytesPerSample:Word;// Количество байт на каждый образец звукаBitsPerSample:Word;// Количество бит на каждый образец звукаMarker4:array[0..3]ofChar;// Маркер начала данныхDataBytes:LongInt;// Количество байт данных в файлеend;varWaveHeader:TWaveHeader;SampleResolution:Word;// Переменная для хранения разрешения образца звукаbegin{ Calculate DataBytes }SampleResolution:=16;// Default sample resolution for 16-bit WAV filesDataBytes:=WaveHeader.Channels*WaveHeader.SampleRate;DataBytes:=DataBytes*SampleResolutiondiv8;DataBytes:=DataBytes*WaveHeader.Durationdiv1000;{ 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 neededWaveHeader.Channels:=WaveHeader.Channels;// No change neededWaveHeader.BytesPerSecond:=WaveHeader.Channels*WaveHeader.SampleRate;WaveHeader.BytesPerSample:=WaveHeader.Channels*SampleResolutiondiv8;WaveHeader.BitsPerSample:=SampleResolution;WaveHeader.Marker4:='data';WaveHeader.DataBytes:=DataBytes;{ Write the WAV file }// Implement code to write the header and audio data to a fileend.
Изменения:
Добавлена переменная SampleResolution для хранения разрешения образца звука (например, 8, 16 или 24 бита) для удобной модификации.
Изменен расчет DataBytes для учета разрешения образца звука.
Аjusted код для правильного инициализации полей заголовка WaveHeader.
Добавлены комментарии для объяснения каждого раздела кода.
Обратите внимание, что это только начало, и вам нужно будет реализовать логику записи заголовка WAV-файла и аудиоданных в файл.
Описание формата Wave-файла в Pascal: WaveHeader - структура, содержащая информацию о файле, включая маркеры, фиксированные значения и параметры звуковых данных.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.