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

Решение проблемы воспроизведения звука в TMediaPlayer с выбранной звуковой картой

Delphi , ОС и Железо , Аудиокарта и Видеокарта

В статье рассматривается проблема воспроизведения звука в TMediaPlayer с выбранной звуковой картой в Delphi. Приведен пример кода, в котором пользователь может выбрать звуковую карту из комбобокса, но воспроизведение звука происходит на默认 звуковой карте.

Причина проблемы

Проблема заключается в том, что TMediaPlayer не поддерживает смену звуковой карты во время воспроизведения. Кроме того, метод mciSendCommand() возвращает ошибку MCIERR_INVALID_DEVICE_ID, что указывает на недействительный идентификатор устройства.

Решение проблемы

Чтобы решить проблему, необходимо закрыть TMediaPlayer перед сменой звуковой карты и открыть его снова после смены. Кроме того, необходимо правильно задать идентификатор устройства в структуре MCI_WAVE_SET_PARMS.

Пример кода, решающий проблему:

unit Select_SoundCard_Update;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, MMSystem, StdCtrls, MPlayer;

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    ComboBox1: TComboBox;
    btn1: TButton;
    dlgOpen1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1CloseUp(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  outcaps: TWaveOutCaps;
  parms: MCI_WAVE_SET_PARMS;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  ShowMessage('У вас обнаружено ' + IntToStr(waveOutGetNumDevs) + ' звуковых карт.');
  i := waveOutGetNumDevs;
  for i := 0 to i - 1 do
  begin
    waveOutGetDevCaps(i, @outcaps, SizeOf(outcaps));
    ComboBox1.Items.Add(outcaps.szPname);
  end;
  ComboBox1.ItemIndex := 0;
end;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
  MediaPlayer1.Close;
  parms.wOutput := ComboBox1.ItemIndex + 1; // Нужно прибавить 1, так как индексы начинаются с 0
  mciSendCommand(MediaPlayer1.DeviceID, MCI_SET, MCI_WAVE_OUTPUT, Longint(@parms));
  MediaPlayer1.Open;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MediaPlayer1.DeviceID));
  MediaPlayer1.Close;
  if dlgOpen1.Execute then
  begin
    MediaPlayer1.FileName := dlgOpen1.FileName;
    MediaPlayer1.Open;
  end;
end;

end.

В этом примере кода при выборе звуковой карты в комбобоксе TMediaPlayer закрывается, устанавливается выбранная звуковая карта и открывается снова. Это позволяет воспроизводить звук на выбранной звуковой карте.

Альтернативный ответ

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

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

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

В статье рассматривается проблема воспроизведения звука на выбранной звуковой карте в Delphi с использованием TMediaPlayer, и предлагается решение, заключающееся в закрытии и повторном открытии TMediaPlayer после смены звуковой карты, а также правильной н


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

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




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


:: Главная :: Аудиокарта и Видеокарта ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-08-11 19:25:03/0.013230085372925/1