Audio aufnehmen

Anfängerfragen zum Programmieren mit PureBasic.
tim
Beiträge: 21
Registriert: 05.12.2010 20:49

Audio aufnehmen

Beitrag von tim »

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
Mr.L
Beiträge: 51
Registriert: 05.02.2011 21:04

Re: Audio aufnehmen

Beitrag von Mr.L »

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")
tim
Beiträge: 21
Registriert: 05.12.2010 20:49

Re: Audio aufnehmen

Beitrag von tim »

Hi,

danke für die Antwort. Ich werde damit mal ein bisschen basteln.


Gruß
Tim
Antworten