Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 21:24   #1
Коля-Коля
Пользователь
 
Аватар для Коля-Коля
 
Регистрация: 23.04.2009
Сообщений: 24
Вопрос Фоновая музыка



Нужно сделать так, чтобы при включении формы играла музыка формата midi (без плеера). Помогите пожалуста.
Как-то одного программиста спросили, а потом горько пожалели об этом.
Коля-Коля вне форума Ответить с цитированием
Старый 24.04.2009, 23:01   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Что-то вроде этого

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure MCINOTIFY(var msg:TMessage); message MM_MCINOTIFY;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  HMidi: DWord;

implementation

{$R *.dfm}

procedure StopMidi;
begin
  mciSendCommand(HMidi, MCI_STOP, 0, 0);
  mciSendCommand(HMidi, MCI_CLOSE, 0, 0);
end;

procedure PlayMidi(wnd: HWnd; Filename:string);
var mciOpenParms: TMCI_Open_Parms;
    mciPlayParms: TMCI_Play_Parms;
begin
  StopMidi;

  ZeroMemory(@mciOpenParms, sizeOf(TMCI_Open_Parms));
  mciOpenParms.lpstrDeviceType := PChar('sequencer');
  mciOpenParms.lpstrElementName := PChar(Filename);
  if mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWord(@mciOpenParms))<>0
  then
    begin
      ShowMessage('Не могу открыть устройство');
      exit
    end
  else HMidi := mciOpenParms.wDeviceID;

  ZeroMemory(@mciPlayParms, sizeOf(mciPlayParms));
  mciPlayParms.dwCallback := wnd;

  if mciSendCommand(HMidi, MCI_PLAY, MCI_NOTIFY, DWord(@mciPlayParms)) > 0
  then
    begin
      ShowMessage('Не могу воспроизвести файл');
      mciSendCommand(HMidi, MCI_CLOSE, 0, 0);
   end;
end;


procedure TForm1.MCINOTIFY(var msg: TMessage);
var params: TMCI_Seek_Parms;
begin
  If msg.WParam = MCI_NOTIFY_SUCCESSFUL then
  begin
    params.dwCallback := handle;
    params.dwTo := 0;
    mciSendCommand(HMidi, MCI_SEEK, MCI_SEEK_TO_START + MCI_NOTIFY, DWord(@params));
    mciSendCommand(HMidi, MCI_PLAY, 0, 0);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayMidi(Handle,'E:\sample.mid');
end;

end.
пыщь
JTG вне форума Ответить с цитированием
Старый 05.06.2009, 23:33   #3
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
По умолчанию

Сделал всё как написано - - не играет, подскажите пожалыста кто чё думает или знае.
DennerV вне форума Ответить с цитированием
Старый 06.06.2009, 02:10   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Попробуйте ещё такой вариант:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btnPlay: TButton;
    btnStop: TButton;
    btnPause: TButton;
    OpenDialog1: TOpenDialog;
    btnOpenFile: TButton;
    edtFileName: TEdit;
    Button1: TButton;
    procedure btnPlayClick(Sender: TObject);
    procedure btnPauseClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure btnOpenFileClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  DeviceName='waveaudio';
var
  Form1: TForm1;
  FileName:String;

implementation

{$R *.dfm}

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
      mciGetErrorString(RetVal, ErrMsg, 255);
      MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
    end;
end;

procedure TForm1.btnPlayClick(Sender: TObject);
begin
  btnPause.Visible := True;
  btnPlay.Visible := False;

  SendMCICommand('Open '+DeviceName+' Shareable');
  SendMCICommand('Play '+FileName);
  SendMCICommand('Close '+DeviceName);
end;

procedure TForm1.btnPauseClick(Sender: TObject);
begin
  btnPause.Visible := False;
  btnPlay.Visible := True;
  SendMCICommand('Pause '+FileName);
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
  btnPause.Visible := False;
  btnPlay.Visible := True;
  SendMCICommand('Stop '+FileName);
end;

procedure TForm1.btnOpenFileClick(Sender: TObject);
begin
  btnPlay.Enabled := False;
  btnStop.Enabled := False;
   if OpenDialog1.Execute then begin
     FileName := OpenDialog1.FileName;
     edtFileName.Text := ExtractFileName(FileName);
     btnPlay.Enabled := True;
     btnStop.Enabled := True;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     SendMCICommand('Pause '+FileName);
end;
end.
Всегда рад помочь!

Последний раз редактировалось Terran; 06.06.2009 в 02:13.
Terran вне форума Ответить с цитированием
Старый 06.06.2009, 08:09   #5
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
По умолчанию

Извините, я тупанул. У меня не компе громкость MIDI стояла на минимуме, поэтому и не играла. Я только когда спал допер . Спасибо за второй вариант, может пригодится.
DennerV вне форума Ответить с цитированием
Старый 10.06.2009, 15:02   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

А можно эту песенку MIDI в файл ресурсов запихать, чтоб всё в одном EXE'шнике было?
MP3 можно запихнуть, а вот этот формат будет пахать?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 10.06.2009, 15:05   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
А можно эту песенку MIDI в файл ресурсов запихать, чтоб всё в одном EXE'шнике было?
В ресурсы можно засунуть всё что хочешь. Хоть фильм
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 10.06.2009, 15:06   #8
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Можно и midi, wav,mp3,wma - да много что мона запихать
uberchel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
музыка wolf950 Помощь студентам 1 18.11.2008 23:22
музыка wolf950 Помощь студентам 3 14.11.2008 21:47
музыка beygul Gamedev - cоздание игр: Unity, OpenGL, DirectX 24 09.10.2008 14:50
фоновая консольная прога VVVadim Общие вопросы Delphi 6 05.04.2007 17:45
музыка OLEG'arh Общие вопросы Delphi 2 04.12.2006 20:55