JAVA i mobiltelefon

Planering och tankar kring eventuella framtida projekt.
erpesjo
Inlägg: 4
Blev medlem: 24 juni 2007, 10:23:00
Ort: Eksjo

JAVA i mobiltelefon

Inlägg av erpesjo »

Hej!
Jag försöker bygga/programmera en enkel ljudmätare i JAVA så den skall fungera i de flesta mobiltelefoner på marknaden.
Tanken är att mobilens mikrofon skall registrera ljudet och tända upp tex små fyrkanter ju högre ljud man har.
tex 10 db tänder en fyrkant, 20 db tänder nästa osv...
Tanken är att använda detta som en enkel decibelmätare vid konserter m.m. som jag jobbar med.
Finns det någon som vet hur man skall/kan göra?

Jag specificerar mig lite.
Jag vill programmera ett JAVA-app som fungerar i tele för att mäta db på ett enkelt sätt. Nogrannheten är inte så viktig för telefonens JAVA-apps nogrannhet kommer stämmas av med en riktig och nogrann mätare innan användning.
Jag har inte hittat något på nätet eller i litteraturen om hur man använder telefonens inbyggda microfon i JAVA program för denna typ av ändamål.
Senast redigerad av erpesjo 24 juni 2007, 11:46:52, redigerad totalt 2 gånger.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

"hur man ska/kan göra"?
Din fråga innefattar ju _väldigt_ många frågor, så du får nog precisera frågan lite. Är det att skriva en JAVA-app som är problemet eller är det att komma på själva algoritmen för ljudtrycksmätningen?!
Ett av de större problemen du kommer att få är att olika mobiltelefoner har olika mikrofoner, mickförstärkare och AD-omvandlaren.
Ditt mätvärde kommer alltså bero helt på vilken telefon du använder. För att kunna beräkna dB måste du veta mikrofonens känslighet, mickförstärkarens gain samt lite detaljer kring AD-omvandlaren för varje enskild telefonmodell.
xxargs
Inlägg: 10189
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Inlägg av xxargs »

dB är iofs ett relativt värde - den beskriver bara en 10-logaritmiserad kvot mot något.

Första steget är att övh. komma åt AD-omvandlarvärdena och veta om de är linjära eller A eller u-Law komprimerade - då de sistnämda måste avkomprimeras innan beräkningarna. - fins det någon analog ljudkompressor/adaptiv dämpare före A/D-omvandlaren och inte kommer åt dess värden så kan du inte göra en rättvisande dB-mätare hur mycket program du än skriver...

I brist på referenser så kan man göra som i audio-världen säga att full utstyrning (dvs. +/- 32767 på en 16 bits AD-omvandlare) motsvarar 0 dB och svagare nivåer blir minusvärden - dvs -96 dB som lägst - skriker man och det klipper så visar det 0 dB....

Börja att få ovanstående att fungera först innan du jagar 'riktiga' dB - den dan du kan jämföra uppgivna dB-värden i telefonen med en riktig ljud-dB mätare, så kan du lätt införa en offset på telefonens angivna dB-värden så att det visar samma sak som ljud dB-mätaren - den här offsetkonstanten kommer att vara olika för olika telefoner. räkna också med att AD-omvandlarna har en switchcap-filter på ingången och mäter bara inom området 300-3400 Hz med mycket branta skärningar (dämpning) av frekvenserna över och under dessa frekvenser mao. kan du inte se hur mycket bastryck det är framför bashornen på en konsert...

Obs - mät på bara 1000 Hz vid kalibrering - att införa A,B,eller C-vikt på kurvan (för att simulera örats lägre känslighet på låga och höga frekvenser) som många ljud-dB mätare har, kan du inte göra i telefonen då det kräver mycket DSP-resurser i realtid på inkommande ljud och görs knappast i java.

Sådan filtrering gör analogt med bara några kondingar, induktanser och motstånd (på liknande sätt som RIAA-filter i en förstärkare för signal från en skivspelare) i en ljud-dB mätare men är ett helsike att simulera samma sak med programmvara och ha DSP-resurser typ i en telefon...

---

Eftersom det är spänning som AD-omvandlarna mäter i så är omvandlingsormeln på toppvärden (absolutvärde) av inkommande samplen
enligt

dB = 20 * log10(abs(inkommande AD-värden)/32767)

om AD-omvandlaren är 16 bit med området +/-32767 som max.

därefter kan du addera eller subrahera dB-värde med en offset så att det stämmer mer en riktig ljud-dB mätare vid 1000 Hz testtoner.
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

erpesjo:
"Jag har inte hittat något på nätet eller i litteraturen om hur man använder telefonens inbyggda microfon i JAVA program för denna typ av ändamål."

Söker man på google så finns massor med sidor om Java och ADConverter när det gäller datorer. En idé kanske vore att få det att fungera i datorn först, så att du får grepp om hur koden ska se ut och därefter modifiera så koden passar mobilen.
Användarvisningsbild
RD
Inlägg: 110
Blev medlem: 3 mars 2005, 16:39:39
Ort: Knivsta
Kontakt:

Inlägg av RD »

Eller så köper du en Nokia 5140i så är det klart.
Den har nämligen den funktionen inbyggd.
Fast det är ju inte lika skoj som att göra själv iofs
erpesjo
Inlägg: 4
Blev medlem: 24 juni 2007, 10:23:00
Ort: Eksjo

Inlägg av erpesjo »

JimmyAndersson skrev:erpesjo:
"Jag har inte hittat något på nätet eller i litteraturen om hur man använder telefonens inbyggda microfon i JAVA program för denna typ av ändamål."

Söker man på google så finns massor med sidor om Java och ADConverter när det gäller datorer. En idé kanske vore att få det att fungera i datorn först, så att du får grepp om hur koden ska se ut och därefter modifiera så koden passar mobilen.
Hej!
Tack för ditt inlägg.. jag har redan en fungerande version i datorn.
Men den är skriven i en programkod som inte fungerar i tele... och jag vill slippa släpa med mig den bärbara datorn.. då kan jag lika gärna släpa med mig den bärbara dB mätaren.... ville ha det enkelt med allt i mobben..
Nogrannheten är ju inte så viktig.. det handlar mest om att se att man inte ligger över vissa tillåtna värden i stort... jag vet att nogrannheten inte kommer vara så bra med mobilen, men man kan jämföra med den riktiga dB mätaren och se var gränserna går.
Hälsningar
Fredrik
erpesjo
Inlägg: 4
Blev medlem: 24 juni 2007, 10:23:00
Ort: Eksjo

Inlägg av erpesjo »

xxargs skrev:dB är iofs ett relativt värde - den beskriver bara en 10-logaritmiserad kvot mot något.

Första steget är att övh. komma åt AD-omvandlarvärdena och veta om de är linjära eller A eller u-Law komprimerade - då de sistnämda måste avkomprimeras innan beräkningarna. - fins det någon analog ljudkompressor/adaptiv dämpare före A/D-omvandlaren och inte kommer åt dess värden så kan du inte göra en rättvisande dB-mätare hur mycket program du än skriver...

I brist på referenser så kan man göra som i audio-världen säga att full utstyrning (dvs. +/- 32767 på en 16 bits AD-omvandlare) motsvarar 0 dB och svagare nivåer blir minusvärden - dvs -96 dB som lägst - skriker man och det klipper så visar det 0 dB....


Börja att få ovanstående att fungera först innan du jagar 'riktiga' dB - den dan du kan jämföra uppgivna dB-värden i telefonen med en riktig ljud-dB mätare, så kan du lätt införa en offset på telefonens angivna dB-värden så att det visar samma sak som ljud dB-mätaren - den här offsetkonstanten kommer att vara olika för olika telefoner. räkna också med att AD-omvandlarna har en switchcap-filter på ingången och mäter bara inom området 300-3400 Hz med mycket branta skärningar (dämpning) av frekvenserna över och under dessa frekvenser mao. kan du inte se hur mycket bastryck det är framför bashornen på en konsert...

Obs - mät på bara 1000 Hz vid kalibrering - att införa A,B,eller C-vikt på kurvan (för att simulera örats lägre känslighet på låga och höga frekvenser) som många ljud-dB mätare har, kan du inte göra i telefonen då det kräver mycket DSP-resurser i realtid på inkommande ljud och görs knappast i java.

Sådan filtrering gör analogt med bara några kondingar, induktanser och motstånd (på liknande sätt som RIAA-filter i en förstärkare för signal från en skivspelare) i en ljud-dB mätare men är ett helsike att simulera samma sak med programmvara och ha DSP-resurser typ i en telefon...

---

Eftersom det är spänning som AD-omvandlarna mäter i så är omvandlingsormeln på toppvärden (absolutvärde) av inkommande samplen
enligt

dB = 20 * log10(abs(inkommande AD-värden)/32767)

om AD-omvandlaren är 16 bit med området +/-32767 som max.

därefter kan du addera eller subrahera dB-värde med en offset så att det stämmer mer en riktig ljud-dB mätare vid 1000 Hz testtoner.
Hej och ett stort tack för dina imponerande kunskaper i ämnet.
Jag har som du ser i ett annat inlägg redan en fungerande version till min bärbara PC. Men jag ville testa om det går att få ned den i mobilen för enkelhetens skull. Nogrannheten är absolut inte så viktig, det handlar mest om att se att man inte överskrider vissa värden som man har testat av paralellt med den riktiga dB mätaren.
Men jag hittar inte någonstans hur man kan få tillträde till mikrofonen i JAVA och därigenom visa upp någon form av feedback på skärmen av uppmätta värden.
Hälsningar
Fredrik
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

"det handlar mest om att se att man inte ligger över vissa tillåtna värden i stort..."

När man spelar på gränsen till de tillåtna värdena så har den stackars mobil-mikrofonen (med tillhörande elektonik) redan fått nog för länge sedan, så det blir nog dessvärre inte helt lätt.

Men det går att bygga en liten dB-mätare med kretsen LM3916. Med ett mikrofonelement som klarar ljudtrycket och en liten förstärkarkrets så blir det lättare och går fortare än att hitta rätt Java-dokumentation för mobilen. Storleken på det hela behöver inte bli större än en halv mobiltelefon.
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

JimmyAndersson: han vill ha en dB mätare på mobilen, då hjälper inte LM3916.

erpesjo: Olika tillverkare har olika SDK för sina mobiler, här har du några:
Sony-Ericsson
Nokia
Motorola
Söker du på "+JAVA +[tillverkare] +SDK" så får du upp fler...

Dom flesta tillverkare har forum (eller motsvarande) där du kan fråga om sånt här.

Lycka till!
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

"han vill ha en dB mätare på mobilen, då hjälper inte LM3916."

Jag vet. :) Men han vill kunna se så att han inte ligger över tillåtna värden. Vid dessa nivåer blir de flesta mobilmikrofoner kraftigt "mättade" eftersom de är avsedda att hållas en bit ifrån munnen. Alltså skulle han behöva dämpa ljudet som når mikrofonen och då blir hela avläsningen fel.

Det var någon som lade upp ett ljudklipp här, inspelat med en mobil på ett disco. Leta upp den tråden så kommer du höra hur det blir om man försöker använda en mobiltelefon med "standardmick" till detta. De mobiler med dB-mätare har med stor sannorlikhet en annan typ av mikrofon.

Jag vill inte förstöra idén med att fixa en egen dB-mätare i mobilen, jag skulle själv gärna vilja ha en sådan. Men då jag inte är helt grön vad gäller mikrofoner så ser jag begränsningar med detta projekt. Tyvärr.

Med kretsen jag föreslog så skulle man däremot kunna bygga en *bra* dB-mätare på några timmar.
Användarvisningsbild
Meduza
EF Sponsor
Inlägg: 10718
Blev medlem: 30 april 2005, 22:48:05
Ort: Ekerö, Stockholm
Kontakt:

Inlägg av Meduza »

När jag håller på med sådant här så brukar jag ha med min kompakta dB-mätare, en sådan här:
http://www.pacer-ind.com/Product-Detail ... ?ItemID=36

kompaktare än dom flesta stora bulkiga dB-mätare, ungefär lika bred och tjock som en nokia 3310, men ett par cm längre...

En mätare i den storleken är inget större problem att ha med sig i bälteshölster om man nu jobbar med konserter som du gör?

Det borde finnas någon modernare motsvarighet som inte är från 1980 och kanske ännu kompaktare?
xxargs
Inlägg: 10189
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Inlägg av xxargs »

JimmyAndersson skrev:"han vill ha en dB mätare på mobilen, då hjälper inte LM3916."

Jag vet. :) Men han vill kunna se så att han inte ligger över tillåtna värden. Vid dessa nivåer blir de flesta mobilmikrofoner kraftigt "mättade" eftersom de är avsedda att hållas en bit ifrån munnen. Alltså skulle han behöva dämpa ljudet som når mikrofonen och då blir hela avläsningen fel.
det är väl för sig inget som hindrar att man sätter en akustisk dämpsats i mikrofon-hålet (dbs en plugg) - men frekvensgången och hur mycket det dämpar efter varje montering är nog ganska oförutsägbart.

det som är mer 'oroande' är nog att man inte mäter dom fekvenser i bas och diskant som ställer till värst bekymmersmässigt avseende buller mot grannskapet och avseende hörselskadefaran.

Dock hade det varit bra om nallen kunde mäta när den inte ringde med full bandbredd (filtren i AD-omvandlaren går nästa alltid att koppla ut - i allafall var det så på dom dackarna som användes i telefonmodem - och där var det 14-bitars omvandlare... ) - med en lämplig application som filtrerar rätt så skulle man kunna göra en reminder/varningsapplication som varnade när
man började nå gränsen för risk för hörselskada.

problemet är väl att API-erna inte tillåter sådana råa dataflöden direkt från AD-omvanldlarna misstänker jag...
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

det går ju att göra ljudapplikationer som kan spela in ljud så på något sätt kan man ju få en ljudström.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

> med en lämplig application som filtrerar rätt så skulle man kunna göra en reminder/varningsapplication som varnade när
man började nå gränsen för risk för hörselskada.

:lol:


Finns ett enkelt sätt att göra det. Gör så att den varnar hela tiden. Gränsen ligger väl ändå typ vid 95dB eller något sånt? Det är ju inte sådär jättehögt. 8) Fast sen kanske man kan använda en lite mer realistisk gräns såklart.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Vad jag har läst så kan gränsen vara nånstans mellan 75 och 85 dB. Det är olika för olika människor.

Jag förstår inte varför man ska spela vid eller över gränsen för skador. Det är ju helt tokigt. För det kan väl inte finnas nån som tycker att det är behagligt?
Skriv svar