AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Syntax SendMCICommand

Ein Thema von Dunkelbunt27 · begonnen am 22. Jul 2012 · letzter Beitrag vom 18. Aug 2014
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Syntax SendMCICommand

  Alt 24. Jul 2012, 19:52
Hallo EWeiss,
das Ding ist, ich brauche beides PlaySound und SendMCICommand.
Der Sound wird häufig schnell hintereinander wiedergegeben und soll sich dabei überlagern, so wie sich das Geräusch von den Tasten die du drückst überlagert (wenn du das schnell hintereinander machst). Dazu habe ich nicht viel gefunden und habe es so gelöst, dass immer abwechselnd der Sound mit PlaySound oder mit SendMCICommand wiedergegeben wird. Das erreicht zufriedenstellend dieses Ziel.
Darum muss SendMCICommand laufen...
Ah jo wenn es dann so läuft.
Hatte nur herausgelesen du hättest einen Fehler.

Zitat:
Gerät ist nicht geöffnet oder wird vom MCI nicht erkannt.
Trotzdem nochmal die leicht abgeänderte Classe
Delphi-Quellcode:
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.
Man könnte noch den Type deklarieren..
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:
  // 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);
gruss

Geändert von EWeiss (24. Jul 2012 um 20:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#12

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 11:56
Das sieht ja schon mal gut aus, danke EWeiss.
Zitat:
Man könnte noch den Type deklarieren..
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.
Ich brauch erstmal nur WAVE-Dateien.

Ich habe die MCIPlayer Unit so wie sie ist eingebunden und so benutzt:
Delphi-Quellcode:
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.
Das ist nur ein einfacher Test, wirft auch keine Fehler auf, aber hören tu ich keinen Sound...!?
Benutze ich das falsch?

(Ich hab das ganze wieder gepackt und in den Anhang gesteckt...)
Angehängte Dateien
Dateityp: zip Test Sounds.zip (651,3 KB, 9x aufgerufen)
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 12:04
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..

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);
   myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Meine.mp3', 'mpegvideo', False);

Sollte spielen .. bzw wie schon gesagt geht dein *.wav auch.

gruss

Geändert von EWeiss (25. Jul 2012 um 12:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#14

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 12:35
Zitat:
Er wirft einen Fehler und zwar dann wenn man nicht vorher auf create geklickt hat
und die Datei abspielen will.
Soweit war ich zum Glück auch schon

Zitat:
Ansonsten!
Ich höre Sound..
Hast du mal die Datei ausprobiert die ich angehängt habe? Ich höre auch nach deinem Änderungsvorschlag keinen Sound, egal wie laut ich mein System drehe

Zitat:
myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Meine.mp3', 'mpegvideo', False);

Sollte spielen .. bzw wie schon gesagt geht dein *.wav auch.
Ich schätze mal ich müsste dann statt mpegvideo waveaudio schreiben, richtig?

Desweiteren, wie kann man dabei die Lautstärke beeinflussen?

gruß
Angehängte Dateien
Dateityp: zip Test Sounds.zip (723,8 KB, 9x aufgerufen)
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 12:41
Zitat:
Ich schätze mal ich müsste dann statt mpegvideo waveaudio schreiben, richtig?
Ja wenn du weiterhin Wave Dateien abspielen willst.
Mir ging es darum das du mal ne einfache MP3 Testen tust..

Zitat:
Hast du mal die Datei ausprobiert die ich angehängt habe?
Ohne den Quelltext geöffnet zu haben getetstet!
War ja nur eine Datei unter Sounds und die funktioniert bei mir.

Zitat:
Desweiteren, wie kann man dabei die Lautstärke beeinflussen?
Das tust du doch schon im anderen Sample.

Delphi-Quellcode:
  Pfad := ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav';
  myMCIPlayer := TMCIPlayer.Create(Pfad, 'waveaudio', False);
hättest du ruhig lassen können

gruss

Geändert von EWeiss (25. Jul 2012 um 12:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#16

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 13:08
Zitat:
Ja wenn du weiterhin Wave Dateien abspielen willst.
Mir ging es darum das du mal ne einfache MP3 Testen tust..
Ja, ich will nur wave Dateien abspielen.

Zitat:
War ja nur eine Datei unter Sounds und die funktioniert bei mir.
Warum höre ich dann bei menem eigenen Programm keinen Sound!?

Zitat:
Zitat:
Desweiteren, wie kann man dabei die Lautstärke beeinflussen?
Das tust du doch schon im anderen Sample.
Wie meinst du das?

Aktuell sieht's jetzt so aus:
Delphi-Quellcode:
Pfad := ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav';
myMCIPlayer := TMCIPlayer.Create(Pfad, 'waveaudio', False);
Wie gewohnt aber kein Sound... Ich habs auch mit mpegvideo und ner *.mp3 versucht, aber da auch kein Ton...
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 13:13
Zitat:
Wie meinst du das?
Du veränderst doch schon über Spin die lautstärke in dem alten Sample oder nicht?

Zitat:
Wie gewohnt aber kein Sound... Ich habs auch mit mpegvideo und ner *.mp3 versucht, aber da auch kein Ton...
Dann ist irgend etwas in deinem System nicht in Ordnung bei mir gehts.

Kannst nur hoffen das es jemand anderer hier im forum nochmal testet.

Geht alles hier mp3 und wave

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#18

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 13:17
Zitat:
Du veränderst doch schon über Spin die lautstärke in dem alten Sample oder nicht?
Ah okay, gut, stimmt natürlich.

Zitat:
Dann ist irgend etwas in deinem System nicht in Ordnung bei mir gehts.
Kannst nur hoffen das es jemand anderer hier im forum nochmal testet.
Geht alles hier mp3 und wave
Ein bisschen beunruhigend, mal schauen wie es sich auf anderen PC's verhält.

Riesen Dank für deine Hilfe erstmal
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 13:18
Zitat:
Riesen Dank für deine Hilfe erstmal
Kein Problem mach ich gern wenn ich kann

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#20

AW: Syntax SendMCICommand

  Alt 25. Jul 2012, 13:35
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

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:
procedure SoundAbspielen1;
begin
  myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', False);
  myMCIPlayer.play;
end;
Natürlich muss der myMCIPlayer erstellt und auch wieder zerstört werden. Hier nun die Frage: Wie löse ich das am klügsten?
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:
procedure SoundAbspielen1;
begin
  myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', False);
  myMCIPlayer.play;
  myMCIPlayer.destroy;
end;
So würde der Sound kaum einen Bruchteil einer Sekunde angespielt werden, weil man ihm den Player gleich wieder wegnimmt...
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz