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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 14:01   #1
JuliaBelochka
 
Регистрация: 26.04.2009
Сообщений: 7
По умолчанию mp3 плеер на основе библиотеки bass

Здравствуйте! Помогите разобраться с исходником программы по созданию плеера. К примеру, что такое Tsonstream, PositionEnCours, GetTempsTotal, и что означают строчки ParaEQMED.Min:=trunc(TabSon[1].GetMinParamEQGain); или
TabSon[1].SetPan(Balance.Position)?

Привожу отрывок кода
const
MAX_SON = 2;

var
Form1: TForm1;
TabSon : array[1..MAX_SON]of TSonStream;
PATH :string;
volume: LongWord;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
scrollbar1.Position:=TabSon[1].PositionEnCours;
if(TabSon[1].GetNom<>'')then Label1.Caption:=Format('Общее время (в сек): %f, текущее время: %f',
[TabSon[1].GetTempsTotal,TabSon[1].GetTempsEnCours]);
end;

procedure TForm1.ProgressBar1MouseDown(Sender : TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TabSon[1].ChangerPosition(X);
end;

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
TabSon[1].ChangerPosition(scrollbar1.Positio n);
end;
procedure TForm1.CompressorClick(Sender: TObject);
begin
if Compressor.Checked = true then
begin
TabSon[1].AppliquerCompressor;
TabSon[1].SetCompressor(CompressorBar.Positi on);

end
else
TabSon[1].RetirerCompressor;
end;
procedure TForm1.ReverbClick(Sender: TObject);
begin
if Reverb.Checked = true then
TabSon[1].AppliquerReverb
else
TabSon[1].RetirerReverb;
end;
procedure TForm1.ParaEQLOWChange(Sender: TObject);
begin
TabSon[1].SetParamEQLow(ParaEQLOW.Position);
end;

procedure TForm1.ParaEQMEDChange(Sender: TObject);
begin
TabSon[1].SetParamEQMed(ParaEQMED.Position);
end;

procedure TForm1.ParaEQHIGHChange(Sender: TObject);
begin
TabSon[1].SetParamEQHigh(ParaEQHIGH.Position );
end;

procedure TForm1.EqualiseurClick(Sender: TObject);
begin
if Equaliseur.Checked = true then
begin
TabSon[1].AppliquerParamEQLow;
TabSon[1].AppliquerParamEQMed;
TabSon[1].AppliquerParamEQHigh;
TabSon[1].SetParamEQLow(ParaEQLOW.Position);
TabSon[1].SetParamEQMed(ParaEQMED.Position);
TabSon[1].SetParamEQHigh(ParaEQHIGH.Position );
end
else
begin
TabSon[1].RetirerParamEQLow;
TabSon[1].RetirerParamEQMed;
TabSon[1].RetirerParamEQHigh;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PATH := ExtractFilePath(Application.ExeName );
TabSon[1]:=TSonStream.Create;

ParaEQLOW.Min:=trunc(TabSon[1].GetMinParamEQGain);
ParaEQLOW.Max:=trunc(TabSon[1].GetMaxParamEQGain);
ParaEQLOW.Position:=trunc(TabSon[1].GetIniParamEQGain);

ParaEQMED.Min:=trunc(TabSon[1].GetMinParamEQGain);
ParaEQMED.Max:=trunc(TabSon[1].GetMaxParamEQGain);
ParaEQMED.Position:=trunc(TabSon[1].GetIniParamEQGain);

ParaEQHIGH.Min:=trunc(TabSon[1].GetMinParamEQGain);
ParaEQHIGH.Max:=trunc(TabSon[1].GetMaxParamEQGain);
ParaEQHIGH.Position:=trunc(TabSon[1].GetIniParamEQGain);

CompressorBar.Max:=trunc(TabSon[1].GetMaxCompressorGain);
CompressorBar.Min:=trunc(TabSon[1].GetMinCompressorGain);
CompressorBar.Position:=trunc(TabSo n[1].GetIniCompressorGain);

volume := (TrackBar1.Position - TrackBar1.Max+1)* 6500;
volume := volume + (volume shl 16);
waveOutSetVolume(WAVE_MAPPER,volume );

Frequence.Max:=TabSon[1].GetFrequenceMax;
Frequence.Position:=TabSon[1].GetFrequence;
Frequence.Min:=TabSon[1].GetFrequenceMin;

Balance.Min:=TabSon[1].GetPanMin;
Balance.Max:=TabSon[1].GetPanMax;
Balance.Position:=TabSon[1].GetPanIni;

LabNomS1.Transparent:=true;
end;
procedure TForm1.BalanceChange(Sender: TObject);
begin
TabSon[1].SetPan(Balance.Position);
end;
procedure TForm1.listbox1Click(Sender: TObject);
begin
TabSon[1].Charger(listbox1.Items.Strings[listbox1.itemIndex]);
scrollbar1.Max:=TabSon[1].LongueurTotal;
LabNomS1.Caption:='Song: '+TabSon[1].GetNom;
Equaliseur.Checked:=false;
Echo.Checked:=false;
Reverb.Checked:=false;
Compressor.Checked:=false;
end;
procedure TForm1.SauverClick(Sender: TObject);
begin
if(BddS.Execute)then listbox1.Items.SaveToFile(BddS.File Name+'.dat');
end;

procedure TForm1.ChargeClick(Sender: TObject);
begin
opendialog1.FilterIndex:=2;

if(opendialog1.Execute) then listbox1.Items.LoadFromFile(opendia log1.FileName);
end;

procedure TForm1.Effacer1Click(Sender: TObject);
begin
listbox1.Items.Delete(listbox1.Item Index);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
TabSon[1].Lire(True);
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if ListBox1.ItemIndex < ListBox1.Count then
ListBox1.ItemIndex := ListBox1.ItemIndex + 1;
TabSon[1].lire (true);

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
TabSon[1].Stopper;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
TabSon[1].Lire(False);
end;
JuliaBelochka вне форума Ответить с цитированием
Старый 26.12.2012, 14:21   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

я думаю будет лучше, если добрые форумчане пришлют список основных команд для работы с басс библиотекой и опишут что каждая из команд делает, все-таки этот исходник немного сложноват для новичка, я сам скачал этот проигрыватель (код на такой-же, но идентификаторы другие), до сих пор разобраться не могу, а учиться работать с басс библиотекой хочется, а начинать надо с простого, да извиняюсь за то, что не помог ничем, просто мне самому бы писать это все научиться, спасибо всем тем, кто не проигнорит и не раскритикует это сообщение)
from dark to light)

Последний раз редактировалось Алексей_2012; 26.12.2012 в 14:30.
Алексей_2012 вне форума Ответить с цитированием
Старый 13.02.2013, 22:54   #3
sariman
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 58
По умолчанию

JuliaBelochka, сторонний объект, к стандарту BASS не имеет никакого отношения. Скачайте другой пример.

Алексей_2012, хорошо, я объясню азы, хотя в интернете куча подобной информации... Ну да ладно.

BASS - звуковой движок, подключаемая библиотека, облегчающая работу с воспроизведением аудио-файлов, основанная на DirectSound и DirectSound3D.

Самая простейшая программа с использованием BASS.DLL (Надеюсь как подключать библиотеку Вы знаете):
Код:
var
  Channel: HSTREAM;

... 

procedure TForm1.FormCreate(Sender: TObject);
begin
  if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
  begin
    MessageBox(0, 'Не удается загрузить BASS.DLL', nil, MB_ICONERROR);
    Halt;
  end;

  if not BASS_Init(-1, 44100, 0, Handle, nil) then
    MessageBox(0, 'Ошибка инициализации аудио!', nil, MB_ICONERROR);
end;
...

procedure TForm1.Button1Click(Sender: TObject);
begin
  (* Добавление файлов *)
  if not OpenDialog1.Execute then Exit;
  
  // Если поток загружен, то освобождаем
  if Channel > 0 then
    BASS_StreamFree(Channel);
  // Инициализируем поток
  Channel := BASS_StreamCreateFile(False, PChar(OpenDialog1.FileName), 0, 0, 0);
  if Channel <> 0 then
  begin
    // Воспроизводим
    if not BASS_ChannelPlay(Channel, False) then
      MessageBox(0, 'Ошибка при воспроизведении аудио-файла!', nil, MB_ICONERROR);
  end
  else
    MessageBox(0, 'Ошибка при инициализации потока!', nil, MB_ICONERROR);
end;

...
Итак, разбираемся:
1. Инициализация аудио. Перед воспроизведением нужно обязательно инициализировать устройство вывода звука, иначе не получится воспроизвести.
Далее проверка на сходство версии библиотеки. Дабы избежать "левых" библиотек и несоответствие версии.
1. Если закрыли диалог открытия файла, то выходим из процедуры.
2. "Если поток не пуст, то освобождаем" - что это значит? Объясняю: к примеру мы уже загрузили аудио-файл в поток, тогда при воспроизведении композиции смешаются и память не будет освобождаться.
3. Инициализируем поток, 2-й параметр путь и имя файла, над остальным пока что можете не заморачиваться.
4. Если поток загружен, то воспроизводим, иначе выдаем ошибку.
5. Если не удалось воспроизвести, то выводим ошибку.

Итак, запомните:
Поток - HSTREAM или DWORD, разницы нет.
Инициализация аудио - BASS_Init.
Освободить поток - BASS_StreamFree(Название_потока);
Инициализировать поток - Channel := BASS_StreamCreateFile(..,...,...);
Воспроизвести - BASS_ChannelPlay(Название_потока, False);.

Все, оказывается очень просто.

Вот еще, навскидку:
Стоп - BASS_ChannelStop(Название_потока);
Пауза - BASS_ChannelPause(Название_потока);
sariman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен Help для библиотеки Bass.dll Virus25 Компоненты Delphi 6 10.12.2012 11:41
Как создать в Delphi mp3 плеер? Без использования bass.dll. megatronx Помощь студентам 2 10.03.2010 17:15
Подключение библиотеки BASS? Ferz-2009 Мультимедиа в Delphi 2 29.12.2009 08:15
MP3-плеер Egych Софт 10 14.01.2008 20:54
микшер на два потока в проигрывателе музыки. проигрыватель сделан на основе библиотеки Bass.dll D-fens Мультимедиа в Delphi 4 08.06.2007 20:36