Git Product home page Git Product logo

universite-gustave-eiffel / noisecapture Goto Github PK

View Code? Open in Web Editor NEW
91.0 29.0 45.0 78.73 MB

Android App dedicated to the measurement of environmental noise.

Home Page: http://noise-planet.org/fr/noisecapture.html

License: GNU General Public License v3.0

Java 65.00% HTML 10.49% CSS 2.99% Groovy 17.26% Python 0.54% Scheme 1.79% JavaScript 1.86% MATLAB 0.07%
measurements noise-maps collaborative-science android

noisecapture's Introduction

About NoiseCapture App

Build Status

NoiseCapture App is Android App dedicated to the measurement of environmental noise.

Description

NoiseCapture App is an Android App project for measuring environmental noise using a smartphone. The goal is to produce relevant noise indicators from audio measurements, including a geospatial representation. Measurements can be shared with the community in order to produce participatory noise maps. NoiseCapture App is a component of a global infrastructure, i.e. a Spatial Data Infrastructure (SDI), called the OnoMap SDI, that allows to process and represent the geospatial information, like noise maps.

  • A full description of the whole OnoMap SDI, including the NoiseCapture App, is given in the wiki pages.
  • An user guide, for the use of the NoiseCapture App, is proposed within the NoiseCapture App (see the 'Help' page in the menu of NoiseCapture App).

Features

NoiseCapture App features are divided into 3 parts:

  • Measurement - Once the sound level calibration is done, the user start the measurement in order to record each second the LAeq, an average sound energy over a period of 1s. The spectrum repartition of the sound are analysed and stored using the Fourrier transform. The device location are recorded while measuring the sound level. The user has the hability to provide his own feedback about the feeling of the noise environment.

  • Extented report - Advanced statistics are computed locally on the phone and shown to the user. For each user's measurement the locations of the noise levels are displayed in a map.

  • Share results with the community - Anonymous results are transfered to Virtual Hubs (web server) and post-processed in order to build a noise map that merge all community results. Participative noise maps can be displayed within the NoiseCapture App, or online at https://onomap.noise-planet.org/.

Developments

NoiseCapture App is a collaboration between the Environmental Acoustic Research unit (Ifsttar) and the Lab-STICC CNRS. If you need more information about the project developped by the Environmental Acoustic Research unit and the Lab-STICC, on this topic, go to http://www.noise-planet.org.

Download

Get it on F-Droid Get it on Google Play

Funding

This application was developed under the initial funding the European project ENERGIC-OD, with the help of the GEOPAL program.

License

NoiseCapture App is released under the GENERAL PUBLIC LICENSE Version 3. Please refer to GPLv3 for more details.

Follow us

Follow the developement of NoiseCapture App (and more...) on Twitter at @Noise_Planet Twitter URL

noisecapture's People

Contributors

ebocher avatar eiei114 avatar gpetit avatar gwguillaume avatar lorebiga avatar nicolas-f avatar picaut avatar poussinou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

noisecapture's Issues

Start page layout

Some changes on start page. Try to fit on all android phones screen.
Move version in screen bottom.

start

User input after the end of measurements

Give the user the ability to add the following information to each measurement:

  • Description (not uploaded)
  • Predefined tags (uploaded)
  • Photo (not uploaded)
  • Pleasantness slide (Unpleasant->Pleasant) (uploaded)

Not uploaded information stay in local database.

Compare leq 1s and 125ms

There is some differences between 1s (recomposed from 1/3 octave) and 125 ms (leq from signal)

No measurement after stopping recording

When stopping a recording with the red square button, one can not realize a new recording when pressing the record button. We have to select "Measurement" in the Menu to proceed to a new recording

Ignore last 5 seconds button

Do we implement the following feature (Pierre suggestion)?

While measuring if somebody is disturbed by an event, give him the ability to pause the capture then on resume delete the last 5 records (5 seconds).

Gps only option

Add an option to ignore Network location provider and use GPS coordinates only. useful when measuring only in open outdoor.

Frequency band display

On the display of the histogram (frequency bands), both during Measurement and Results, one should add a visible x-tick (on the x-axis) that correspond to the frequency label.

Processing of wps upload task

Onomap service on receiving android Rest call save the POST data into as zip file.

This zip is stored in "processing" folder. A new thread is triggered in order to check and parse the content of the zip file.

The processing WPS fetch zip files stored in "processing" folder and check if the zip content correspond to expected files name.

The property file and geojson are parsed then used to feed the PostGIS database.

Once done, the zip file is moved to an archive folder.

Calibration activity

Implement the calibration activity

Method A:

  • User click on start calibration button
  • A visual timer count down from X seconds to 0 seconds
  • Measurement of Leq starts
  • A visual timer count down from X seconds to 0 seconds
  • User set the expected (externally measured) value using a SeekBar from 72 dB to 102 dB.
  • Android store the gain factor to apply

User is forced to choose theses values as Android device may not able to measure linearly outside -18 dB to +12 dB relative to 90 dB.
PCM amplitude levels SHOULD linearly track input SPL changes over at least a 30 dB range from -18 dB to +12 dB re 90 dB SPL at the microphone.

Calibration used level

Currently calibration value used is the mean leq.

Is it preferable to use Leq50 or Leq90 ?

Help page

Create help page:

  • Describe NoiseCapture goals
  • Warning about the quality of measurement (min max range of microphone, sensibility, saturation)
  • Describe the expected measurement scenario. (Where and how to use NoiseCapture)
  • Describe acoustics indicators

Remove cancel button

Remove cancel button but require the user to validate the storage "Save result ?"

java.lang.IllegalStateException

java.lang.IllegalStateException: no included points
    at com.google.android.gms.common.internal.zzaa.zza(Unknown Source)
    at com.google.android.gms.maps.model.LatLngBounds$Builder.build(Unknown Source)
    at org.noise_planet.noisecapture.MapActivity.loadWebView(MapActivity.java:125)
    at org.noise_planet.noisecapture.MapActivity$MapDropDownChooseListener.onItemSelected(MapActivity.java:206)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:1165)
    at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:1154)
    at android.widget.AdapterView.access$300(AdapterView.java:59)
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:1121)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7224)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

NoiseCapture crash

The last pre-release (0.1.2) crashes when the user tries to start a measure.
The NoiseCapture app is closed by Android without any message.

Post-Processing of measures

All data stored in database are in the 3857 (Spherical Mercator projection) coordinate system. (measures, buildings etc)

The precision loss are negligible far from poles.
Post-Processing steps:

TODO

java.lang.NullPointerException: Attempt to get length of null array

Reported issue when going to Map Activity without any stored measures

java.lang.RuntimeException: Unable to start activity ComponentInfo{org.noise_planet.noisecapture/org.noise_planet.noisecapture.MapActivity}: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
    at org.noise_planet.noisecapture.MapActivity.onCreate(MapActivity.java:71)
    at android.app.Activity.performCreate(Activity.java:5990)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
    ... 10 more
Caused by: java.lang.NullPointerException: Attempt to get length of null array
    at maps.G.a.a(Unknown Source)
    at maps.V.N.a(Unknown Source)
    at maps.D.e.a(Unknown Source)
    at maps.D.p.a(Unknown Source)
    at maps.ad.ae.a(Unknown Source)
    at maps.ad.t.a(Unknown Source)
    at maps.ad.M.a(Unknown Source)
    at ul.onTransact(:com.google.android.gms.DynamiteModulesB:107)
    at android.os.Binder.transact(Binder.java:380)
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$zza$zza.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment$zza.onCreateView(Unknown Source)
    at com.google.android.gms.dynamic.zza$4.zzb(Unknown Source)
    at com.google.android.gms.dynamic.zza.zza(Unknown Source)
    at com.google.android.gms.dynamic.zza.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1332)
    at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2288)
    at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
    at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
    at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31)
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:80)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
    ... 21 more

About page

  • Short NoiseCapture description, link to github
  • Financial support
  • Contributors institutes
  • License
  • Third party libraries license

Calibration on octave

Reduce frequencies of calibration to global, 125, 200, 315, 500, 800, 1.25k, 2k, 3.15k, 5k, 8k, 12.5k

Measurement Pre-Capture step

When the user first tap on measure button.

Show measured values but do not store measurements. Record values only on the second tap on measure button.

Visual hint, show text "Press record button to start recording"

Reactive the "stop" button some seconds after the recording.

Result page show kHz

Show in result page the same labels for frequency bands in frequency histogram.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.