Тема: Audio
Показать сообщение отдельно
  #6  
Старый 25.04.2008, 23:26
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

В файл .rc ничего запихивать не надо, кроме строки текста (или строк, если звуковых файлов больше одного: один файл - одна строка).
Создаешь текстовый файл (пустой), пишешь туда строку, для примера,
SOUNDA RCDATA LOADONCALL shum.mp3
здесь:
SOUNDA - твое, какое хочешь, наименование ресурса (заглавные латинские буквы - в дальнейшем не будет проблем);
RCDATA и LOADONCALL - служебные слова для компилятора (RCDATA - тип сохраняемого ресурса: "определяемый пользователем");
shum.mp3 - имя файла, который необходимо подцепить и, который компилятор должен, естественно, найти, т.е. он должен находится там же где и файл .rc.
Сохраняешь этот текстовый файл с расширением .rc (имя файла по своему усмотрению, например, snd.rc).
Дальше компилируешь этот файл с помощью компилятора ресурсов через командную строку:
brcc32.exe snd.rc
Компилятор консольный, поэтому никаких окон не появиться. Если нужен отчет о его работе (ошибки, допустим, посмотреть), то надо в командной строке добавить создание файла отчета:
brcc32.exe snd.rc > log.txt
Компилятор создаст файл log.txt, в котором и можно будет посмотреть что там при трансляции приключилось.

Если будет все в порядке, то сформируется файл ресурса с тем же именем, что и rc, но с расширением .res (в этом примере snd.res), куда компилятором и будет "запихнут" звуковой (видео) файл, вернее, его содержимое.

Как с этим ресурсом работать - это уже другая песня. А слова у песни такие.
В коде главной формы дописываешь строку:
Код:
{$R *.dfm}
{$R snd.res} //добавленная строка
На форму кидаешь TMediaPlayer. Если пользователю не надо видеть этот компонент, то устанавливаешь его свойство Visible в False.
Так как этот проигрыватель умеет работать только с файлами (для mp3), то следующая задача вытащить содержимое ресурса в файл (временный, который потом можно будет удалить). Сохранить ресурс в файл можно так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ResS : TResourceStream;
begin
  ResS := TResourceStream.Create(hInstance, 'SOUNDA', RT_RCDATA);
  try
    ResS.SaveToFile('000000.mp3'); 
    //имя файла как пример, а расширение как у оригинального файла
  finally
    ResS.Free;
  end;
end;
"SOUNDA" в параметрах - это то самое имя ресурса, которое ты определил в файле .rc. Другие параметры при создании ресурного потока оставляешь как они показаны в примере.

Дальше, чтобы проиграть файл нужно подцепить его к проигрывателю, открыть его и дать команду на воспроизведение.
Код:
  MediaPlayer1.FileName := '000000.mp3';
  MediaPlayer1.Open;
  MediaPlayer1.Play;
Для видео файлов все делается так же, за исключением того, что в проигрывателе надо будет указать DeviceType для AVI и окно (свойство Display), как правило, какая-нибудь TPanel на форме, в котором видео будет проигрываться.
Ответить с цитированием