Обработка 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;

Объяснение кода листинга программы

  1. Объявлены используемые модули: MPlayer, MMsystem.
  2. Объявлено исключение EMyMCIException, являющееся подклассом Exception.
  3. Объявлен тип записи 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 байта (количество байт данных).
  4. Определена процедура TForm1.Button1Click(Sender: TObject).
  5. Создается объект TFileStream с именем 'C:\SomeFile.wav' и открывается для чтения.
  6. В блоке try производится чтение данных из файла в буфер, используя поля типа TWavHeader.
  7. В блоке finally освобождается ресурс, занятый объектом TFileStream.
  8. В блоке program выводится сообщение с использованием функции ShowMessage, в которую передается строка, полученная из преобразования числового значения в строку с помощью функции FloatToStr.
  9. Вычисленное значение представляет собой количество байт данных, деленное на количество байт в секунду, умноженное на 1000 и приведенное к типу Single.
  10. Значение выводится на экран.

Оцени полезность:

6   голосов , оценка 3.333 из 5