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

TAudio: библиотека для работы с аудиофайлами на Pascal без внешних зависимостей

Delphi , Мультимедиа , Speaker

В этой статье мы рассмотрим библиотеку TAudio, предназначенную для работы с ауриофайлами на Pascal (Delphi / FreePascal). Она позволяет воспроизводить, редактировать и конвертировать аудиофайлы без использования внешних DLL или дополнительных программ. В настоящее время поддерживается только формат WAV, но библиотека распространяется под лицензией MIT, что делает её удобной для модификации.


1. Обзор библиотеки TAudio

Библиотека TAudio предоставляет простой интерфейс для загрузки, обработки и сохранения аудиофайлов. Основные возможности: - Воспроизведение звука (через MMSystem в Windows). - Редактирование аудиоданных (изменение громкости, обрезка). - Конвертация в формат WAV.

Пример использования:

if not OpenDialog1.Execute then Exit;
var
  Audio: TAudio;
begin
  Audio := TAudio.Create;
  try
    Audio.LoadFromFile(OpenDialog1.FileName);
    Audio.SaveToFile('output.wav');
  finally
    Audio.Free;
  end;
end;

2. Проблемы и их решения

2.1. Ограничение на Windows

Библиотека использует MMSystem для воспроизведения звука, что делает её некроссплатформенной.

Решение:

Можно заменить вызовы MMSystem на LCL-компоненты (например, TProcess для вызова системного аудиоплеера) или использовать OpenAL для кроссплатформенного воспроизведения.

Пример для Linux (Lazarus):

uses
  Process;

procedure PlaySoundOnLinux(const AFileName: string);
var
  PlayerProcess: TProcess;
begin
  PlayerProcess := TProcess.Create(nil);
  try
    PlayerProcess.Executable := 'aplay';
    PlayerProcess.Parameters.Add(AFileName);
    PlayerProcess.Execute;
  finally
    PlayerProcess.Free;
  end;
end;

2.2. Проблема с чтением 16-битных WAV-файлов

Как отметил пользователь wp, при чтении 16-битных WAV-файлов возникает ошибка из-за неправильной интерпретации знаковых значений.

Решение:

Заменить GetU2 (чтение беззнакового 16-битного числа) на GetI2 (чтение знакового 16-битного числа).

Исправленный код:

function TAudioWav.LoadFromStream(Str: TStream): Boolean;
begin
  // ...
  if FHandle.FSampleSize = 16 then
  begin
    for i := 0 to NumFrames - 1 do
    begin
      FHandle.FFrame[i].Left := Reader.GetI2;  // Было GetU2
      if NumChannels > 1 then
        FHandle.FFrame[i].Right := Reader.GetI2;
    end;
  end;
  // ...
end;

3. Альтернативные решения

3.1. Использование BASS или FMOD

Если требуется поддержка MP3, OGG и других форматов, можно интегрировать BASS или FMOD (но это требует внешних DLL).

3.2. Генерация WAV через LCL

Можно динамически создавать WAV-файлы и воспроизводить их через системные средства.

Пример генерации синусоидального звука:

procedure GenerateSineWave(const AFileName: string; Frequency, Duration: Integer);
var
  WavFile: TFileStream;
  i, SampleRate, NumSamples: Integer;
  Sample: SmallInt;
  WavHeader: TWavHeader;
begin
  SampleRate := 44100;
  NumSamples := SampleRate * Duration;

  // Заполнение WAV-заголовка
  WavHeader := Default(TWavHeader);
  // ... (настройка заголовка)

  WavFile := TFileStream.Create(AFileName, fmCreate);
  try
    WavFile.Write(WavHeader, SizeOf(WavHeader));
    for i := 0 to NumSamples - 1 do
    begin
      Sample := Round(32767 * Sin(2 * Pi * Frequency * i / SampleRate));
      WavFile.Write(Sample, SizeOf(Sample));
    end;
  finally
    WavFile.Free;
  end;
end;

Заключение

Библиотека TAudio — это удобное решение для работы с WAV-файлами в Pascal, но она требует доработки для кроссплатформенности и поддержки 16-битных аудиофайлов.

Рекомендации: - Для Windows можно использовать текущую реализацию. - Для Linux — добавить вызов aplay или paplay. - Для поддержки MP3/OGG — рассмотреть BASS/FMOD (с внешними DLL).

Если у вас есть предложения по улучшению библиотеки, вы можете внести свой вклад в репозиторий на GitHub.

Happy coding! 🚀

Создано по материалам из источника по ссылке.

Библиотека TAudio предназначена для работы с аудиофайлами в формате WAV на Pascal, предоставляя функции воспроизведения, редактирования и конвертации без внешних зависимостей, но с ограничением на кроссплатформенность и поддержку только WAV.


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

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




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


:: Главная :: Speaker ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-24 00:56:04/0.0056309700012207/0