⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_vcbassdemo_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -