| |
|
|
- Seite 1 - |
|
![: 25.08.2011](.././../../i/a/noavatar.gif) | Grüß euch!
Bei einem kürzlichen Spieleprojekt stellte sich mir die Frage, ob man den Audioeingangspegel (bzw. die Veränderung desselben) eines Mikrofons in XProfan in irgendeiner Form graphisch darstellen lassen kann. Ich kam auf diesen Gedanken, da sich somit ggf. Möglichkeiten für "lautstärkegesteuerte" Spielsteuerungen ergeben würden (gab ja mal vor vielen Monden eine Pong-Variante mit vergleichbarer Bedienung).
Vielen Dank schon mal im Vorraus ![](.././../../i/s/__upl_ext_1111498557.gif)
MfG, Ernst. |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
![iF: 25.08.2011](.././../../i/a/1.gif) | Coole Frage, wüsste ich auch gerne wie das geht und habe dazu noch nichts parat.
Man müsste halt wohl Audiodaten in einem Speicher vorliegen haben um aus den darin enthaltenen Daten wiederum eine Lautstärke zu errechnen.
Vlt. kann ich hier anknüpfen: [...] ![](/intl/i/lnk.gif) |
|
|
| |
|
|
|
![iF: 25.08.2011](.././../../i/a/1.gif) | Soso... [...] ... mist muss ins Bett morgen früh raus...
MSDN
The common order for calling Waveform Audio functions to record audio is:
waveInOpen waveInPrepareHeader waveInAddBuffer waveInStart waveInUnprepareHeader waveInClose
- so sollte man wohl vorgehen -
das sollte sich wohl erarbeiten lassen. |
|
|
| |
|
|
|
![iF: 26.08.2011](.././../../i/a/1.gif) | Grad aufgewacht weils einfach "zu" warm ist und dachte so "gugste mal"... -
gleich aber wieder ab in die Heia...
Pegel anzeigen ist einfach... meinste sowas?
Herunterladen externer Download
![](https://xprofan.com/files/iivki.png) |
|
|
| |
|
|
|
![iF: 26.08.2011](.././../../i/a/1.gif) |
|
|
| |
|
|
|
![: 27.08.2011](.././../../i/a/noavatar.gif) | Vielen Dank - das sieht doch sehr interessant aus Werde mir das Ganze jetzt mal zu Gemüte führen. |
|
|
| |
|
|
|
![: 27.08.2011](.././../../i/a/noavatar.gif) | Perfekt - genau das ist es! Vielen Dank! Ich frag einfach mal - hättest du vllt. einen Codeschnipsel o.Ä. da? ![](.././../../i/s/__upl_ext_1100084240.gif) |
|
|
| |
|
|
|
![iF: 27.08.2011](.././../../i/a/1.gif) | Selbstverständlich sollst Du soviel Quellcode dazu bekommen wie Du magst -
würde ich nur gerne wissen in welcher Variante Du den gerne hättest
da ich dazu durchaus gerne einige Lösungsansätze anbieten würde.
Richtig optimal und am einfachsten gehts wenn Du XProfan in Verbindung mit XPSE [...] einsetzt -
da könnte ich Dir fix eine Variante "herbilden" sodass das eigentliche Hauptprogramm garnichts tun muss und einfach z.B. in einer Variable immer der aktuelle Pegelwert steht.
Dann gäbe es da noch eine reine XProfan-Variante die aber nicht so zuverlässig sein wird und wo Du im Programm halt selbst ständig den Pegelwert herausmessen musst was gewisse Verarbeitungszeit in Anspruch nimmt und eben mehr oder weniger "ständig" geschehen muss da Du ja nicht den Wert von vorgestern wissen möchtest.
Mehr Arbeit würden da machen ne DLL sowie auch eine Unit oder Include die eine DLL beinhalten und aber auch ginge ein Modul als Unit welches die Funktionen als MemoryModule vorhalten könnte.
Hier eine minimale "Quick&Dirty"-Variante in "reinem" XProfan:
'{$cleq}
'{$runtime c:\dev\x11}
'{$compiler c:\dev\x11}
struct waveFormatEx=wFormatTag%,nChannels%,nSamplesperSec&,nAvgBytesPerSec&,nBlockAlign%,wBitsPerSample%,cbSize%
declare waveform#
var WaveHdrIn&=0
cls
usermessages 960
dim waveform#,waveFormatEx
with waveform#
.wFormatTag%=1
.nChannels%=1
.wBitsPerSample%=8
.nAvgBytesPerSec&=16000*1*8
.nSamplesPerSec&=16000
.nBlockAlign%=1
.cbSize%=0
endwith
var hWaveIn&=external("kernel32","GlobalAlloc",64,4)
case external("winmm","waveInOpen",hWaveIn&,-1,waveform#,%hWnd,0,65536) : end messagebox("ERROR","ERROR",4096)
hWaveIn&=long(hWaveIn&,0)
whileLoop 2
WaveHdrIn&=createWaveHdrIn()
external("winmm","waveInPrepareHeader",hWaveIn&,WaveHdrIn&,32)
external("winmm","waveInAddBuffer",hWaveIn&,WaveHdrIn&,32)
wend
external("winmm","waveInStart",hWaveIn&)
var peek!=0
var tmp&=0
while 1
waitinput
select %uMessage
caseof 960
if &uwParam=hWaveIn&
WaveHdrIn&=createWaveHdrIn()
external("winmm","waveInPrepareHeader",hWaveIn&,WaveHdrIn&,32)
external("winmm","waveInAddBuffer",hWaveIn&,WaveHdrIn&,32)
tmp&=abs(128-byte(long(&ulParam,0),0))*2
peek!=peek!*0.95
case peek!<tmp& : peek!=tmp&
usebrush 1,$FFFFFF
rectangle 0,0 - 40,256-peek!
usebrush 1,$FF
rectangle 0,(256-peek!) - 40,256
external("kernel32","GlobalFree",long(&ulParam,0))
external("kernel32","GlobalFree",&ulParam)
endif
endSelect
wend
end
proc createWaveHdrIn
var waveHdrIn&=external("kernel32","GlobalAlloc",64,32)
long waveHdrIn&,0=external("kernel32","GlobalAlloc",64,64),64
return waveHdrIn&
endproc
Herunterladen externer Download
![](https://xprofan.com/files/amiki.png)
PS: Warum schreibst als Gast statt angemeldet? ( [...] ) -
so bekommst doch keine Info wenn Dir einer was schreibt. ![](.././../../i/s/-rolleyes.png) |
![](/intl/i/dw.gif) |
|
| |
|
|
|
![: 27.08.2011](.././../../i/a/noavatar.gif) | Ja super - vielen Dank, läuft! Ja also wenn's nichts ausmacht, würde ich mich über eine Version mit XPSE sehr freuen ![](.././../../i/s/__upl_ext_1111498551.gif)
Und ja, stimmt, eigentlich könnte ich mich auch anmelden. Mach ich mal ab der nächsten Antwort. Hatte damit vor längerer Zeit irgendwie Probleme und bin deshalb aus Gewohnheit hautsächlich nur noch als Gast anwesend ![](.././../../i/s/__upl_ext_1111498551.gif) |
|
|
| |
|
|
|
![iF: 27.08.2011](.././../../i/a/1.gif) | Wenn irgendwie ein Anmeldeproblem noch bestehen sollte dann kannst Du das z.B. auch hier unter Kontakt einfach schreiben: [...] ![](/intl/i/lnk.gif)
Ich glaube es war etwas irritierend das ich vom Anmelden per Mitgliedsname zu Anmelden per E-Mail übergegangen bin einfach weil es sicherer ist weil die Mitgliedsnamen öffentlich sind im Gegensatz zu den E-Mail-Adressen und ich sichere/ echte Accounts anbeiten möchte die deshalb auch SSL-gesichert sind.
So eine Variante mit XPSE stelle ich Dir her und poste die dann hier. ![](.././../../i/s/_n_teeth_smile.gif) |
|
|
| |
|
|
|
![iF: 28.08.2011](.././../../i/a/1.gif) | Schau mal ob Du mit der miclevel.inc klar kommst: [...] ![](/intl/i/lnk.gif) |
|
|
| |
|
|
|
![Endwhile: 29.08.2011](.././../../i/a/1261.gif) Endwhile | So, jetzt als registrierter Nutzer ![](.././../../i/s/__upl_ext_1111498551.gif) Also, perfekt - vielen Dank! Das ist ziemlich genau das, was ich mir vorstellte. Werde mir das mal genauer ansehen und bei Fragen ggf. noch mal was schreiben. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
![iF: 29.08.2011](.././../../i/a/1.gif) | |
|
| |
|
|