Also an einem stream ist nichts falsch.
Ich bin inzwischen soweit dass ich die WinMM.dll also das MMSystem will. jedoch blicke ich bei der Documentation im
msdn nicht ganz durch.
Soweit bin ich gekommen:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, MMSystem, Classes, Windows;
var
Wave : HWAVEOUT; { WaveOutHandle }
WaveEx : TWaveFormatEx; { WaveEx Inhalt }
Stream : TMemoryStream; { Stream zum abspiechern der Wellen }
WaveHeader : TWaveHDR; { WaveHeader zum senden }
AudioDrivers : Cardinal;
AudioDriver : Cardinal; AudioInfo : WaveOutCaps;
{procedure SetVolume(Left, Right: Word); overload;
begin
WriteLn('1');
end;
procedure SetVolume(Volume : Word); overload;
begin
WriteLn('2');
WriteLn(Volume);
end;}
begin
{ Audiotreiber ermitteln }
AudioDrivers := waveOutGetNumDevs();
{ Alle Treiber durchlaufen }
for AudioDriver := 0 to AudioDrivers do begin
{ Treiberinfos einholen }
if waveOutGetDevCaps(AudioDriver, @AudioInfo, sizeof(WaveOutCaps)) = MMSYSERR_NOERROR then begin
{ Namen ausgeben }
WriteLn(AudioInfo.szPname);
{ Infos ausdrucken }
Write(' - MID : '); WriteLn(AudioInfo.wMid);
Write(' - PID : '); WriteLn(AudioInfo.wPid);
Write(' - Version : '); WriteLn(AudioInfo.vDriverVersion);
Write(' - Formate : '); WriteLn(AudioInfo.dwFormats);
Write(' - Channels : '); WriteLn(AudioInfo.wChannels);
Write(' - Support : '); WriteLn(AudioInfo.dwSupport);
end;
end;
{ WaveEx Einstellungen }
WaveEx.wFormatTag := WAVE_FORMAT_PCM; {PCM }
WaveEx.nChannels := 2; { Stereo }
WaveEx.nSamplesPerSec := 44100; { Sampelrate }
WaveEx.wBitsPerSample := 16; { Bps }
{ Unwichtigeres }
WaveEx.nBlockAlign := (WaveEx.nChannels * WaveEx.wBitsPerSample) div 8;
WaveEx.nAvgBytesPerSec := WaveEx.nSamplesPerSec * WaveEx.nBlockAlign;
WaveEx.cbSize := 0;
{ WaveForm-Audio Output Device öffnen }
if MMSystem.waveOutOpen(@Wave,WAVE_MAPPER,@WaveEx,0,0,0) = MMSYSERR_NOERROR then
WriteLn('WaveOut Open...')
else
Exit;
{ Datei einlesen }
Stream := TMemoryStream.Create;
Stream.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Blow3.wav');
WriteLn(Stream.Size);
{ Datensatz erstellen }
WaveHeader.lpData := Stream.Memory;
WaveHeader.dwBufferLength := Stream.Size;
WaveHeader.dwFlags := 0;
{ Header vorbereiten }
if MMSystem.waveOutPrepareHeader(Wave,@WaveHeader,SizeOf(WaveHDR)) = MMSYSERR_NOERROR then
WriteLn('Header prepared...')
else
Exit;
{ Einen Datensatz senden }
if MMSystem.waveOutWrite(Wave,@WaveHeader,SizeOf(WaveHDR)) = MMSYSERR_NOERROR then
WriteLn('Header writen...')
else
Exit;
{ Warten auf die Datensatzbeendung }
while MMSystem.waveOutUnPrepareHeader(Wave,@WaveHeader,SizeOf(WaveHDR)) = WAVERR_STILLPLAYING do begin
Sleep(100); //Warten
WriteLn('Testing vor Unprepare'); //Ausgeben
end;
WriteLn('Header unprepared...');
//This is the same
//SetVolume($44,$44); SetVolume($44);
//WriteLn($FF);
//WriteLn($FF + $FF);
Sleep(1000);
{ WaveForm-Audio Output Device schließen }
MMSystem.waveOutClose(Wave);
//PlaySound('Blow3.wav',0,0);
end.
Allerdings wir der Sound Blow3.wav nicht abgestielt, wo ist da jetzt mein denkfehler? schließlich höre ich ein rauschen