Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Windows Sound aufnehmen (https://www.delphipraxis.net/196337-windows-sound-aufnehmen.html)

Youuuu 14. Mai 2018 08:07

Delphi-Version: 5

Windows Sound aufnehmen
 
Guten Morgen,

ich habe zum Aufnehmen von Windowssound folgenden Code gefunden

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);    // Record
begin
  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, Handle);
  mciSendString('SET mysound TIME FORMAT MS ' +     // set time
    'BITSPERSAMPLE 8 ' +                // 8 Bit
    'CHANNELS 1 ' +                     // MONO
    'SAMPLESPERSEC 8000 ' +             // 8 KHz
    'BYTESPERSEC 8000',               // 8000 Bytes/s
    nil, 0, Handle);
  mciSendString('RECORD mysound', nil, 0, Handle)
end;


procedure TForm1.Button2Click(Sender: TObject);    // Stop
begin
  mciSendString('STOP mysound', nil, 0, Handle)
end;


procedure TForm1.Button3Click(Sender: TObject);     // Save
var
  verz: String;
begin
  GetDir(0, verz);
  mciSendString(PChar('SAVE mysound ' + verz + '/test.wav'), nil, 0, Handle);
  mciSendString('CLOSE mysound', nil, 0, Handle)
end;
Bei mir scheitert es dann allerdings schon daran, dass NIE eine Datei gespeichert wird, welche ich prüfen kann, ob auch wirklich aufgenommen wurde.

KodeZwerg 14. Mai 2018 08:14

AW: Windows Sound aufnehmen
 
Hier ein komplett lauffähiges Beispiel mit MCI-Aufnahme

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  op: TMCI_Open_Parms;
  rp: TMCI_Record_Parms;
  sp: TMCI_SaveParms;
begin

  // Open
  op.lpstrDeviceType := 'waveaudio';
  op.lpstrElementName := '';
  if mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, cardinal(@op)) <> 0 then
    raise Exception.Create('MCI error');

  try

    // Record
    rp.dwFrom := 0;
    rp.dwTo := 5000; // 5000 ms = 5 sec
    rp.dwCallback := 0;
    if mciSendCommand(op.wDeviceID, MCI_RECORD, MCI_TO or MCI_WAIT, cardinal(@rp)) <> 0 then
      raise Exception.Create('MCI error. No microphone connected to the computer?');

    // Save
    sp.lpfilename := PChar(ExtractFilePath(Application.ExeName) + 'test.wav');
    if mciSendCommand(op.wDeviceID, MCI_SAVE, MCI_SAVE_FILE or MCI_WAIT, cardinal(@sp)) <> 0 then
      raise Exception.Create('MCI error');

  finally
    mciSendCommand(op.wDeviceID, MCI_CLOSE, 0, 0);
  end;

end;
Ändere bei Dir die Befehle entsprechend ab und es sollte funktionieren.

Ps: Das zeichnet Microfon auf....

Youuuu 14. Mai 2018 09:49

AW: Windows Sound aufnehmen
 
Datei wird nun erstellt, super danke.

Gibt es eine Möglichkeit zusätzlich den InputSound mit aufzunehmen, welcher ebenfalls über das Mikrofon zuhören ist? Also Input und Out?

Und gibt es eine Möglichkeit

Zitat:

rp.dwTo := 5000;
Variablel laufen zu lassen, sobald ich die Aufzeichnung selbstständig beende, dann erst die Aufzeichnung beendet und gespeichert wird?

KodeZwerg 14. Mai 2018 10:38

AW: Windows Sound aufnehmen
 
Ok, zweites Beispiel mit Start/Stop Knopf.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 mciSendString('RECORD mySound',nil,0,Handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 mciSendString('STOP mySound',nil,0,Handle);
 mciSendString(PWideChar('SAVE mySound "'+ExtractFilePath(Application.ExeName)+'test.wav"'),nil,0,Handle);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 mciSendString('CLOSE mySound',nil,0,Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 mciSendString('CLOSE mySound',nil,0,Handle);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle);
 mciSendString('SET mySound ' +
                   'TIME FORMAT MS ' +
                   'BITSPERSAMPLE 16 ' +
                   'CHANNELS 2 ' +
                   'SAMPLESPERSEC 44100 ' +
                   'BYTESPERSEC 176400 ' +
                   'ALIGNMENT 4',
                   nil,0,handle);
end;
Ps: Ich weiß nicht ob es PWideChar unter Delphi 5 schon gab, ansonsten austauschen mit PChar.

Youuuu 14. Mai 2018 10:58

AW: Windows Sound aufnehmen
 
Perfekt funktioniert, allerdings nur der Output Sound, gibt es auch eine Möglichkeit den Input Sound auch mit aufzunehmen? Also beide gleichzeitig?

KodeZwerg 14. Mai 2018 11:10

AW: Windows Sound aufnehmen
 
Kannst Du mir ein konkretes Beispiel nennen was Du damit meinst?
Was ich Dir da gegeben habe ist eine Möglichkeit ein Wave in hoher Qualität aufzuzeichnen wo Du per Knopf Start/Stop bestimmst wann Du was machen willst, bei Stop wird gespeichert.
Da es nur ein quicky ist habe ich da noch keine Fehlerkontrolle eingebaut etc.
...Null Kontrolle ob "MySound" überhaupt existiert.
Kopf Start sollte zBsp deaktiviert werden während Aufnahme läuft und Knopf Stop sollte erst aktiviert werden wenn auf Knopf Start gedrückt wird usw usf

Wenn Dich das Thema interessiert könntest Du hier mal reinschnuppern, da wird vielleicht das Beschrieben was Du erreichen möchtest?

Youuuu 14. Mai 2018 11:27

AW: Windows Sound aufnehmen
 
Also wenn ich in das Mikro spreche nimmt er auf.

Aber nicht den Sound, der über PC läuft (Input). Also als Beispiel, ich höre mir im Mediaplayer eine Datei an und möchte den Sound aufnehmen.

EWeiss 14. Mai 2018 11:37

AW: Windows Sound aufnehmen
 
Zitat:

Zitat von Youuuu (Beitrag 1402033)
Also wenn ich in das Mikro spreche nimmt er auf.

Aber nicht den Sound, der über PC läuft (Input). Also als Beispiel, ich höre mir im Mediaplayer eine Datei an und möchte den Sound aufnehmen.

Ich lade gleich ein Projekt hoch.
Das MCI ist einfach zu alt.

EDIT:
Nimm das hier

Wave und Mp3 kannst aufnehmen.. bzw. wird geschrieben.

gruss

KodeZwerg 14. Mai 2018 13:12

AW: Windows Sound aufnehmen
 
Danke Emil, das erspart mir ein
Delphi-Quellcode:
WaveIn : HWAVEIN;
usw. gedönse :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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