![]() |
AW: Syntax SendMCICommand
Zitat:
Hatte nur herausgelesen du hättest einen Fehler. Zitat:
Delphi-Quellcode:
Man könnte noch den Type deklarieren..
unit MCIPlayer;
interface uses Windows, Messages, mmsystem, StrUtils, SysUtils, Dialogs; type TMCIPlayer = class private { private-Deklarationen } command: PWideChar; return: array [0..255] of Widechar; resultSize: Integer; protected { protected-Deklarationen } public { public-Deklarationen } duration: Integer; paused: Bool; function getPosition: Integer; procedure play; procedure pausePlay; procedure stop; constructor Create(fileName: string; autoplay: Bool); destructor Destroy; override; end; implementation { TMCIPlayer } constructor TMCIPlayer.Create(fileName: string; autoplay: Bool); var lResult: cardinal; begin //init variables paused := FALSE; resultSize := 255; // We want to play a File. command := PWideChar('open "' + fileName + '" type waveaudio alias mciplayer wait'); lResult := mciSendString(command, return, resultSize, 0); if lResult <> 0 then begin mciGetErrorString(lResult, return, 255); ShowMessage('MCI error:' + return); duration := 0; end; // Calculate duration command := ('set mciplayer time format milliseconds wait'); mciSendString(command, return, resultSize, 0); command := ('status mciplayer length wait'); mciSendString(command, return, resultSize, 0); if (StrLen(return) > 0) then duration := StrToInt(return) else duration := 0; if autoplay then play; end; destructor TMCIPlayer.Destroy; begin command := ('close mciplayer wait'); mciSendString(command, return, resultSize, 0); end; function TMCIPlayer.getPosition: Integer; begin command := ('status mciplayer position wait'); mciSendString(command, return, resultSize, 0); if (StrLen(return) > 0) then result := StrToInt(return) else result := 0; end; procedure TMCIPlayer.pausePlay; begin paused := not paused; if paused then begin command := ('pause mciplayer notify'); mciSendString(command, return, resultSize, 0); end else begin command := ('resume mciplayer notify'); mciSendString(command, return, resultSize, 0); end; end; procedure TMCIPlayer.play; begin command := ('play mciplayer notify'); mciSendString(command, return, resultSize, 0); end; procedure TMCIPlayer.stop; begin command := ('stop mciplayer notify'); mciSendString(command, return, resultSize, 0); end; end. Also sequencer für MIDI, waveaudio für Wave usw... um die Klasse für mehrere AudioDateien zugänglich zu machen aber das könnt ihr ja selber machen. Noch ein paar deviceType
Delphi-Quellcode:
gruss
// dType
// sequencer := MID, MIDI, RMI // waveaudio := WAVE // cdaudio := CDA // mpegvideo := AIF, AIFC, AIFF, AU, MP3, SND // mpegvideo2 := WMA // usw... myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Chariots Of Fire.mid', 'sequencer', False); |
AW: Syntax SendMCICommand
Liste der Anhänge anzeigen (Anzahl: 1)
Das sieht ja schon mal gut aus, danke EWeiss.
Zitat:
Ich habe die MCIPlayer Unit so wie sie ist eingebunden und so benutzt:
Delphi-Quellcode:
Das ist nur ein einfacher Test, wirft auch keine Fehler auf, aber hören tu ich keinen Sound...!?
unit uTest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MCIPlayer; type TForm1 = class(TForm) PlayButton: TButton; DestroyButton: TButton; CreateButton: TButton; procedure PlayButtonClick(Sender: TObject); procedure CreateButtonClick(Sender: TObject); procedure DestroyButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } myMCIPlayer: TMCIPlayer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DestroyButtonClick(Sender: TObject); begin myMCIPlayer.Destroy; end; procedure TForm1.PlayButtonClick(Sender: TObject); begin myMCIPlayer.play; end; procedure TForm1.CreateButtonClick(Sender: TObject); var Pfad : string; begin Pfad := ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav'; myMCIPlayer := TMCIPlayer.Create(Pfad, False); end; end. Benutze ich das falsch? (Ich hab das ganze wieder gepackt und in den Anhang gesteckt...) |
AW: Syntax SendMCICommand
Er wirft einen Fehler und zwar dann wenn man nicht vorher auf create geklickt hat
und die Datei abspielen will. Ansonsten! Ich höre Sound.. Du kannst ja mal folgendes ersetzen..
Delphi-Quellcode:
constructor Create(fileName: string; dtype: string; autoplay: Bool);
Delphi-Quellcode:
constructor TMCIPlayer.Create(fileName: string; dtype: string; autoplay: Bool);
var lResult: cardinal; begin //init variables paused := FALSE; resultSize := 255; // We want to play a File. command := PWideChar('open "' + fileName + '" type ' + dtype + ' alias mciplayer wait'); lResult := mciSendString(command, return, resultSize, 0);
Delphi-Quellcode:
myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Meine.mp3', 'mpegvideo', False);
Sollte spielen .. bzw wie schon gesagt geht dein *.wav auch. gruss |
AW: Syntax SendMCICommand
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Zitat:
Desweiteren, wie kann man dabei die Lautstärke beeinflussen? gruß |
AW: Syntax SendMCICommand
Zitat:
Mir ging es darum das du mal ne einfache MP3 Testen tust.. ;) Zitat:
War ja nur eine Datei unter Sounds und die funktioniert bei mir. Zitat:
Delphi-Quellcode:
hättest du ruhig lassen können ;)
Pfad := ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav';
myMCIPlayer := TMCIPlayer.Create(Pfad, 'waveaudio', False); gruss |
AW: Syntax SendMCICommand
Zitat:
Zitat:
Zitat:
Aktuell sieht's jetzt so aus:
Delphi-Quellcode:
Wie gewohnt aber kein Sound... Ich habs auch mit mpegvideo und ner *.mp3 versucht, aber da auch kein Ton...
Pfad := ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav';
myMCIPlayer := TMCIPlayer.Create(Pfad, 'waveaudio', False); |
AW: Syntax SendMCICommand
Zitat:
Zitat:
Kannst nur hoffen das es jemand anderer hier im forum nochmal testet. Geht alles hier mp3 und wave gruss |
AW: Syntax SendMCICommand
Zitat:
Zitat:
Riesen Dank für deine Hilfe erstmal :dp: |
AW: Syntax SendMCICommand
Zitat:
gruss |
AW: Syntax SendMCICommand
Ich habe einfach alles nochmal in mein anderes Sample mit der Lautstärke reingeschrieben und ja, wie soll ich sagen, auf einmal höre ich Sounds :thumb:
Jetzt bin ich mir nur nicht ganz schlüssig, wie ich das am klügsten lösen soll. Der Sinn war ja immer wenn der Sound ausgeführt werden soll, im Beispiel bei jedem Tastenschlag ins Editfeld immer im Wechsel SoundAbspielen1 und SoundAbspielen2 aufzurufen. SoundAbspielen1 wird jetzt die Variante mit MCI.
Delphi-Quellcode:
Natürlich muss der myMCIPlayer erstellt und auch wieder zerstört werden. Hier nun die Frage: Wie löse ich das am klügsten?
procedure SoundAbspielen1;
begin myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', False); myMCIPlayer.play; end; Er soll also am besten unmittelbar vor dem Soundabspielen erstellt werden und sofort danach zerstört werden. Aber wie? Folgendes funktioniert ja nicht:
Delphi-Quellcode:
So würde der Sound kaum einen Bruchteil einer Sekunde angespielt werden, weil man ihm den Player gleich wieder wegnimmt...
procedure SoundAbspielen1;
begin myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', False); myMCIPlayer.play; myMCIPlayer.destroy; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz