Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > *.mp3


Автор: kindDevil 1.9.2006, 15:07
то есть существуют ли какие-нибудь стандартные функции и процедуры? 
скажем что-нибудь вроде playsound из mmsystem.
 smile 

Автор: Snowy 1.9.2006, 15:47
Тебе нужно именно mp3 играть,или просто пожатые файлы?
Если mp3 - то дорога тебе к BASS.
Если нужно играть свои файлы, то playsound вполне подойдёт.

Добавлено @ 15:48 
Для mp3 и прочих форматов стандартных нет.
Но можно их помещать в wav контейнер и играть через PlaySound.

Автор: Alexeis 1.9.2006, 17:44
Цитата(Snowy @  1.9.2006,  15:47 Найти цитируемый пост)
Но можно их помещать в wav контейнер и играть через PlaySound.

Я вот искал искал инфу по этому самому помешению в Wav, но так и не нашел. Неужели файл mp3 и др. целиком, без изменений помещается в чанк данных wav?

Автор: Snowy 1.9.2006, 17:49
Нет, не помещается.
Может и есть какой способ, но я его не знаю.
Стандартный способ - жать голый wav в сжатый wav.
Сомневаюсь, что контент mp3 можно перенести в wav простой коррецией заголовков.
Но и такая возможность не исключена. Хотя, ни практически, ни теоретически такого не встречал.

Автор: Alexeis 1.9.2006, 17:49
Фокус в том что mp3 файлы можно помещать в Wav прямо в памяти, поскольку функция playsound при значении третьего парамета fdwSound 
Цитата

SND_MEMORY A sound event's file is loaded in RAM. The parameter specified by pszSound must point to an image of a sound in memory. 

позволяет проигрывать образы в памяти.

Автор: kindDevil 1.9.2006, 21:14
ясно.
а что такое BASS? 
собсна со звуком глубоко разбираться пока не намерен - обойдусь mediaplayer'ом, но все же интересно.

Автор: Alexeis 1.9.2006, 23:40
kindDevil, Можно почитать здесь http://www.un4seen.com/
Вообще в ней реализованы многие методы для проигрывания звука в различных форматах, и еще др. функции связанные с созданием медиаплеера.

Автор: Тилос 2.5.2007, 15:36
Я по английски мало понимаю :-(

Подскажите, как просто используя bass, проиграть .mp3 файл, который расположен в папке с программой. Там же имхо несложно должно быть  smile

p.s. на примере желательно %)
p.s.s. я не тупой, я принципиальный(с) %)

Автор: Snowy 2.5.2007, 16:39
Там же примеры в комплекте идут.

Автор: darkart 2.5.2007, 19:12
MCI подойдет?
Форма, btn* - кнопки
Код

unit main;

interface

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

type
  TfrmMain = class(TForm)
    btnPlay: TButton;
    btnPause: TButton;
    btnStop: TButton;
    btnOpen: TButton;
    Label1: TLabel;
    lblFileName: TLabel;
    dlgOpen: TOpenDialog;
    procedure btnPlayClick(Sender: TObject);
    procedure btnOpenClick(Sender: TObject);
    procedure btnPauseClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    bolPaused:boolean;
  end;
var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnPlayClick(Sender: TObject);
var
  iRes:longint;{iRes - результат операции}
begin
  if FileExists(lblFileName.Caption) then//если файл с именем lblFileName.Caption существует
  begin
    if bolPaused then//если пауза
      btnPause.Click//нажимаем на паузу
    else//иначе - воспроизведение заново
    begin
      btnStop.Click;//нажимаем на стоп
      //открываем устройство
      iRes:=mciSendString(PChar('open "'+lblFileName.Caption+'" alias waveaudio'),nil,0,0);
      if iRes=0 then//если результат - без ошибок
        iRes:=mciSendString(PChar('play waveaudio'),nil,0,0);//играем
    end;
  end;
end;

procedure TfrmMain.btnOpenClick(Sender: TObject);
begin
  if dlgOpen.Execute then//если выбор состоялся
  begin
    if FileExists(dlgOpen.FileName) then//если файд существует
    begin
      lblFileName.Caption:=dlgOpen.FileName;//запоминаем имя файла в Caption метки
      bolPaused:=false;//не пауза
      btnPlay.Click;
    end;
  end;
end;

procedure TfrmMain.btnPauseClick(Sender: TObject);
begin
  if bolPaused then//если пауза
    mciSendString(PChar('resume waveaudio'),nil,0,0)//восстанавливаем воспроизведение
  else
    mciSendString(PChar('pause waveaudio'),nil,0,0);//пауза
  bolPaused:=not bolPaused;//пауза
end;

procedure TfrmMain.btnStopClick(Sender: TObject);
begin
  mciSendString(PChar('stop waveaudio'),nil,0,0);//останавливаем воспроизведение
  mciSendString(PChar('close waveaudio'),nil,0,0);//закрываем устройство
  bolPaused:=false;//не пауза
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  btnStop.Click;//на всякий случай:)
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  bolPaused:=false;//инициализация
end;

end.

P.S. : пример прилагаетсяsmile

Автор: Тилос 6.5.2007, 15:07
darkart, спасибо брат, все понял  smile 

Автор: Snowy 6.5.2007, 15:26
Вообще-то TMediaPlayer это и есть MCI, обёрнутое в компонент.

Автор: darkart 6.5.2007, 15:44
TMediaPlayer это и есть MCI smile , но MCI не есть TMediaPlayer smile 

Автор: B2_Russia 14.2.2008, 00:00
BASS
Я правильно понимаю, что никаких неудобств при проигрывании файла mp3 я не испытаю?
То есть не приобретая лицензию?
В пакете есть mp3-free библиотека.
Дело в том, что сейчас то вроде как проигрывается все нормально, мне важно, чтобы она не отказалась работать потом у юзеров, когда программа пойдет в тираж так скть... =)

Автор: Snowy 14.2.2008, 13:40
BASS бесплатен для любого использования.
Работает под всеми виндами.
Единственное неудобство - dll таскать надо.
И не бросать его в System32, а класть в папку с программой!
Ибо много таких умников, бросающих в system, а потом конфликт версий у разных программ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)