Delphi - Создайте программу Delphi, которая самостоятельно извлекает MIDI-файл.

Я пишу программу в Delphi 7 и думаю поставить музыку для запуска в фоновом режиме. Итак, я написал песню в формате .MIDI под названием Song.MID, теперь я хочу, чтобы моя программа Delphi автоматически извлекала (SFX) эту песню и выполняла ее, в конце программы удаляя ее. Я думаю, это как написать это в Hex. Как мне это сделать?


person Adriano rox    schedule 01.11.2015    source источник
comment
Добавьте файл в качестве ресурса, а затем извлеките его с помощью TResourceStream. Скорее всего, не нужно сохранять в файл. Просто играйте по памяти. Возможно, вы сможете дать проигрывателю URL-адрес, который идентифицирует ресурс и извлекает его, а затем воспроизводит.   -  person David Heffernan    schedule 01.11.2015
comment
@DavidHeffernan, если я не ошибаюсь, я не думаю, что файлы midi можно воспроизводить напрямую из потока памяти, по крайней мере, без какой-либо внешней мультимедийной библиотеки.   -  person Craig    schedule 01.11.2015
comment
Есть способ играть прямо по памяти? Как кейгены делают?   -  person Adriano rox    schedule 01.11.2015
comment
@Victor Вы знаете, что такое ресурс? На каком аспекте этого вы застряли?   -  person David Heffernan    schedule 01.11.2015


Ответы (1)


Создайте новый текстовый файл и напишите: MIDI RCDATA 1.mid, сохраните текстовый файл как MID.rc Затем создайте новый текстовый файл и напишите: brcc32 mid.rc, сохраните его как «brcc.bat».

запустите brcc.bat, чтобы преобразовать файл *.rc в *.res Переместите MediaPlayer в свою форму (медиаплеер находится на вкладке «Система»). Теперь скопируйте этот код в Ваш проект:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    mplayer: TMediaPlayer;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R mid.res}

procedure TForm1.FormCreate(Sender: TObject);
var
  stream:tresourcestream;
  tmp:string;
begin
  try
    stream:=tresourcestream.Create(hinstance,'MIDI',RT_RCDATA);
    try
      setlength(tmp,300);
      setlength(tmp,GetTempPath(300,pchar(tmp)));
      tmp:=tmp+inttostr(hinstance)+'.mid';
      stream.SaveToFile(tmp);
    finally
      stream.free;
    end;
    mplayer.FileName:=tmp;
    mplayer.Open;
    mplayer.Play;
  except
  end;
end;

end.

это самый простой пример. Итак, кейгены используют специальный звуковой формат - *.XM, файл считывается в память с ресурса и проигрывается с помощью библиотек типа FMOD (подробнее в инете)

person The North Star    schedule 01.11.2015