It is currently Thu Apr 27, 2017 5:36 pm



Welcome
Welcome to rfobasic

You are currently viewing our boards as a guest, which gives you limited access to view most discussions and access our other features. By joining our free community, you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content, and access many other special features. In addition, registered members also see less advertisements. Registration is fast, simple, and absolutely free, so please, join our community today. **You are not required to provide truthful information to any registration questions. Be whomever you wish to be.!


Post new topic Reply to topic  [ 7 posts ] 
Author Message
 Post subject: Audio.level
Unread postPosted: Thu Dec 29, 2016 11:49 am 
Offline

Joined: Mon Apr 06, 2015 11:42 am
Posts: 33
It would be useful to have a command for checking the loudness level through the built in microphone. I have the problem to check the loudness level in my app.


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Mon Jan 02, 2017 2:23 pm 
Offline
User avatar

Joined: Wed Jul 10, 2013 8:11 am
Posts: 299
Wizzball, thank you for the hint!

See:
http://rfobasic.freeforums.org/post34903.html#p34903

Gregor


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Wed Jan 18, 2017 10:06 am 
Offline

Joined: Mon Apr 06, 2015 11:42 am
Posts: 33
Hello Gregor,

Thanks again for your Audio.Peak command. With my pupils and your Basic extension we have wirtten a "noise traffic light" - very quick and dirty bit working. Today we tested it and it workes very good. We connected it to big boxes of the class room and everybody wantes to be more silent hihi

For the laemampel.bas a small mp3 file (siren.mp3) is needed and the OlibasicIX.apk from Gregor

! Programm funktioniert nur mit neuer Basic Testversion OliBasicIX.apk
! wegen Peak Funktion für Umgebungslautstärke

di_height=1024 % die geräteunabhängige Größe (alt: 850x660)
di_width=768 % Chinafone: 855x480, Nexus 7(2012): 1280x800, Trekstor Xiron: 1280x800, Medion S7852 1024x768
GR.OPEN 255,0,0,0,0 % Grafikbildschirm öffnen, 2.-4.=Hintergrundfarbe, 5.=Statusbar anzeigen
GR.ORIENTATION 1 % Portait Modus
PAUSE 800
GR.SCREEN width, height % tatsächliche Bildschirmgröße
print "width: ",width," height: ", height
IF di_width > di_height & width < height
SWAP di_height, di_width
ENDIF
IF di_width < di_height & width > height
SWAP di_height, di_width
ENDIF
scW=width/di_width % Skalierung berechnen (medion Skalierung 1)
scH=height/di_height % (medion Skalierung 0.953)
GR.SCALE scW, scH % Skalierung setzen
WAKELOCK 2 % Bildschirm bleibt immer an

AUDIO.LOAD Sirene, "Sirene1.mp3"

DEBUG.ON % Einstellungen für die Messung der Lautstärke
filename$ = "NewSound.m4a"
so = 1 %Source 0 Default; 1* Mic; 5 CAMCORDER; 6 VOICE_RECOGNITION; (7 VOICE_COMMUNICATION API level 11)
oF = 2 %OutputFormat 1* THREE_GPP(.g3p); 2 MPEG_4 (.mp4, .m4a)
eC = 3 %Encoder 1* AMR_NB; (2 AMR_WB; 3 AAC API level 10); (4 HE_AAC; 5 AAC_ELD API level 16)
sR = 48000 %(SamplingRate in samples per second API level 8) 44100*
eBR = 80000 %(EncodingBitRate in bits per second API level 8) 96000*
aC = 2 %(AudioChannels 1 or 2* API level 8) For one channel you get a mono output in a stereo file!
mFS = 280000 %MaxFileSize in bytes, but the real size is more less! -1*
! If the max. file size is reached, the recording stopps sooner or later!
lat = 50 %(Latitude -90 to 90 degree API level 14)
lon = 150 %(Longitude -180 to 180 degree API level 14)

leise=6000 %
mittel=20000 %

! Hier wird die AMPEL gezeichnet

GR.COLOR 255,255,0,0,1 % rot: 255,0,0 gelb: 255,255,0 grün: 0,255,0
GR.CIRCLE ro,384,212,128 % dunkel: 50,0,0 50, 50, 0 0, 50,0,
GR.PAINT.GET hellrot

GR.TEXT.DRAW level, 100, 750, "" % Zeichnet einen "Leertext" für die spätere Laustärke vol

GR.COLOR 255,255,255,0,1
GR.CIRCLE ge,384,512,128
GR.PAINT.GET hellgelb

GR.COLOR 255,0,255,0,1
GR.CIRCLE gr, 384,812,128
GR.PAINT.GET hellgruen

GR.COLOR 255,50,0,0,1 % rot: 255,0,0 gelb: 255,255,0 grün: 0,255,0
GR.CIRCLE ro,384,212,128 % dunkel: 50,0,0 50, 50, 0 0, 50,0,
GR.PAINT.GET dunkelrot

GR.COLOR 255,50,50,0,1
GR.CIRCLE ge,384,512,128
GR.PAINT.GET dunkelgelb

GR.COLOR 255,0,50,0,1
GR.CIRCLE gr, 384,812,128
GR.PAINT.GET dunkelgruen

GR.RENDER
DO %
AUDIO.RECORD.START filename$,so,oF,eC,sR,eBR,aC,mFS,lat,lon
FOR i=0 to 10 %
GOSUB Lautstaerke %
IF vol<leise %
Ampel=3 %
IF Merkeampel<>3 %
GOSUB Ampelzeichnen %
Merkeampel=3 %
ENDIF %
ELSEIF vol<mittel %
Ampel=2 %
IF Merkeampel<>2
GOSUB Ampelzeichnen %
Merkeampel=2 %
ENDIF
ELSEIF vol>mittel %
Ampel=1
IF Merkeampel<>1
GOSUB Ampelzeichnen %
Merkeampel=1 %
ENDIF
ENDIF
PAUSE 200 %
NEXT i %
AUDIO.RECORD.STOP %
UNTIL 0 %

Lautstaerke: % Hier wird die Lautstärke gemessen
AUDIO.RECORD.PEAK Pegel %
IF Pegel>0 %
vol=Pegel %
ENDIF %
GR.MODIFY level, "text", "Lautstärke: "+ STR$(vol) %
IF Warnzeit>0 & CLOCK()/1000 > Warnzeit %
Warnzeit=0 %
ENDIF %
GR.RENDER %
RETURN

Ampelzeichnen:
IF Ampel=0 % Alle Ampeln grau
GR.MODIFY ro, "paint", dunkelrot
GR.MODIFY ge, "paint", dunkelgelb
GR.MODIFY gr, "paint", dunkelgruen
ELSEIF Ampel=1 % Ampel rot
GR.MODIFY ro, "paint", hellrot
GR.MODIFY ge, "paint", dunkelgelb
GR.MODIFY gr, "paint", dunkelgruen
IF Warnzeit=0
AUDIO.STOP %
AUDIO.PLAY Sirene %
Warnzeit=CLOCK()/1000+2 % aktuelle Zeit + 2 Sekunden keine Sirene mehr
ENDIF
ELSEIF Ampel=2 % Ampel gelb
GR.MODIFY ro, "paint", dunkelrot
GR.MODIFY ge, "paint", hellgelb
GR.MODIFY gr, "paint", dunkelgruen
ELSEIF Ampel=3 % Ampel grün
GR.MODIFY ro, "paint", dunkelrot
GR.MODIFY ge, "paint", dunkelgelb
GR.MODIFY gr, "paint", hellgruen
ENDIF
GR.RENDER
RETURN


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Tue Jan 24, 2017 1:19 pm 
Offline
User avatar

Joined: Wed Jul 10, 2013 8:11 am
Posts: 299
A Great Hallo to the pupils from Wizzbal,

Ein großes Hallo an die Schüler von Wizzbal,

Erst Mal herzlichen Dank für Euer passendes Beispiel. Top!

Nun hätte ich doch noch ein paar Fragen.
Ich habe gesehen, Ihr verwendet Variable mit den Namen vol(volume), Lautstärke und Pegel.
Ich habe an alten Mischpulten, Cassetten-Decks und Tonbandmaschinen Anzeigen mit der Beschriftung dB gesehen.

Audio. level PEAK gibt aber nur die Werte aus, wie sie vom Mikrofon-Chip kommen.
Sollte man die Werte in dB umrechnen?
Ist die Formel, die im Manual steht dafür geeignet?
Könnte man dafür auch eine Funktion verwenden?
Ermittelt Ihr bei anderen Geräten die gleichen Werte?
Wenn nicht, kann man das abgleichen?
Ich habe da mal was vom Rosa Rauschen gehört.
0dB + 0dB = 3dB, ist doch Quatsch! Man hat mir aber noch und heilig versichert, dass das stimmt. Warum?
Wenn ich über einen Lautsprecher ein Rauschen ausgebe und ein Gerät in einem Abstand von genau einem Meter davor platziere, was für einen Anfangswert messen wir da?
Verschiebt man das Gerät um genau einen Meter weiter nach hinten, was für einen Mittelwert wird nun gemessen?
Jetzt sind wir ganz verwegen und verschieben es noch mal um genau zwei weitere Meter nach hinten, welcher End-Messwert wird nun ermittelt?
Nach der Theorie sollte er dann wo liegen?
Ist es egal, ob ich das Gerät auf dem Tisch oder mit dem Tisch versetze?
Ich habe auch schon Angaben wie 89dB(A) gesehen. Könnt Ihr uns mit dem (A) weiterhelfen?

Nun noch eine Bitte - könnt Ihr uns noch beschreiben, wie Ihr die Lärmampel befestigt habt?
An der Tafel? (Fotos?, Video?)
Wer seid Ihr?
Was gefällt Euch an BASIC! oder was nicht?
Leider habt Ihr uns Eure Sirenen-Datei vorenthalten. Ist da noch was zu machen?

Gibt es eine Belohnung? NEE :geek:, nur Arbeit :mrgreen:
Ich hätte da noch zwei Vorschläge, wie man mit Smartphones die Geschwindigkeit bzw. Fahrtrichtung messen kann.

Wenn Ihr Fragen habt, stellt sie gerne auch in Deutsch.

Happy coding!
Gregor


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Wed Feb 01, 2017 2:38 am 
Offline

Joined: Mon Apr 06, 2015 11:42 am
Posts: 33
Hallo Gregor,
danke für deinen begeisterten Post. Die Lärmampel ist ein sehr schneller erster Versuch. Ich bin absolut kein Experte in Sachen Lautstärke, db usw. Wir sind dabei die Grenzwerte auszuprobieren. Eine Eichung wäre aber auch möglich, z.B. mit einem dB Messgerät oder einer anderen App dafür.
Es wären noch viele Erweiterungen denkbar, wie eine Erfolgsmelodie bei 10 min leisem Unterricht o.ä. Die Sirenendatei ist aus dem Internet. Wir haben verschiedene mp3s getestet, je unangenehmer der Ton, desto besser. Die Ampel müsste noch ein schönes Gehäuse bekommen, bisher hat sie noch keines und natürlich besser befestigt werden. Es müssten auch Buttons her, um die Empfindlichkeit zu verändern usw.

Das Basic gefällt mir sehr gut, wobei mir die Objektorientierung wie bei Pascal fehlt (lokale Vaiablen in Procedures usw.) Dass alle Variablen global sind, ist eine große Fehlerquelle bei größeren Projekten. Wir sind eine AG Gruppe aus einer Gemeinschaftsschule in Kirkel Limbach (Saarland).

Deine Ideen für Geschwindigkeitsmessung / Fahrtrichtung würde mich sehr interessieren.

Grüße
Alexander


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Wed Feb 01, 2017 1:49 pm 
Offline
User avatar

Joined: Wed Jul 10, 2013 8:11 am
Posts: 299
Hallo Alexander,

vielen Dank für die Rückmeldung.
wizzball wrote:
Das Basic gefällt mir sehr gut, wobei mir die Objektorientierung wie bei Pascal fehlt (lokale Vaiablen in Procedures usw.) Dass alle Variablen global sind, ist eine große Fehlerquelle bei größeren Projekten.

Hmm, ich denke, da liegt ein Missverständnis vor.
Denn es gibt in BASIC! im Prinzip keine globalen Variablen.
Werden allgemein globale Werte gewünscht, gibt es da nur eine Hintertür, in dem man die einzigen globalen Variablen die Bundles, Stacks oder Lists verwendet. Deren Pointer(Zeiger) können auch an Funktionen übergeben und von diesen abgeholt werden. Werden die Pointer an eine numerische Variable übergeben, ist diese ebenfalls lokal. So ist eine saubere Trennung möglich.
Die Variablen in einer Funktion sind lokal. Bei der Übergabe von Variablen FN.DEF Test(f$, g$, v) bleiben aber gewisse Abhängigkeiten bestehen. Das ist im Manual aber auch beschrieben.
Es gibt auch noch eine älteres Manual in deutscher Sprache. Ich meine, dies ist dort ebenfalls beschrieben. Diese Abhängigkeiten (Referenzen) sind aber auch in anderen BASIC-Dialekten vorhanden.
Dass BASIC! im Allgemeinen nicht objektorientiert ist liegt an der Entstehungsgeschichte und dem gewählten Prinzip der Befehlsauswertung.
Man kann mit BASIC! sauber programmieren, aber auch der Urzeit-Spagetti-Hack ist möglich.

Quote:
Deine Ideen für Geschwindigkeitsmessung / Fahrtrichtung würde mich sehr interessieren.


Geschwindigkeitsmessung
1.
Nehmt einen Holzstab 20x10 mm.
Umwickelt Ihn mit Alu-Folie.
Alle 30 mm umwickelt Ihr ihn mit einem ca. 10 mm breiten dunklen Isolierband.
Über die Sensoren Kommandos kann man den Proximity-Sensor auslesen.
Dieser Sensor befindet sich in der Regel direkt neben dem Lautsprecher (Hör-Muschel) --
eine Art Reflex-Lichtschranke.
Streicht man mit dem vorbereitetem Stab nun im geringen Abstand entlang des Sensors,
erhält man deutlich unterschiedliche Signale.
vDelta = s / tDelta

2.
Taster eines billigen USB-Game-Pad mit angelöteten externen Tastern(Lichtschranken) verbinden.
Über neu ONKEYDOWN und INKEY mKey$, mKeyevent$ den jeweiligen Status abfragen.
Im mKeyevent$-String steht sogar eine Zahl die den Zeitpunkt angibt.
Zieht man Zeitpunkt 1 von Zeitpunkt 2 ab erhält man die Zeitdifferenz.
Und wieder ist vDelta = s / tDelta
Funktioniert aber nur auf Geräten mit OTG-Fähigkeit.

Fahrtrichtung
Wie man den Peak-Level misst weiß man nun.
Man kann auch den Doppler-Effekt für die Fahrtrichtungsbestimmung nutzen.

https://de.wikipedia.org/wiki/Doppler-Effekt
http://www.leifiphysik.de/akustik/akustische-wellen/doppler-effekt

Das Smartphone gibt mit Soundpool einen Sound mit einer bestimmten Frequenz aus.
Google search: soundpool site:rfobasic.freeforums.org
Das Smartphone mit einem Getto-Blaster koppeln und vorne aufs Fahrrad.
Bei der Audio-Aufnahme kann man den Frequenzbereich einstellen.
Wie genau das ist, weiß ich allerdings nicht. Versuch macht schlau :lol:

Bsp.:
1000Hz stehend
1030Hz entgegenkommend
Frequenzbereich bei 1010Hz abschneiden.
Wenn der Fahrer entsprechend schnell entgegen kommt, sollte der PEAK deutlich abfallen.

Nun gut, es ist halte ein interdisziplinäre Aufgabe für Werkunterricht, Physik, Mathe, Sport, Englisch, Deutsch und Informatik. Aber das ist auch der aktuelle Trend in der aktuellen Studentenausbilung.

Gruß
Gregor


Report this post
Top
 Profile  
 
 Post subject: Re: Audio.level
Unread postPosted: Tue Feb 14, 2017 2:22 pm 
Offline

Joined: Mon Apr 06, 2015 11:42 am
Posts: 33
Hallo Gregor,
das sind tolle Ideen. Da werde ich, wenn ich Zeit habe, etwas ausprobieren.


Gesendet von meinem SM-G935F mit Tapatalk


Report this post
Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 7 posts ] 


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
suspicion-preferred