Обработка wav файла - Free Pascal
Формулировка задачи:
Люди, помогите Пожалуйста!!!
Каким образом в Pascale можно обрабатывать wav-файлы??
Если можно дайте пожалуйста ссылку на полезную информацию!
Решение задачи: «Обработка wav файла»
textual
Листинг программы
uses MPlayer, MMsystem; type EMyMCIException = class(Exception); TWavHeader = 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; procedure TForm1.Button1Click(Sender: TObject); var Header: TWavHeader; begin with TFileStream.Create('C:\SomeFile.wav', fmOpenRead) do try ReadBuffer(Header, SizeOf(Header)); finally Free; end; ShowMessage(FloatToStr((Int64(1000) * header.DataBytes div header.BytesPerSecond) / 1000)); end;
Объяснение кода листинга программы
- Объявлены используемые модули: MPlayer, MMsystem.
- Объявлено исключение EMyMCIException, являющееся подклассом Exception.
- Объявлен тип записи TWavHeader, содержащий поля:
- Marker1: массив из 4 символов.
- BytesFollowing: 4 байта.
- Marker2: массив из 4 символов.
- Marker3: массив из 4 символов.
- Fixed1: 4 байта.
- FormatTag: 2 байта (тип формата).
- Channels: 2 байта (количество каналов).
- SampleRate: 4 байта (частота дискретизации).
- BytesPerSecond: 4 байта (количество байт в секунду).
- BytesPerSample: 2 байта (количество байт на один образец).
- BitsPerSample: 2 байта (количество бит на один образец).
- Marker4: массив из 4 символов.
- DataBytes: 4 байта (количество байт данных).
- Определена процедура TForm1.Button1Click(Sender: TObject).
- Создается объект TFileStream с именем 'C:\SomeFile.wav' и открывается для чтения.
- В блоке try производится чтение данных из файла в буфер, используя поля типа TWavHeader.
- В блоке finally освобождается ресурс, занятый объектом TFileStream.
- В блоке program выводится сообщение с использованием функции ShowMessage, в которую передается строка, полученная из преобразования числового значения в строку с помощью функции FloatToStr.
- Вычисленное значение представляет собой количество байт данных, деленное на количество байт в секунду, умноженное на 1000 и приведенное к типу Single.
- Значение выводится на экран.