HARK FORUM › Recording audio stream from ROS – data type error
August 12, 2019 at 4:50 pm #1105
I am new to Hark and I am trying to record the audio captured with a HSR robot’s built-in head microphone. The following are the parameters of the stream generated by the robot:
PARAMETERS * /audio/audio_capture/bitrate: 128 * /audio/audio_capture/channels: 1 * /audio/audio_capture/device: * /audio/audio_capture/format: mp3 * /audio/audio_capture/sample_rate: 16000 * /rosdistro: kinetic * /rosversion: 1.12.14 NODES /audio/ audio_capture (audio_capture/audio_capture)
I am trying to record the streamed audio with the AudioStreamFromRos node (Attached you find a screenshot of my Hark network). However, when I execute the network I get the following error message:
[ERROR] [1565594592.746777286]: Client [/MY_HARK_MASTER_NODE] wants topic /audio/audio to have datatype/md5sum [hark_msgs/HarkWave/24c5654436a3ff03c563377fdbcc56a1], but our version has [audio_common_msgs/AudioData/f43a8e1b362b75baa741461b46adc7e0]. Dropping connection.
How can I configure the node to make the data type compatible?
Attachments:August 13, 2019 at 11:31 am #1107
Can you please attach the actual network file that you used.
EarlAugust 13, 2019 at 9:14 pm #1109
here is the network.August 13, 2019 at 9:24 pm #1110August 16, 2019 at 6:05 pm #1122
You need to use
hark_msgs/HarkWavein your workspace.
In your case,
audio_common_msgs/AudioDataseems to store
uint8array, so you will first need to expand it to raw PCM data.
Second, the data structure of
hark_msgs/HarkWaveis as follows.
user@ubuntu:~$ rosmsg show hark_msgs/HarkWave std_msgs/Header header uint32 seq time stamp string frame_id int32 count int32 nch int32 length int32 data_bytes hark_msgs/HarkWaveVal src float32 wavedata
wavedatais a raw PCM data array. Since HARK is not aware of the number of bits, it simply casts an integer value to a floating point type. In other words,
data_bytesis the data size. In other words, it is the size of
float(4 bytes) multiplied by the size of
lengthis the number of samples per frame handled by HARK. The initial value of HARK is
512. Since HARK processed frame by frame, in other words, the size of
nchis the number of channels. Your device seems to be 1ch, so it should be
1. For microphone array data, a larger number will be stored.
countis the frame count. Since HARK processing frame by frame, it is necessary to know what frame the data is. In other words, it is incremented as the frame advances. The first frame number is
There is a final note. In order to prevent problems in FFT/IFFT processing, etc., the frames processing by HARK are subject to sample overlap processing.
The following image may help you understand.
m.takigahiraAugust 23, 2019 at 12:28 am #1123
I am using the package
ros-kinetic-audio-captureto stream the audio from the built-in microphone of the robot.
With this package it is possible to stream audio data in wave format:
PARAMETERS * /audio_capture/channels: 1 * /audio_capture/depth: 16 * /audio_capture/device: plughw:1,0 * /audio_capture/format: wave * /audio_capture/sample_rate: 16000 * /rosdistro: kinetic * /rosversion: 1.12.14 NODES / audio_capture (audio_capture/audio_capture)
The data structure of the data stream
audio_common_msgs/AudioDatais as follows:
user@laptop:~$ rosmsg show audio_common_msgs/AudioData uint8 data
Therefore, it is not compatible with the data structure of
Is there a practical way to make the data structure of
audio_common_msgs/AudioDatacompatible with Hark?
Otherwise, would you suggest another package different than
ros-kinetic-audio-capturein order to have Hark-compatible access to the data from the robot’s built-in microphone?
Thanks in advance.
You must be logged in to reply to this topic.