AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sprachaufnahme / mciSendString
Thema durchsuchen
Ansicht
Themen-Optionen

Sprachaufnahme / mciSendString

Ein Thema von brechi · begonnen am 8. Okt 2010 · letzter Beitrag vom 8. Okt 2010
Antwort Antwort
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#1

Sprachaufnahme / mciSendString

  Alt 8. Okt 2010, 11:52
Hi,
ich möchte gerne alles Aufnehmen was über das Mircro reinkommt bzw. das was alles unter Sound/Recording in Windows eingestellt ist. Da es kommerziell ist, fällt die bass.dll flach.
Natürlich kann man das ganze auch direkt mit den Windows-Funkionen machen z.B. mciSendString, jedoch ist die Aufnahme immer abgeschnitten, bzw mit manchen Frequenzen funktioniert das auf unterschiedlichen System gar nicht. Als Beispiel habe ich eine Datei folgendermaßen aufgenommen:

Delphi-Quellcode:
    PChar(
    Format('SET mySound ' +
    'TIME FORMAT MS ' +
    'BITSPERSAMPLE %d ' +
    'CHANNELS %d ' +
    'SAMPLESPERSEC %d ' +
    'BYTESPERSEC %d ' +
    'ALIGNMENT %d',
    [
    BitsPerSample2Int(FBitsPerSample),
      Channel2Int(FChannel),
      SampleTime2Int(FSampleTime),
      BitsPerSample2Int(FBitsPerSample) * Channel2Int(FChannel) * SampleTime2Int(FSampleTime) div 8,
      Channel2Int(FChannel) * BitsPerSample2Int(FBitsPerSample) div 8
      ])
      ),
Zwischen Start und Stop habe ich ein Sleep(200) stehen. D.h. die Länge der Aufnahme sollte > 200 sein. Als Ergebnis erhalte ich aber folgendes (siehe Length)


Code:
abps8 acMono ast800 FileSize: 44, Length: 0 Status: Error
abps8 acMono ast11025 FileSize: 1580, Length: 139 Status: OK
abps8 acMono ast22050 FileSize: 3116, Length: 139 Status: OK
abps8 acMono ast44100 FileSize: 6188, Length: 139 Status: OK
abps8 acStereo ast800 FileSize: 44, Length: 0 Status: Error
abps8 acStereo ast11025 FileSize: 3116, Length: 139 Status: OK
abps8 acStereo ast22050 FileSize: 6188, Length: 139 Status: OK
abps8 acStereo ast44100 FileSize: 13868, Length: 157 Status: OK
abps16 acMono ast800 FileSize: 44, Length: 0 Status: Error
abps16 acMono ast11025 FileSize: 3116, Length: 139 Status: OK
abps16 acMono ast22050 FileSize: 6188, Length: 139 Status: OK
abps16 acMono ast44100 FileSize: 13868, Length: 157 Status: OK
abps16 acStereo ast800 FileSize: 44, Length: 0 Status: Error
abps16 acStereo ast11025 FileSize: 6188, Length: 139 Status: OK
abps16 acStereo ast22050 FileSize: 13868, Length: 157 Status: OK
abps16 acStereo ast44100 FileSize: 29228, Length: 165 Status: OK
Auf unterscheidlichen Rechnern gibt es teilweise öfter mal als Länge 0. z.B. funktioniert auf einem Rechner nur die Kombination abps16/acStero, also die letzten 3, bei allen anderen hat die Aufnahme von 200msek die Länge 0.

Das Beispiel mit den 200msek hab ich nur gemacht, damit ich sehe ob alles was ich wollte aufgenommen wird. Komischweweise ist dort woe die Länge 0 ist, unabhängig von der Aufnahemzeit (z.B. 7sek) die Aufnahme immer genau auf die Sekunde lang (z.B. bei 7 Sekunden kann es sein, dass die Aufnahme exakt 5000msek ist).

Jedenfalls ist aber in ALLEN Fällen immer am Schluss etwas abgeschnitten (z.B. bis zu 150msek), in den Fällen wo die Länge 0 ist auch mehrere Sekunden.

Was mach ich falsch?

Delphi-Quellcode:
R.StartRecord;
Sleep(200);
R.StopRecord;
R.SaveToFile(fn);
mit

Delphi-Quellcode:
mciSendString('RECORD mySound', nil, 0, 0);
mciSendString('STOP mySound', nil, 0, 0);
Format(
    'SAVE mySound "%s"',
    [_FileName])
    ), nil, 0, 0));
Im Anhang das Testprogramm (leider ohne Source).

Oder hat jemand anderes eine kostenlose andere Möglichkeit zur Soundaufnahme?
Angehängte Dateien
Dateityp: zip AudioTest.zip (204,5 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

AW: Sprachaufnahme / mciSendString

  Alt 8. Okt 2010, 12:13
Hallo,

Vor einiger Zeit habe ich auch etwas damit herumexperimentiert:
http://www.delphipraxis.net/748260-post.html

Habe noch einige Kleinigkeiten geändert, siehe Anhang.
Angehängte Dateien
Dateityp: zip SoundRec.zip (2,1 KB, 24x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: Sprachaufnahme / mciSendString

  Alt 8. Okt 2010, 13:33
Danke,
du machst aber genau das gleiche (außer "time format bytes" bzw. "format tag pcm").

Auch hier funktioniert

Delphi-Quellcode:
  Bits = 8;
  iSamples = 800;
  iChannels = 1;
bei mir nicht (Dateigröße = 44, Länge = 0). Mit 16/44100/2 ist auch hier die Länge < 200msec obwohl ein Sleep von 200msek dazwischen ist.

Delphi-Quellcode:
  mciSendString(PChar(strSettings), nil, 0, Handle);
  mciSendString('RECORD capture', nil, 0, Handle);
  Sleep(200);
  mciSendString('STOP capture', nil, 0, Handle);
(auch ein WAIT im mciSendString hilft nicht, falls jemand meint, das Starten der Aufnahme dauert länger. Es fehlt bei mir immer am Schluss :/)
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:35 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