Воспроизвести звук

В Pascal ABC есть модуль Sounds. Вот описание:

Модуль Sounds содержит процедуры и функции для работы со звуком:

n:=LoadSound(fname) – загружает звук из файла с именем fname в оперативную память и возвращает описатель звука в целую переменную n (звуковой файл должен иметь формат .wav);

PlaySound(n) – начинает проигрывание звука с описателем n;

StopSound(n) – останавливает проигрывание звука с описателем n;

RewindSound(n) – "перематывает" звук с описателем n на начало;

DestroySound(n) – удаляет звук с описателем n из оперативной памяти, описатель звука при этом становится недействительным;

SoundIsPlaying(n) – возвращает True если звук с описателем n проигрывается и False в противном случае;

SoundLength(n) – возвращает длительность звука с описателем n в миллисекундах.

Модуль Sounds содержит также класс Sound, имеющий следующий интефейс:

PascalВыделить код

1
2
3
4
5
6
7
8
9
10
11
12

type
  Sound=class
  public
    constructor Create(fname: string);
    destructor Destroy;
    procedure Load(fname: string);
    procedure Play;
    procedure Stop;
    procedure Rewind;
    property IsPlaying: boolean;
    function Length: integer;
  end;

Конструкторы и деструкторы

constructor Create(fname: string);

Создает объект класса Sound и загружает в него звук из файла fname (звуковой файл должен иметь формат .wav). Звук с именем fname ищется вначале в текущем каталоге, а затем в подкаталоге Media\Sounds\ каталога программы PascalABC.exe.

destructor Destroy;

Разрушает объект и содержащийся в нем звук.

Свойства

property IsPlaying: boolean;

Проигрывается ли звук. Присваивание IsPlaying=False эквивалентно вызову Stop, а присваивание IsPlaying=True - вызову Play.

Методы

procedure Load(fname: string);

Загружает звук из файла с именем fname. Звук с именем fname ищется вначале в текущем каталоге, а затем в подкаталоге Media\Sounds\ каталога программы PascalABC.exe. Звук, до этого содержащийся в объекте, разрушается.

procedure Play;

Начинает проигрывание звука.

procedure Stop;

Останавливаетает проигрывание звука.

procedure Rewind;

"Перематывает" звук на начало.

function Length: integer;

Возвращает длительность звука в миллисекундах.

Звуки удобнее рассматривать как объекты класса Sound, в котором собраны все основные действия со звуками. Такой подход является более удобным и современным, чем подход с описателями звуков. Единственный его недостаток - необходимость вводить основные понятия, связанные с классами. Подход с описателями позволяет работать со звуками сразу после рассмотрения темы "Процедуры и функции" или даже раньше, если подпрограммы рассматривать просто как команды.

Пример работы со звуком с использованием описателей

PascalВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

uses Sounds;
 
var n: integer;
 
begin 
  n:=LoadSound('b.wav'); 
  PlaySound(n); 
  Sleep(SoundTime(n)); 
  DestroySound(n);
end. 
 
Пример работы со звуком с использованием класса Sound
 
uses Sounds;
 
var s: Sound;
 
begin 
  s:=Sound.Create('b.wav'); 
  s.Play;
  Sleep(s.Length); 
  s.Destroy;
end.