C++ Sample

Two samples are provided in C++ version of Cochl.Sense SDK: sense-file and sense-stream.

sense-flie makes prediction out of the input file, and sense-stream makes prediction out of the input stream such as a microphone.

This guide walks through how to run the samples.

1. Check Requirements


Follow Getting started and set up environments.

2. Prepare Sample


Prepare sample

$ git clone https://github.com/cochlearai/sense-sdk-cpp-tutorials.git

Unzip SDK

$ unzip path/to/sdk/sense-sdk-1.0-cpp.zip -d path/to/sample/sense-sdk-cpp-tutorials/

The prepared sample directory

└── sense-sdk-cpp-tutorials
    ├── audio_files          # sample audio files
    ├── examples
    |   ├── AudioFile.h
    |   ├── sense-file.cc    # example for file input
    │   └── sense-stream.cc  # example for stream input
    └── sense                # SDK
        ├── include
        └── lib

3. Set Up Parameters


Set up parameters with values of your choice before you build and run the C++ sample.

It can be set in the SDK file sense/include/sense.hpp. Check possible options and set your parameters.


For example, change the value of service to Service::Home_Context if you want to detect baby crying or dog barking.

Parameters

// sense.hpp

...
struct Parameters {
  AudioFormat audio_format = AudioFormat::AF_FLOAT32;
  ModelDelegate model_delegate = ModelDelegate::Default;
  Service service = Service::Emergency;
  int num_threads = 0;

...

Possible Service options

// sense.hpp
enum Service {
  Emergency = 0,
  Human_Interaction = 1,
  Human_Status = 2,
  Home_Context = 3
};

Possible AudioFormat options

// sense.hpp
enum AudioFormat {
  AF_UINT8,
  AF_INT8,
  AF_INT16,
  AF_INT24,
  AF_INT32,
  AF_DOUBLE,
  AF_FLOAT32,
  AF_UNKNOWN
};

4. Build


Set your Project Key into the sample code.

// examples/sense-file.cc

...
if (sense::Init("YOUR_PROJECT_KEY_HERE", sense_params) < 0) {
  return -1;
}
...

Then it’s ready to build sense-file.

$ g++ -fopenmp examples/sense-file.cc -I./sense/include/ -lsense-core -L./sense/lib -o sense-file -lm -std=c++11 -ldl -lstdc++ -Wl,-rpath -Wl,./sense/lib

Set your Project Key into the sample code.

// examples/sense-stream.cc

...
if (sense::Init("YOUR_PROJECT_KEY_HERE", sense_params) < 0) {
  return -1;
}
...

Then it’s ready to build sense-stream.

$ g++ -fopenmp examples/sense-stream.cc -I./sense/include/ -lsense-core -L./sense/lib -o sense-stream -lm -std=c++11 -ldl -lstdc++ -lpulse -lpulse-simple -Wl,-rpath -Wl,./sense/lib

5. Run


$ LD_LIBRARY_PATH=. ./sense-file <PATH_TO_AUDIO_FILE>

Sample audio files in the SDK directory can be used as well.

$ LD_LIBRARY_PATH=. ./sense-file audio_files/babycry.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/carhorn.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/cough.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/dogbark.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/glassbreak.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/siren.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/snoring.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/toilet_flush.wav
$ LD_LIBRARY_PATH=. ./sense-file audio_files/whistle.wav

Make sure the input device is properly connected before you run sense-stream

$ LD_LIBRARY_PATH=. ./sense-stream

(Note) sense-stream troubleshooting


Try the steps below when you have a trouble running sense-stream

(1) Check connection

  • Check if the input device is connected

(2) Check power

  • The board may lack of power when an external device is connected
  • Check if the board gets stable and enough power

(3) Check pulseaudio

# start pulseaudio
$ pulseaudio -D

# check your device index from the pulseaudio command result
$ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'

# set default source with the index above
$ pacmd set-default-source <DEVICE_INDEX>