# SosGetResultAudio
SosGetResultVideo is a specific DataSource to parse Audio data.
The class inherits directly from TimeSeriesDataSource.
There are specific properties for this DataSource.
# Parser
The underlaying stream is binary.
The first 8 bytes is the timestamp in millis.
The next 4 bytes define the sampleRate.
The next 4 bytes define the number of samples.
The next 4 bytes define the data compressed size.
The next bytes are corresponding to an audio frame.
|--- 8 bytes timestamp ---|--- 4 bytes sampleRate ---|--- 4 bytes number of samples ---|--- 4 bytes data compressed size ---|--- AUDIO FRAME ---|
From Server:
[..binary..data..]
After parsing:
{
    timeStamp: 1450559070000,
    data: {
      frameData: [..binary..AUDIO FRAME...],
      sampleRate: 11025,
      nbSamples: 750,
      pktLength: 1024
    } 
}  
# Example
import SosGetResultAudio from "osh-js/core/datasource/SosGetResultAudio";
let audioDataSource = new SosGetResultAudio("alex-audio", {
  protocol: "ws",
  service: "SOS",
  endpointUrl: "sensiasoft.net:8181/sensorhub/sos",
  offeringID: "urn:android:device:dd90fceba7fd5b47-sos",
  observedProperty: "http://sensorml.com/ont/swe/property/AudioFrame",
  startTime: "2021-04-12T10:48:45Z",
  endTime: "2021-04-12T10:49:45Z",
  replaySpeed: 1.0,
  bufferingTime: 1000
});
// Data are received through Broadcast channel in a separate thread.
// When you create a View object, it automatically subscribes to the corresponding datasource channel(s).
// If you don't have view, or don't need, you can directly subscribe to the channel
const audioBroadcastChannel = new BroadcastChannel(DATASOURCE_DATA_TOPIC + audioDataSource.id);
const divElement = document.getElementById('datasource-audio');
audioBroadcastChannel.onmessage = (message) => {
  if(message.data.type === 'data') {
    let dataEvent;
    for(let i=0;i < message.data.values.length;i++) {
      dataEvent =  message.data.values[i];
      dataEvent.data.frameData = message.data.values[i].data.frameData.slice(0,10);
      divElement.value += JSON.stringify( [dataEvent]) + '\n';
    }
  }
}
// start streaming onclick
const runButtonElement = document.getElementById('run-datasource-button');
runButtonElement.onclick = () => audioDataSource.connect();