📄 u_vcbassdemo_main.pas
字号:
end;
// -- --
procedure Tc_form_main.a_bass_libUnloadExecute(Sender: TObject);
begin
c_listBox_musicModules.clear();
c_listBox_streamModules.clear();
c_comboBox_deviceId.clear();
//
freeAndNil(f_bass);
//
a_bass_libLoad.enabled := true;
a_bass_libUnload.enabled := false;
a_bass_libInit.enabled := false;
//
a_bass_actStart.enabled := false;
a_bass_actStop.enabled := false;
a_bass_actPause.enabled := false;
//
a_file_browseLib.enabled := true;
c_edit_library.enabled := true;
//
c_memo_bassInfo.text := 'No library was loaded.';
end;
// -- --
procedure Tc_form_main.displayBassInfo();
var
ver: DWORD;
info: BASS_INFO;
volMusic,
volSample,
volStream: int;
begin
c_memo_bassInfo.clear();
//
if ((nil = f_bass) or (BASS_ERROR_NOLIBRARY = f_bass.get_errorCode())) then begin
//
c_memo_bassInfo.Text := 'No BASS library was found, or specified library is not compatible.';
//
freeAndNil(f_bass);
end
else begin
ver := f_bass.get_version();
{$IFDEF BASS_AFTER_22 }
c_memo_bassInfo.lines.add('BASS Library version: ' + int2str((ver shr 24) and $FF) + '.' + int2str((ver shr 16) and $FF) + '.' + int2str((ver shr 8) and $FF) + '.' + int2str((ver shr 0) and $FF) );
{$ELSE }
c_memo_bassInfo.lines.add('BASS Library version: ' + int2str(ver and $FFFF) + '.' + int2str(ver shr 16));
{$ENDIF }
//
if (f_bass.get_info(info)) then begin
//
with (info) do begin
//
c_memo_bassInfo.lines.add('flags = 0x' + int2str(flags, 16));
c_memo_bassInfo.lines.add('hwsize = ' + int2str(hwsize));
c_memo_bassInfo.lines.add('hwfree = ' + int2str(hwfree));
c_memo_bassInfo.lines.add('freesam = ' + int2str(freesam));
c_memo_bassInfo.lines.add('free3d = ' + int2str(free3d));
c_memo_bassInfo.lines.add('minrate = ' + int2str(minrate));
c_memo_bassInfo.lines.add('maxrate = ' + int2str(maxrate));
c_memo_bassInfo.lines.add('eax = ' + bool2strStr(eax));
c_memo_bassInfo.lines.add('minbuf = ' + int2str(minbuf));
c_memo_bassInfo.lines.add('dsver = ' + int2str(dsver));
c_memo_bassInfo.lines.add('latency = ' + int2str(latency));
end;
end
else
c_memo_bassInfo.lines.add('BASS_GET_INFO fails, error code=' + int2str(f_bass.get_errorCode()));
//
// update volumes as well
if (f_bass.get_globalVolumes(volMusic, volSample, volStream)) then begin
c_trackBar_volumeMusic.Position := volMusic;
c_trackBar_volumeSample.Position := volSample;
c_trackBar_volumeStream.Position := volStream;
end;
//
c_trackBar_volumeMaster.position := f_bass.get_volume();
end;
end;
// -- --
procedure Tc_form_main.a_bass_libInitExecute(Sender: TObject);
var
flags: DWORD;
index: int;
begin
if (nil <> f_bass) then begin
//
flags := 0;
if (c_checkListBox_initFlags.Checked[0]) then
flags := flags or BASS_DEVICE_8BITS;
if (c_checkListBox_initFlags.Checked[1]) then
flags := flags or BASS_DEVICE_MONO;
if (c_checkListBox_initFlags.Checked[2]) then
flags := flags or BASS_DEVICE_3D;
if (c_checkListBox_initFlags.Checked[3]) then
flags := flags or BASS_DEVICE_LEAVEVOL;
if (c_checkListBox_initFlags.Checked[4]) then
flags := flags or BASS_DEVICE_LATENCY;
//
index := c_comboBox_deviceId.itemIndex;
if (0 <= index) then
index := unsigned(c_comboBox_deviceId.items.objects[index]) - $1000
else
index := 0;
//
f_bass.initialize(index, str2intInt(c_edit_playbackFreq.text, 44100), flags, handle, true);
displayBassInfo();
//
a_bass_actStart.execute();
end;
end;
// -- --
procedure Tc_form_main.a_bass_libInfoUpdateExecute(Sender: TObject);
begin
displayBassInfo();
end;
// -- --
procedure Tc_form_main.updateInitParams();
var
i: integer;
d: string;
begin
c_comboBox_deviceId.items.clear();
//
if (nil <> f_bass) then begin
{$IFDEF BASS_AFTER_18 }
// fucked up in 2.0
i := 1;
{$ELSE }
i := 0;
{$ENDIF }
repeat
d := f_bass.get_deviceDescription(i);
if ('' <> d) then
c_comboBox_deviceId.items.addObject(d, pointer($1000 + i))
else
break;
//
inc(i);
until (false);
//
c_comboBox_deviceId.itemIndex := 0;
end;
end;
// -- --
procedure Tc_form_main.c_trackBar_volumeMusicChange(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.set_globalVolumes(c_trackBar_volumeMusic.Position, -1, -1);
end;
// -- --
procedure Tc_form_main.c_trackBar_volumeSampleChange(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.set_globalVolumes(-1, c_trackBar_volumeSample.Position, -1);
end;
// -- --
procedure Tc_form_main.c_trackBar_volumeStreamChange(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.set_globalVolumes(-1, -1, c_trackBar_volumeStream.Position);
end;
// -- --
procedure Tc_form_main.c_trackBar_volumeMasterChange(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.set_volume(c_trackBar_volumeMaster.Position);
end;
// -- --
procedure Tc_form_main.a_bass_actStopExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.stop();
end;
// -- --
procedure Tc_form_main.a_bass_actStartExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.start();
end;
// -- --
procedure Tc_form_main.a_bass_actPauseExecute(Sender: TObject);
begin
if (nil <> f_bass) then
f_bass.pause();
end;
//=============== Music ===================
// -- --
function Tc_form_main.getMusicFlags(): DWORD;
begin
result := 0;
with (c_checkListBox_musicFlags) do begin
//
if (checked[0]) then
result := result or BASS_MUSIC_LOOP;
if (checked[1]) then
result := result or BASS_MUSIC_RAMP;
if (checked[2]) then
result := result or BASS_MUSIC_RAMPS;
if (checked[3]) then
result := result or BASS_MUSIC_FT2MOD;
if (checked[4]) then
result := result or BASS_MUSIC_PT1MOD;
if (checked[5]) then
result := result or BASS_MUSIC_MONO;
if (checked[6]) then
result := result or BASS_MUSIC_3D;
if (checked[7]) then
result := result or BASS_MUSIC_POSRESET;
if (checked[8]) then
result := result or BASS_MUSIC_SURROUND;
if (checked[9]) then
result := result or BASS_MUSIC_SURROUND2;
if (checked[10]) then
result := result or BASS_MUSIC_STOPBACK;
if (checked[11]) then
result := result or BASS_MUSIC_FX;
if (checked[12]) then
result := result or BASS_MUSIC_CALCLEN;
end;
end;
// -- --
procedure Tc_form_main.a_bass_musicLoadExecute(Sender: TObject);
var
flags: DWORD;
name: string;
music: unaBassMusic;
begin
if ((nil <> f_bass) and fileExists(c_edit_musicFile.text)) then begin
//
// try to add new music module
flags := getMusicFlags();
music := unaBassMusic.create(f_bass);
music.load(c_edit_musicFile.text, 0, 0, flags);
if (0 <> music.handle) then begin
//
name := music.get_name();
if (1 > length(name)) then
name := '[ Untitled ]';
//
c_listBox_musicModules.itemIndex := c_listBox_musicModules.items.addObject(name, pointer(music));
updateMusicInfo(true);
end
else begin
freeAndNil(music);
showMessage('Unable to load music file, error code=' + int2str(f_bass.get_errorCode()));
end;
end;
end;
// -- --
procedure Tc_form_main.a_bass_musicLoadMemExecute(Sender: TObject);
var
res: unaResourceStream;
flags: DWORD;
music: unaBassMusic;
name: string;
begin
if (nil <> f_bass) then begin
//
res := unaResourceStream.createRes('MEMMUSIC');
try
if (nil <> res.data) then begin
// try to add new music module
flags := getMusicFlags();
music := unaBassMusic.create(f_bass);
music.load(res.data, res.getAvailableSize(), flags);
if (0 <> music.handle) then begin
//
name := music.get_name();
if (1 > length(name)) then
name := '[ Untitled ]';
//
c_listBox_musicModules.itemIndex := c_listBox_musicModules.items.addObject(name, pointer(music));
updateMusicInfo(true);
//
showMessage('MOD Tracker module courtesy of Stilgar.');
end
else begin
freeAndNil(music);
showMessage('Unable to load music, 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_file_browseMusicExecute(Sender: TObject);
begin
if (c_openDialog_music.execute()) then
c_edit_musicFile.text := c_openDialog_music.fileName;
end;
// -- --
procedure Tc_form_main.c_edit_musicFileChange(Sender: TObject);
begin
a_bass_musicLoad.Enabled := fileExists(c_edit_musicFile.text);
end;
// -- --
function Tc_form_main.getSelectedMusic(): unaBassMusic;
begin
if ((nil <> f_bass) and (LB_ERR <> sendMessage(c_listBox_musicModules.handle, LB_GETCURSEL, 0, 0))) then
result := unaBassMusic(c_listBox_musicModules.items.objects[c_listBox_musicModules.itemIndex])
else
result := nil;
end;
// -- --
procedure Tc_form_main.a_bass_musicPlayExecute(Sender: TObject);
var
music: unaBassMusic;
flags: DWORD;
begin
music := getSelectedMusic();
if (nil <> music) then begin
//
music.preBuf();
flags := getMusicFlags();
if (music.playEx(0, 0, flags, true)) then
// OK
else
showMessage('PlayEx() fails, error code=' + int2str(f_bass.get_errorCode()));
end;
end;
// -- --
procedure Tc_form_main.a_bass_musicStopExecute(Sender: TObject);
var
music: unaBassMusic;
begin
music := getSelectedMusic();
if (nil <> music) then
music.asChannel.stop();
end;
// -- --
procedure Tc_form_main.a_bass_musicUnloadExecute(Sender: TObject);
var
music: unaBassMusic;
begin
music := getSelectedMusic();
if (nil <> music) then begin
freeAndNil(music);
c_listBox_musicModules.items.delete(c_listBox_musicModules.itemIndex);
updateMusicInfo();
end;
end;
// -- --
procedure Tc_form_main.updateMusicInfo(rescanChannels: bool);
var
music: unaBassMusic;
pos: QWORD;
i: unsigned;
channel: unsigned;
begin
f_noChangeTrack := true;
//
music := getSelectedMusic();
if (nil <> music) then begin
// module
c_label_musicLen.caption := 'Length: ' + floatToStrF(music.bytes2seconds(music.get_length()), ffFixed, 8, 2) + ' sec.';
{$IFDEF BASS_AFTER_21 }
// fucked in 2.2
c_trackBar_musicPos.max := trunc(music.bytes2seconds(music.get_length(true)));
{$ELSE }
c_trackBar_musicPos.max := (music.get_length(false) and $FFFF);
{$ENDIF }
//
pos := music.asChannel.get_position(true);
if (0 <= pos) then begin
//
c_label_musicPos.caption := 'Order: ' + int2str(pos and $FFFF) + ' Row: ' + int2str(pos shr 16);
{$IFDEF BASS_AFTER_21 }
c_trackBar_musicPos.position := trunc(music.bytes2seconds(music.asChannel.get_position(false)));
{$ELSE }
// fucked in 2.2
c_trackBar_musicPos.position := (music.asChannel.get_position(false) and $FFFF);
{$ENDIF }
c_trackBar_musicPos.enabled := true;
end
else begin
//
c_label_musicPos.caption := 'Order: 0 Row: 0';
c_trackBar_musicPos.position := 0;
c_trackBar_musicPos.enabled := false;
end;
//
c_trackBar_musicAmp.position := music.get_ampLevel();
c_trackBar_musicPan.position := music.get_panSeparation();
c_trackBar_musicAmp.enabled := true;
c_trackBar_musicPan.enabled := true;
//
// channels
if (rescanChannels) then begin
//
c_comboBox_musicChannel.clear();
i := 0;
while (0 < music.get_channelVol(i)) do begin
c_comboBox_musicChannel.items.add(int2str(i));
//
inc(i);
end;
//
c_comboBox_musicChannel.itemIndex := 0;
end;
//
if (0 <= c_comboBox_musicChannel.itemIndex) then begin
//
channel := c_comboBox_musicChannel.itemIndex;
c_trackBar_musicChannelVolume.position := music.get_channelVol(channel);
c_trackBar_musicChannelVolume.enabled := true;
end
else begin
//
c_trackBar_musicChannelVolume.position := 0;
c_trackBar_musicChannelVolume.enabled := false;
end;
//
a_bass_musicPlay.Enabled := true;
a_bass_musicStop.Enabled := true;
a_bass_musicUnload.Enabled := true;
end
else begin
// no module
c_label_musicLen.Caption := 'Length: 0.00 sec.';
c_label_musicPos.caption := 'Order: 0 Row: 0';
//
c_trackBar_musicAmp.position := 0;
c_trackBar_musicPan.position := 0;
c_trackBar_musicPos.position := 0;
c_trackBar_musicAmp.enabled := false;
c_trackBar_musicPan.enabled := false;
c_trackBar_musicPos.enabled := false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -