Miten tai mitä kirjastoa käyttämällä saisi Delphi6:ssa käytettyä ääniä... En viitsi ihan DirectX:ää käyttää...
Ääniä delphillä
CMan
3143
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 3
Vanhimmat
En ole nyt vähään aikaan työskennellyt Delphillä, mutta ainakin 4 ja 5:ssa oli ihan mediaplayer komponetti, jolla sai soiteltua musiikkia
Delphissä tosiaankin on TMediaPlayer -komponentti, jolla voi leikkiä... tositoimiin se on turhan buginen.
IMportoi MS Windows Media Player ActiveX -komponenttina Delphiin, mutta älä hyväksy oletusnimeä TMediaPlayer (koska tulee konflikti Delphin oman TMediaPlayerin kanssa) vaan uudelleennimeä se esim. TMsMediaPlayer.
Tuon voit vapaasti luoda koodissa, ja tuhota WM_Destroy -sanomakäsittelijässä.
Jos haluat pudottaa Formille, niin laita samalle fomille myös TActiveXCleaner -komponentti. (lähdekoodi alla)
Muussa tapauksessa formia delphissä suljettaessa tulee ikäviä virheilmoituksia, voi myös jäädä luuppiin jolloin tulee virhe toisensa perään.
TActiveXCleaner poistaa tuon harmin.
Ja lähdekoodi Cleaneriin tässä:
unit ActClea2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
OleCtrls;
// Copyright (c) 2003 MikaDna0800, 044 567 0800
// Dna kaikille, Maraton parhaille !
{$DEFINE DebugPlus}
type
TActiveXCleaner = class(TWinControl)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TActiveXCleaner]);
end;
{ TActiveXCleaner }
procedure TActiveXCleaner.WMDestroy(var Message: TWMDestroy);
var
i : Integer;
// ACtrl : TControl;
AForm : TComponent;
AComp : TComponent;
begin
// ==========================================
// R
AForm := Owner;
for i := AForm.ComponentCount-1 downto 0 do begin
//
AComp := AForm.Components[i];
if (AComp Self) and (AComp is TOleControl) then begin
//
{$IFDEF DebugPlus}
Windows.MessageBox(0, PChar(AComp.Name), 'TOleControl derivative will be FREEd:', MB_OK);
{$ENDIF}
AComp.Free;
//
end;
end;
// ==========================================
inherited;
end;
end.
Kyllä DirectSoundillakin saa äänet kuuluviin kohtalaisen helposti:
var
DS: IDirectSound8 = nil;
DSB: IDirectSoundBuffer = nil;
procedure TForm1.FormCreate(Sender: TObject);
var
Desc: TDSBufferDesc;
WFX: TWaveFormatEx;
begin
with WFX do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1;
nSamplesPerSec := 44100;
wBitsPerSample := 16;
nBlockAlign := (nChannels * wBitsPerSample) div 8;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
cbSize := 0;
end;
DirectSoundCreate8(nil,DS,nil);
DS.SetCooperativeLevel(Form1.Handle,DSSCL_PRIORITY);
FillChar(Desc,SizeOf(TDSBufferDesc),0);
Desc.dwSize := SizeOf(TDSBufferDesc);
Desc.dwBufferBytes := WFX.nAvgBytesPerSec div 16;
Desc.lpwfxFormat := @WFX;
Desc.dwFlags := DSBCAPS_GLOBALFOCUS;
HR := DS.CreateSoundBuffer(Desc,DSB,nil);
if HR 0 then
begin
ShowMessage('Error creating DirectSound buffer.');
Exit;
end;
//sitten vaan täyttää bufferin äänidatalla
//käyttämällä DSB.Lock kutsua...
DSB.Play(0,0,0);
end;