Git Product home page Git Product logo

audio-to-tactile's Introduction

Audio-to-Tactile Representation

(This is not an official Google product!)

The motivation of this project is to enable users with hearing loss to "feel" sound and understand speech through vibrotactile interfaces. Our vision is a wearable tactile device that enables users to feel sound in a natural and effective way. The goal is that this representation is intuitive enough to require only minimal training while effective enough to deliver tangible read-world value, especially in understanding speech and complementing lip reading.

Contents

  • Tactile processor: demo of our approach to audio-to-tactile processing, taking input audio from the microphone and producing output on a 10-tactor interface.

  • Phone embedding: low-latency network that maps input audio into a 2D embedding where phones are distinct.

  • Tactophone: training game for the 24-tactor TActile Phonemic Sleeve (TAPS) system described in

Charlotte M. Reed, Hong Z. Tan, Zachary D. Perez, E. Courtenay Wilson, Frederico M. Severgnini, Jaehong Jung, Juan S. Martinez, Yang Jiao, Ali Israr, Frances Lau, Keith Klumb, Robert Turcott, Freddy Abnousi, "A Phonemic-Based Tactile Display for Speech Communication," IEEE Transactions on Haptics, 2018.

  • play buzz: simple diagnostic program that plays a sinusoid to a specified channel.

License

This code uses the Apache License 2.0. See the LICENSE file for details.

Hardware

This software is intended to be used with a tactile sleeve as described in the Reed et al. work linked above.

Tactile sleeve hardware

The sleeve is constructed from cloth and Velcro. The 24 tactors are Tectonic TEAX13C02-8/RH speakers with vinyl bumpers glued to them, and with Velcro on the back so that they can be repositioned on the sleeve. To play tactile signals through the tactors, we used a Motu 24Ao audio interface device. The Motu has DB25 D-Sub connectors that output 8 channels each. We use custom boards to connect to the DB25 D-Sub outputs, amplify them with MAX98306 Stereo Amplifiers, and connect through two ribbon cables to the tactors.

For the Motu's input, we connect by USB to a computer running the Tactophone program.

Building

This project uses the bazel build system. There is also a make makefile, but it does not include all targets. Install bazel, Python3 development files, and libraries:

sudo apt-get install bazel libsdl2-dev portaudio19-dev libncurses-dev libvpx-dev
sudo apt-get install python3-dev python3-pip python3-pandas
pip3 install jax dm-haiku absl-py matplotlib scipy sklearn

In defs.bzl, check that PYTHON_INCLUDE_DIRS points to the correct place for Python headers:

PYTHON_INCLUDE_DIRS = [
    "/usr/include/python3.6m",
    "/usr/include/x86_64-linux-gnu/python3.6m",
]

Basic bazel use

In case you are new to bazel, here is a quick intro. The bazel "getting started" guide might also be useful. As a starting example, open a terminal and set the working directory to the root of this repo, then run this command:

bazel build -c opt tactile:run_tactile_processor

When bazel is done, it should print something like

INFO: Analyzed target //tactile:run_tactile_processor (18 packages loaded, 121 targets configured).
INFO: Found 1 target...
Target //tactile:run_tactile_processor up-to-date:
  bazel-bin/tactile/run_tactile_processor
INFO: Elapsed time: 1.218s, Critical Path: 0.62s
INFO: 24 processes: 24 linux-sandbox.
INFO: Build completed successfully, 28 total actions

This command told bazel to build the target tactile:run_tactile_processor with optimization turned on (-c opt). The built binary is at bazel-bin/tactile/run_tactile_processor. The build configuration of this target is represented in a special "BUILD" file. If you look in tactile/BUILD around line 130, there is a stanza in Python-like syntax defining how to build this binary:

c_binary(
    name = "run_tactile_processor",
    srcs = ["run_tactile_processor.c"],
    deps = [
        ":channel_map",
        ":portaudio_device",
        ":post_processor",
        ":run_tactile_processor_assets",
        ":tactile_processor",
        ":util",
        "//dsp:fast_fun",
        "//dsp:math_constants",
        "//dsp:read_wav_file",
        "//sdl:basic_sdl_app",
        "//sdl:texture_from_rle_data",
        "//sdl:window_icon",
    ],
)

I am not intending at this point to dig into the details of this syntax [and hopefully it is pretty self explanatory]. This is just a quick initial overview of how bazel fits together.

Here are a couple other bazel commands to try:

# Build tactile_worker Python extension library. Checks that Python headers are set up.
bazel build -c opt tactile/python:tactile_worker.so

# Run all the unit tests in the repo. Checks that everything is building and working Ok.
bazel test ...

audio-to-tactile's People

Contributors

getreuer avatar

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.