Hallo,
ich möchte mir gern eine Software basteln die WAV-Audio aufnimmt.
Sie sollte jede Stunde eine neue Datei anfangen. Sozusagen ein Logger für Audio.
Jetzt habe ich mit diesem Code rumprobiert:
http://forums.purebasic.com/german/view ... ef8#p36139
Damit habe ich aber folgende Probleme:
Diese MCI Lösung scheint in den RAM aufzunehmen. Das ist nicht so optimal
weil man ja für eine Stunde schonmal 700 MB braucht.
...und wenn die Datei fertig geschrieben wurde lässt sich keine neue Aufnahme
mehr starten obwohl MCI("close recsound") drinsteht.
Ich will da keine hochkomplizierten Sachen mit machen, einfach nur eine WAV
vom Eingang der Soundkarte aufnehmen und nach einer Stunde neu anfangen.
Ich hab schon ziemlich viele Codeschnipsel durchprobiert und bin seit 2 Tagen
am suchen, aber finde nichts passendes.
Vielleicht hat ja jemand einen Tipp für mich.
Gruß
Tim
Audio aufnehmen
Re: Audio aufnehmen
Eventuell hilft dir das hier weiter:
Code: Alles auswählen
Procedure SaveWave(NrSeconds , Outputfile$)
wf.WAVEFORMATEX
wf\wFormatTag = #WAVE_FORMAT_PCM
wf\nChannels = 2
wf\nSamplesPerSec = 44100
wf\wBitsPerSample = 16
wf\nAvgBytesPerSec = (wf\wBitsPerSample / 8) * wf\nChannels * wf\nSamplesPerSec
wf\nBlockAlign = (wf\wBitsPerSample / 8) * wf\nChannels
If waveInOpen_(@hwi , #WAVE_MAPPER , wf , 0 , 0 , #WAVE_FORMAT_DIRECT) = #MMSYSERR_NOERROR
wh.WAVEHDR
wh\lpData = AllocateMemory(wf\nAvgBytesPerSec * NrSeconds)
wh\dwBufferLength = MemorySize(wh\lpData)
wh\dwFlags = 0
If wh\lpData
If waveInPrepareHeader_(hwi , wh , SizeOf(WAVEHDR)) = #MMSYSERR_NOERROR
If waveInAddBuffer_(hwi , wh , SizeOf(WAVEHDR)) = #MMSYSERR_NOERROR
Debug "Aufnahme läuft..."
If waveInStart_(hwi) = #MMSYSERR_NOERROR
waveInStop_(hwi)
waveInUnprepareHeader_(hwi,wh,SizeOf(WAVEHDR))
If CreateFile(0,Outputfile$)
WriteData(0 , @"RIFF" , 4)
WriteLong(0 , 44 + wh\dwBytesRecorded)
WriteData(0 , @"WAVE" , 4)
WriteData(0 , @"fmt " , 4)
WriteLong(0 , 16)
WriteData(0 , wf , SizeOf(WAVEFORMATEX) - 2)
WriteData(0 , @"data" , 4)
WriteLong(0 , wh\dwBytesRecorded)
WriteData(0 , wh\lpData , wh\dwBytesRecorded)
CloseFile(0)
EndIf
Debug "...fertig"
EndIf
EndIf
EndIf
FreeMemory(wh\lpData)
EndIf
waveInClose_(hwi)
EndIf
EndProcedure
;TEST - 10 Sekunden aufnehmen
SaveWave(10 , "C:\Test.wav")
Re: Audio aufnehmen
Hi,
danke für die Antwort. Ich werde damit mal ein bisschen basteln.
Gruß
Tim
danke für die Antwort. Ich werde damit mal ein bisschen basteln.
Gruß
Tim