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?