unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CompressWaveLib, ddsd, ComCtrls, AppEvnts, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; DDSD1: TDDSD; Button2: TButton; OpenDialog1: TOpenDialog; Label2: TLabel; Label3: TLabel; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; TrackBar1: TTrackBar; TrackBar2: TTrackBar; Label18: TLabel; TrackBar3: TTrackBar; Label19: TLabel; Button15: TButton; Button16: TButton; Button17: TButton; Label20: TLabel; Label21: TLabel; Label22: TLabel; Button18: TButton; Button19: TButton; TrackBar4: TTrackBar; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure TrackBar2Change(Sender: TObject); procedure TrackBar3Change(Sender: TObject); procedure Button15Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure Button17Click(Sender: TObject); procedure Button18Click(Sender: TObject); procedure Button19Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure TrackBar4Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private 宣言 } public { Public 宣言 } MusicPlayer : TCompressWavePlayer; wav : TDDSDWaveData; pwav1,pwav2 : TCompressWaveData; CrossCount : Integer; procedure UpdateWav(Sender:TDDSDGenWave; Player:TDDSDChannel; ofs,len:Cardinal); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin //絶対やってね MusicPlayer := TCompressWavePlayer.Create; //ストリーミング再生するWAVEバッファの容量の半分を指定 MusicPlayer.SetBufferSize(44100*4 div 2); //WAVE出力を44100/16/STEREOに設定 DDSD1.SetPrimaryBufferFotmat(44100, 16, True); //ストリーミング再生用に作る wav := TDDSDWaveData.CreateStream(DDSD1, 44100, 16, TRUE, 44100*4); wav.OnUpdate := UpdateWav; DDSD1[0].WaveData := wav; DDSD1[0].LoopPlay; //圧縮ファイルデータのクラスを生成 pwav1 := TCompressWaveData.Create; pwav2 := TCompressWaveData.Create; //初期値に設定 CrossCount := 0; end; procedure TForm1.UpdateWav(Sender:TDDSDGenWave; Player:TDDSDChannel; ofs,len:Cardinal); begin //MusicPlayerにレンダリングさせる MusicPlayer.Rendering; //レンダリング結果をストリーミングに転送 wav.BlockCopy(ofs,Musicplayer.Buffer,len); end; procedure TForm1.Button1Click(Sender: TObject); begin //ダイアログ表示 if (Opendialog1.Execute = FALSE)then exit; //CompressWaveDataの読み込み(*.cwav) //この時、MusicPlayerに割り当てた状態でファイルを読み込むと //動作が不安定になるので、事前にnilにしておくこと。 MusicPlayer.Load(0,nil); pwav1.LoadFromFile(Opendialog1.FileName); //MusicPlayerに登録(登録(LOAD)だけではまだ再生されない) MusicPlayer.Load(0,pwav1); end; procedure TForm1.FormDestroy(Sender: TObject); begin Timer1.Enabled := FALSE; DDSD1[0].Stop; MusicPlayer.Free; wav.Free; pwav1.Free; pwav2.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin //ダイアログ表示 if (Opendialog1.Execute = FALSE)then exit; //CompressWaveDataの読み込み(*.cwav) //この時、MusicPlayerに割り当てた状態でファイルを読み込むと //動作が不安定になるので、事前にnilにしておくこと。 MusicPlayer.Load(1,nil); pwav2.LoadFromFile(Opendialog1.FileName); //MusicPlayerに登録(登録(LOAD)だけではまだ再生されない) MusicPlayer.Load(1,pwav2); end; procedure TForm1.Button6Click(Sender: TObject); begin MusicPlayer.Stop(0); end; procedure TForm1.Button7Click(Sender: TObject); begin MusicPlayer.Stop(1); end; procedure TForm1.Button4Click(Sender: TObject); begin MusicPlayer.Play(0,TRUE); end; procedure TForm1.Button5Click(Sender: TObject); begin MusicPlayer.Play(1,TRUE); end; procedure TForm1.Button11Click(Sender: TObject); begin //フェードアウトはマイナス秒ですよ MusicPlayer.SetVolume(0,0.0,TrackBar4.Position / 10); end; procedure TForm1.Button10Click(Sender: TObject); begin //現在の音量を0にする。 MusicPlayer.SetVolume(0,0.0,0.0); //フェード後の音量、フェードにかかる時間を設定 MusicPlayer.SetVolume(0,1.0,TrackBar4.Position / 10); MusicPlayer.Play(0,TRUE); end; procedure TForm1.Button12Click(Sender: TObject); begin MusicPlayer.SetVolume(1,0.0,0.0); MusicPlayer.SetVolume(1,1.0,TrackBar4.Position / 10); MusicPlayer.Play(1,TRUE); end; procedure TForm1.Button13Click(Sender: TObject); begin MusicPlayer.SetVolume(1,0.0,TrackBar4.Position / 10); MusicPlayer.Play(1,TRUE); end; procedure TForm1.TrackBar1Change(Sender: TObject); begin MusicPlayer.SetVolume(0,Trackbar1.Position / 100,TrackBar4.Position / 10); end; procedure TForm1.TrackBar2Change(Sender: TObject); begin MusicPlayer.SetVolume(1,Trackbar2.Position / 100,TrackBar4.Position / 10); end; procedure TForm1.TrackBar3Change(Sender: TObject); begin MusicPlayer.SetMasterVolume(TrackBar3.Position / 100,TrackBar4.Position / 10); end; procedure TForm1.Button15Click(Sender: TObject); begin MusicPlayer.SetMasterVolume(0.0,0.0); MusicPlayer.SetMasterVolume(1.0,TrackBar4.Position / 10); end; procedure TForm1.Button16Click(Sender: TObject); begin MusicPlayer.SetMasterVolume(0.0,TrackBar4.Position / 10); end; procedure TForm1.Button17Click(Sender: TObject); var ftime : single; begin CrossCount := (CrossCount + 1) and 1; ftime := TrackBar4.Position / 10; if (CrossCount = 1)then begin // DISK1→DISK2 MusicPlayer.SetVolume(0, 0.0,ftime); MusicPlayer.SetVolume(1, 1.0,ftime); MusicPlayer.Play(0,TRUE); MusicPlayer.Play(1,TRUE); end else begin // DISK1←DISK2 MusicPlayer.SetVolume(0, 1.0,ftime); MusicPlayer.SetVolume(1, 0.0,ftime); MusicPlayer.Play(0,TRUE); MusicPlayer.Play(1,TRUE); end; end; procedure TForm1.Button18Click(Sender: TObject); begin MusicPlayer.pause(0); end; procedure TForm1.Button19Click(Sender: TObject); begin MusicPlayer.pause(1); end; procedure TForm1.Button8Click(Sender: TObject); begin MusicPlayer.Previous(0); end; procedure TForm1.Button9Click(Sender: TObject); begin MusicPlayer.Previous(1); end; procedure TForm1.TrackBar4Change(Sender: TObject); begin Edit1.Text := format('%.2f',[TrackBar4.Position/10]); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label28.Caption := format('ReflectTime : %d ms',[MusicPlayer.GetReflectTime]); //これに乗じて、ちゃっかり各ステートをゲット&画面に反映 //DISK-1 Label6.Caption := format('PlayTime : %.3f sec',[MusicPlayer.GetPlayTime(0)]); Label25.Caption:= format('TotalTime: %.3f sec',[MusicPlayer.GetTotalTime(0)]); Label7.Caption := format('Volume : %.0f %% ',[MusicPlayer.GetVolume(0)*100]); Label8.Caption := format('FadeTime : %.3f sec',[MusicPlayer.GetFade(0)]); case MusicPlayer.GetPlayState(0) of CWEmpty: Label9.Caption := format('PlayState : Empty',[]); CWStop : Label9.Caption := format('PlayState : Stop',[]); CWPlay : Label9.Caption := format('PlayState : Play',[]); CWLoop : Label9.Caption := format('PlayState : LoopPlay',[]); end; Label10.Caption := format('Title : %s',[MusicPlayer.GetTitle(0)]); Label11.Caption := format('Artist: %s',[MusicPlayer.GetArtist(0)]); //DISK-2 Label12.Caption := format('PlayTime : %.3f sec',[MusicPlayer.GetPlayTime(1)]); Label26.Caption := format('TotalTime: %.3f sec',[MusicPlayer.GetTotalTime(1)]); Label13.Caption := format('Volume : %.0f %% ',[MusicPlayer.GetVolume(1)*100]); Label14.Caption := format('FadeTime : %.3f sec',[MusicPlayer.GetFade(1)]); case MusicPlayer.GetPlayState(1) of CWEmpty: Label15.Caption := format('PlayState : Empty',[]); CWStop : Label15.Caption := format('PlayState : Stop',[]); CWPlay : Label15.Caption := format('PlayState : Play',[]); CWLoop : Label15.Caption := format('PlayState : LoopPlay',[]); end; Label16.Caption := format('Title : %s',[MusicPlayer.GetTitle(1)]); Label17.Caption := format('Artist: %s',[MusicPlayer.GetArtist(1)]); //Master Label23.Caption := format('Volume : %.0f %%',[MusicPlayer.GetMasterVolume*100]); Label24.Caption := format('FadeValue : %.3f sec',[MusicPlayer.GetMasterFade]); end; end.