📄 u_vcbassdemo_main.pas
字号:
//
// channels
c_comboBox_musicChannel.clear();
c_trackBar_musicChannelVolume.position := 0;
c_trackBar_musicChannelVolume.enabled := false;
//
a_bass_musicPlay.Enabled := false;
a_bass_musicStop.Enabled := false;
a_bass_musicUnload.Enabled := false;
end;
//
f_noChangeTrack := false;
end;
// -- --
procedure Tc_form_main.c_listBox_musicModulesClick(Sender: TObject);
begin
updateMusicInfo(true);
end;
// -- --
procedure Tc_form_main.c_trackBar_musicAmpChange(Sender: TObject);
var
music: unaBassMusic;
begin
if (not f_noChangeTrack) then begin
music := getSelectedMusic();
if (nil <> music) then
music.set_ampLevel(c_trackBar_musicAmp.position);
end;
end;
// -- --
procedure Tc_form_main.c_trackBar_musicPanChange(Sender: TObject);
var
music: unaBassMusic;
begin
if (not f_noChangeTrack) then begin
music := getSelectedMusic();
if (nil <> music) then
music.set_panSeparation(c_trackBar_musicPan.position);
end;
end;
// -- --
procedure Tc_form_main.c_trackBar_musicChannelVolumeChange(Sender: TObject);
var
music: unaBassMusic;
begin
if (not f_noChangeTrack) then begin
music := getSelectedMusic();
if (nil <> music) then
if (0 <= c_comboBox_musicChannel.itemIndex) then
music.set_channelVol(c_comboBox_musicChannel.itemIndex, c_trackBar_musicChannelVolume.position);
end;
end;
// -- --
procedure Tc_form_main.c_trackBar_musicPosChange(Sender: TObject);
var
music: unaBassMusic;
begin
if (not f_noChangeTrack) then begin
//
music := getSelectedMusic();
if (nil <> music) then
{$IFDEF BASS_AFTER_21 }
// fucked in 2.2
music.asChannel.set_position(music.seconds2bytes(c_trackBar_musicPos.position));
{$ELSE }
music.asChannel.set_position(c_trackBar_musicPos.position and $FFFF, true);
{$ENDIF }
//
end;
end;
//=============== CD ===================
// -- --
procedure Tc_form_main.updateCDinfo();
var
t: unsigned;
c: int;
begin
c_memo_cdInfo.clear();
c_comboBox_cdTrack.clear();
c_checkBox_cdInDrive.checked := false;
//
if ((nil <> f_bass) and (' ' <> f_cdDrive)) then begin
//
c := f_bass.cd_get_tracks();
if ((0 <= c) and f_bass.cd_inDrive()) then begin
c_memo_cdInfo.lines.add('CDID_IDENTITY=' + f_bass.cd_get_ID(BASS_CDID_IDENTITY));
c_memo_cdInfo.lines.add('CDID_UPC=' + f_bass.cd_get_ID(BASS_CDID_UPC));
c_memo_cdInfo.lines.add('CDID_CDDB=' + f_bass.cd_get_ID(BASS_CDID_CDDB));
c_memo_cdInfo.lines.add('CDID_CDDB2=' + f_bass.cd_get_ID(BASS_CDID_CDDB2));
c_memo_cdInfo.lines.add('-------');
c_memo_cdInfo.lines.add('Track count=' + int2str(c));
end
else
c_memo_cdInfo.lines.add('<no disc in drive>');
//
c_checkBox_cdInDrive.checked := f_bass.cd_inDrive();
//
if (f_bass.cd_inDrive()) then begin
//
for t := 1 to c do
c_comboBox_cdTrack.items.add(int2str(t));
end;
end;
end;
// -- --
procedure Tc_form_main.c_button_updateCDinfoClick(Sender: TObject);
begin
updateCDinfo();
end;
// -- --
procedure Tc_form_main.enumCD();
var
volume: string;
d: char;
begin
c_comboBox_cdDrive.clear();
f_cdDrive := ' ';
//
volume := 'x:\';
for d := 'A' to 'Z' do begin
volume[1] := d;
if (DRIVE_CDROM = Windows.GetDriveType(pChar(volume))) then
c_comboBox_cdDrive.items.add(volume);
end;
//
if (0 < c_comboBox_cdDrive.items.count) then begin
c_comboBox_cdDrive.itemIndex := 0;
//a_bass_cdInit.Execute();
c_comboBox_cdDriveChange(nil);
end
else begin
a_bass_cdInit.Enabled := false;
a_bass_cdFree.Enabled := false;
end;
end;
// -- --
procedure Tc_form_main.a_bass_cdInitExecute(Sender: TObject);
begin
if (nil <> f_bass) then begin
//
if (' ' <> f_cdDrive) then
f_bass.cd_free();
//
f_cdDrive := getSelectedCDDrive();
if (' ' <> f_cdDrive) then
if (not f_bass.cd_init(f_cdDrive, 0)) then begin
showMessage('CD_Init() for drive ' + f_cdDrive + ':\ fails, error code=' + int2str(f_bass.get_errorCode()));
f_cdDrive := ' ';
end;
//
updateCDinfo();
//
c_comboBox_cdDriveChange(sender);
end;
end;
// -- --
procedure Tc_form_main.a_bass_cdFreeExecute(Sender: TObject);
begin
if (nil <> f_bass) then begin
//
if (' ' <> f_cdDrive) then
f_bass.cd_free();
end;
//
f_cdDrive := ' ';
c_comboBox_cdDriveChange(sender);
//
updateCDinfo();
end;
// -- --
procedure Tc_form_main.c_comboBox_cdDriveChange(Sender: TObject);
var
newDrive: char;
begin
newDrive := getSelectedCDDrive();
a_bass_cdInit.Enabled := (newDrive <> f_cdDrive);
a_bass_cdFree.Enabled := not a_bass_cdInit.Enabled;
//
c_label_cdDrive.caption := 'Initialized CD Drive: ' + f_cdDrive;
end;
// -- --
function Tc_form_main.getSelectedCDDrive(): char;
var
drive: string;
begin
result := ' ';
//
if (0 <= c_comboBox_cdDrive.itemIndex) then begin
drive := c_comboBox_cdDrive.items[c_comboBox_cdDrive.itemIndex];
if (1 < length(drive)) then
result := drive[1];
end;
end;
// -- --
procedure Tc_form_main.a_bass_cdDoorOpenExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.cd_door(true);
end;
// -- --
procedure Tc_form_main.a_bass_cdDoorCloseExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.cd_door(false);
end;
// -- --
procedure Tc_form_main.a_bass_cdTrackPlayExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.cd_play(c_comboBox_cdTrack.itemIndex + 1, c_checkBox_cdTrackPlayLoop.checked, false);
end;
// -- --
procedure Tc_form_main.a_bass_cdTrackStopExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.cd_stop();
end;
// ================= FILE STREAM =================
// -- --
procedure Tc_form_main.a_bass_streamBrowseExecute(Sender: TObject);
begin
if (c_openDialog_stream.execute()) then
c_edit_streamPath.Text := c_openDialog_stream.fileName;
end;
// -- --
function Tc_form_main.getStreamFlags(): DWORD;
begin
result := 0;
with (c_checkListBox_streamFlags) do begin
//
if (checked[0]) then
result := result or BASS_SAMPLE_3D;
if (checked[1]) then
result := result or BASS_SAMPLE_MONO;
if (checked[2]) then
result := result or BASS_SAMPLE_LOOP;
if (checked[3]) then
result := result or BASS_SAMPLE_FX;
if (checked[4]) then
result := result or BASS_MP3_HALFRATE;
if (checked[5]) then
result := result or BASS_MP3_SETPOS;
end;
end;
// -- --
function Tc_form_main.getSelectedStream(): unaBassStream;
begin
if ((nil <> f_bass) and (LB_ERR <> sendMessage(c_listBox_streamModules.handle, LB_GETCURSEL, 0, 0))) then
result := unaBassStream(c_listBox_streamModules.items.objects[c_listBox_streamModules.itemIndex])
else
result := nil;
end;
// -- --
procedure Tc_form_main.updateStreamInfo();
var
stream: unaBassStream;
len: int64;
pos: int64;
begin
f_noChangeTrack := true;
//
stream := getSelectedStream();
if (nil <> stream) then begin
// stream
len := stream.get_length();
c_label_streamLength.caption := 'Length: ' + floatToStrF(stream.bytes2seconds(len), ffFixed, 8, 2) + ' sec.';
//
pos := stream.asChannel.get_position();
if (0 <= pos) then begin
//
c_label_streamPos.caption := 'Position: ' + floatToStrF(stream.bytes2seconds(pos), ffFixed, 8, 2) + ' sec.';
c_trackBar_streamPos.position := percent(pos, len);
c_trackBar_streamPos.enabled := true;
end
else begin
//
c_label_streamPos.caption := 'Position: 0.00 sec.';
c_trackBar_streamPos.position := 0;
c_trackBar_streamPos.enabled := false;
end;
//
a_bass_streamPlay.Enabled := true;
a_bass_streamStop.Enabled := true;
a_bass_streamUnload.Enabled := true;
end
else begin
// no stream
c_label_streamLength.Caption := 'Length: 0.00 sec.';
c_label_streamPos.caption := 'Position: 0.00 sec.';
//
c_trackBar_streamPos.position := 0;
c_trackBar_streamPos.enabled := false;
//
a_bass_streamPlay.Enabled := false;
a_bass_streamStop.Enabled := false;
a_bass_streamUnload.Enabled := false;
end;
//
f_noChangeTrack := false;
end;
// -- --
procedure Tc_form_main.c_edit_streamPathChange(Sender: TObject);
begin
a_bass_streamLoad.Enabled := fileExists(c_edit_streamPath.text);
end;
// -- --
procedure Tc_form_main.a_bass_streamLoadExecute(Sender: TObject);
var
flags: DWORD;
stream: unaBassStream;
begin
if ((nil <> f_bass) and fileExists(c_edit_streamPath.text)) then begin
// try to add new stream
flags := getStreamFlags();
stream := unaBassStream.create(f_bass);
stream.createStream(c_edit_streamPath.text, 0, 0, flags);
if (0 <> stream.handle) then begin
c_listBox_streamModules.itemIndex := c_listBox_streamModules.items.addObject(c_edit_streamPath.text, pointer(stream));
updateStreamInfo();
end
else begin
freeAndNil(stream);
showMessage('Unable to load stream file, error code=' + int2str(f_bass.get_errorCode()));
end;
end;
end;
// -- --
procedure Tc_form_main.a_bass_streamLoadMemExecute(Sender: TObject);
var
res: unaResourceStream;
flags: DWORD;
stream: unaBassStream;
begin
if (nil <> f_bass) then begin
res := unaResourceStream.createRes('MEMSTREAM');
try
if (nil <> res.data) then begin
// try to add new stream
flags := getStreamFlags();
stream := unaBassStream.create(f_bass);
stream.createStream(res.data, res.getAvailableSize(), flags);
if (0 <> stream.handle) then begin
//
c_listBox_streamModules.itemIndex := c_listBox_streamModules.items.addObject('<stream from memory>', pointer(stream));
updateStreamInfo();
//
showMessage('Music courtesy of Mystic Circle.');
end
else begin
freeAndNil(stream);
showMessage('Unable to load stream, error code=' + int2str(f_bass.get_errorCode()));
end;
end
else
showMessage('Unable to locate resource.');
finally
freeAndNil(res);
end;
end;
end;
// -- --
procedure Tc_form_main.a_bass_streamPlayExecute(Sender: TObject);
var
stream: unaBassStream;
flags: DWORD;
begin
stream := getSelectedStream();
if (nil <> stream) then begin
stream.preBuf();
flags := getStreamFlags();
if (stream.play(not c_checkListBox_streamFlags.checked[6], flags)) then
// OK
else
showMessage('PlayEx() fails, error code=' + int2str(f_bass.get_errorCode()));
end;
end;
// -- --
procedure Tc_form_main.a_bass_streamStopExecute(Sender: TObject);
var
stream: unaBassStream;
begin
stream := getSelectedStream();
if (nil <> stream) then
stream.asChannel.stop();
end;
// -- --
procedure Tc_form_main.a_bass_streamUnloadExecute(Sender: TObject);
var
stream: unaBassStream;
begin
stream := getSelectedStream();
if (nil <> stream) then begin
//
freeAndNil(stream);
c_listBox_streamModules.items.delete(c_listBox_streamModules.itemIndex);
updateStreamInfo();
end;
end;
// -- --
procedure Tc_form_main.c_listBox_streamModulesClick(Sender: TObject);
begin
updateStreamInfo();
end;
// -- --
procedure Tc_form_main.c_trackBar_streamPosChange(Sender: TObject);
var
stream: unaBassStream;
begin
if (not f_noChangeTrack) then begin
//
stream := getSelectedStream();
if (nil <> stream) then
{$IFDEF BASS_AFTER_21 }
// fucked in 2.2
stream.asChannel.set_position(stream.get_length() * c_trackBar_streamPos.position div 100);
{$ELSE }
stream.asChannel.set_position(stream.get_length() * c_trackBar_streamPos.position div 100, true);
{$ENDIF }
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -