| |
|
|
| 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 per "lautstärkegesteuerte" Spielsteuerungen ergeben würden (gab ja mal vor vielen Monden eine Pong-Variante mit vergleichbarer Bedienung).
Vielen Dank schon mal im Vorraus
MfG, Ernst. |
|
|
| |
|
|
|
| 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: [...] |
|
|
| |
|
|
|
| Soso... [...] ... mist muss ins Bett morgen presto 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. |
|
|
| |
|
|
|
| Grad aufgewacht weils einfach "zu" warm ist und dachte so "gugste mal"... -
gleich aber wieder ab in die Heia...
Pegel Mostra ist einfach... meinste sowas?
Herunterladen externer Download
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
| Vielen Dank - das sieht doch sehr interessant aus Werde mir das Ganze jetzt mal zu Gemüte führen. |
|
|
| |
|
|
|
| Perfekt - genau das ist es! Vielen Dank! Ich frag einfach mal - hättest du vllt. einen Codeschnipsel o.Ä. da? |
|
|
| |
|
|
|
| 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 potuto 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 il valore von vorgestern wissen möchtest.
Di più 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 potuto.
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
PS: Warum schreibst als Ospite statt angemeldet? ( [...] ) -
so bekommst doch keine Info wenn Dir einer was schreibt. |
|
|
| |
|
|
|
| Ja super - vielen Dank, corre! Ja also wenn's nichts ausmacht, würde ich mich circa eine Version mit XPSE sehr freuen
Und ja, stimmt, eigentlich potuto 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 Ospite anwesend |
|
|
| |
|
|
|
| Wenn irgendwie ein Anmeldeproblem noch bestehen sollte dann kannst Du das z.B. auch hier unter Kontakt einfach schreiben: [...]
Ich glaube es war etwas irritierend das ich vom Registro per Mitgliedsname zu Registro 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. |
|
|
| |
|
|
|
| Schau mal ob Du mit der miclevel.inc klar kommst: [...] |
|
|
| |
|
|
|
Endwhile | So, jetzt als registrierter Nutzer 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. |
|
|
| |
|
|