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

Как проигрывать два звука одновременно

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

Как проигрывать два звука одновременно

Автор: http://www.swissdelphicenter.ch

uses
  MMSystem;

procedure SendMCICommand(Cmd: string);
var
  RetVal: Integer;
  ErrMsg: array[0..254] of char;
begin
  RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
  if RetVal <> 0 then
  begin
    {get message for returned value}
    mciGetErrorString(RetVal, ErrMsg, 255);
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMCICommand('open waveaudio shareable');
  SendMCICommand('play "C:\xyz\BackgroundMusic.wav"');
  SendMCICommand('play "C:\xyz\AnotherMusic.wav"');
  SendMCICommand('close waveaudio');
end;

Here's the translation of the provided text into Russian:

Код, написанный на Delphi, использует модуль MMSystem для одновременного воспроизведения двух аудиофайлов с помощью интерфейса управления медиа (MCI).

Вот разбивка того, что код делает:

  • Процедура SendMCICommand отправляет команду MCI с помощью mciSendString. Если возникла ошибка, она получает сообщение об ошибке и отображает его в диалоговом окне.
  • В обработчике события Button1Click формы четыре команды отправляются:
  • open waveaudio shareable: Открывает драйвер MCI для воспроизведения аудиофайлов.
  • play "C:\xyz\BackgroundMusic.wav": Начинает воспроизведение первого аудиофайла.
  • play "C:\xyz\AnotherMusic.wav": Начинает воспроизведение второго аудиофайла.
  • close waveaudio: Закрывает драйвер MCI.

Проблема с этим кодом в том, что он пытается открыть и воспроизвести два отдельных аудиофайла, но не указывает, как они должны быть воспроизведены одновременно.

Один из способов достичь этого - это открыть один аудиофайл, содержащий оба звука, или создать новый аудиофайл, комбинирующий два звука. Однако, если вы хотите воспроизвести их отдельно без смешивания в один файл, вам нужно будет найти более сложное решение.

Вот пример, как можно модифицировать обработчик события Button1Click для одновременного воспроизведения двух аудиофайлов:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMCICommand('open waveaudio shareable');
  SendMCICommand('play "C:\xyz\BackgroundMusic.wav" loop -1');   // Пусть звук будет воспроизводиться бесконечно
  SendMCICommand('play "C:\xyz\AnotherMusic.wav" loop -1');   // Пусть второй звук будет воспроизводиться бесконечно
  SendMCICommand('close waveaudio');
end;

В этом модифицированном коде оба аудиофайла устанавливаются на бесконечное воспроизведение с помощью команды loop -1. Это будет продолжать воспроизведение звуков до тех пор, пока они не будут остановлены вручную или не будет отправлена команда для закрытия.

Обратите внимание, что это подход может не работать идеально в зависимости от вашего конкретного требования и характеристик аудиофайлов, которые вы используете. Например, если один звук длиннее другого, он может быть обрезан до конца. В таких случаях вам может потребоваться более сложное решение с использованием библиотеки или фреймворка, поддерживающего многопоточность, обработку аудио и синхронизацию.

В статье описывается способ проигрывать два звука одновременно с помощью языка программирования Delphi и библиотеки MMSystem.


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

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




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


:: Главная :: Аудио ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:22:02/0.0036499500274658/0