Skip to content

Commit cbdd1ba

Browse files
committed
audio support for usb headset
1 parent 981bcf0 commit cbdd1ba

3 files changed

Lines changed: 34 additions & 6 deletions

File tree

xbot2_gui/Audio/audiosource.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,17 @@ AudioSource::AudioSource():
4646
for (int i = 0; i < size; ++i) {
4747
QString val = QJniObject(env->GetObjectArrayElement(devsArray, i)).toString();
4848
qInfo() << val;
49+
int id = val.split(":")[0].toInt();
50+
QString descr = val.split(":")[1];
51+
_audio_dev_descr.append(descr);
52+
_audio_dev_id.append(id);
53+
_audio_dev.append(QAudioDevice());
4954
}
55+
_current_device = _audio_dev_descr[0];
5056
}
5157

58+
qInfo() << _audio_dev_descr;
59+
5260
const JNINativeMethod methods[] = {
5361
{ "onAudioDataReceivedBase64", "([B)V", (void *)onAudioDataReceivedBase64 }
5462
};
@@ -82,6 +90,8 @@ AudioSource::AudioSource():
8290

8391
initializeDevices();
8492

93+
emit devicesChanged(_audio_dev_descr);
94+
8595
// initializeAudio(_audio_dev.last());
8696
}
8797

@@ -90,7 +100,8 @@ void AudioSource::start()
90100
_buf.clear();
91101
emit bytesAvailableChanged(0);
92102
_active = true;
93-
initializeAudio(_audio_dev[_audio_dev_descr.indexOf(_current_device)]);
103+
int idx = _audio_dev_descr.indexOf(_current_device);
104+
initializeAudio(_audio_dev[idx], _audio_dev_id[idx]);
94105
}
95106

96107
void AudioSource::stop()
@@ -145,12 +156,19 @@ void AudioSource::checkMicrophonePermissions()
145156

146157
void AudioSource::initializeDevices()
147158
{
159+
160+
#ifdef ANDROID
161+
qInfo() << __func__ << "does nothing on android";
162+
return;
163+
#endif
164+
148165
_audio_dev_descr.clear();
149166
_audio_dev.clear();
150167

151168
const QAudioDevice& defaultDeviceInfo = QMediaDevices::defaultAudioInput();
152169
_audio_dev_descr.append(defaultDeviceInfo.description());
153170
_audio_dev.append(defaultDeviceInfo);
171+
_audio_dev_id.append(defaultDeviceInfo.id().toInt());
154172

155173
for(auto& deviceInfo : _media_devices->audioInputs())
156174
{
@@ -160,6 +178,7 @@ void AudioSource::initializeDevices()
160178
{
161179
_audio_dev_descr.append(deviceInfo.description());
162180
_audio_dev.append(deviceInfo);
181+
_audio_dev_id.append(deviceInfo.id().toInt());
163182
}
164183
}
165184

@@ -187,7 +206,8 @@ qreal AudioSource::calculateLevel(const char *data, qint64 len) const
187206
}
188207

189208
#ifdef ANDROID
190-
void AudioSource::initializeAudio(const QAudioDevice &deviceInfo)
209+
void AudioSource::initializeAudio(const QAudioDevice &deviceInfo,
210+
int id)
191211
{
192212
_format.setSampleRate(16000);
193213
_format.setChannelCount(1);
@@ -211,10 +231,10 @@ void AudioSource::initializeAudio(const QAudioDevice &deviceInfo)
211231
QJniObject::callStaticMethod<void>(
212232
"it/iit/hhcm/xbot2_gui_client/AudioSource",
213233
"startSoundRecording",
214-
deviceInfo.id().toInt());
234+
id);
215235
}
216236
#else
217-
void AudioSource::initializeAudio(const QAudioDevice &deviceInfo)
237+
void AudioSource::initializeAudio(const QAudioDevice &deviceInfo, int id)
218238
{
219239
_format.setSampleRate(16000);
220240
_format.setChannelCount(1);

xbot2_gui/Audio/audiosource.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class AudioSource : public QObject
2929

3030
QStringList devices() const
3131
{
32+
qInfo() << __func__ << _audio_dev_descr;
3233
return _audio_dev_descr;
3334
}
3435

@@ -58,7 +59,7 @@ class AudioSource : public QObject
5859

5960
if(_active)
6061
{
61-
initializeAudio(_audio_dev[idx]);
62+
initializeAudio(_audio_dev[idx], _audio_dev_id[idx]);
6263
}
6364
}
6465

@@ -120,11 +121,13 @@ public slots:
120121

121122
qreal calculateLevel(const char *data, qint64 len) const;
122123

123-
void initializeAudio(const QAudioDevice &deviceInfo);
124+
void initializeAudio(const QAudioDevice &deviceInfo,
125+
int id = 0);
124126

125127
std::unique_ptr<QAudioSource> _audio_src;
126128
QIODevice * _io_dev = nullptr;
127129
QStringList _audio_dev_descr;
130+
QList<int> _audio_dev_id;
128131
QList<QAudioDevice> _audio_dev;
129132
std::unique_ptr<QMediaDevices> _media_devices;
130133
QString _current_device;

xbot2_gui/android/src/it/iit/hhcm/xbot2_gui_client/AudioSource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ private static String audioDeviceTypeToString(int type)
7979
return "Wired headphones";
8080
case AudioDeviceInfo.TYPE_WIRED_HEADSET:
8181
return "Wired headset";
82+
case AudioDeviceInfo.TYPE_USB_HEADSET:
83+
return "Wired USB headset";
84+
case AudioDeviceInfo.TYPE_USB_DEVICE:
85+
return "Wired USB device";
8286
case AudioDeviceInfo.TYPE_TELEPHONY:
8387
case AudioDeviceInfo.TYPE_UNKNOWN:
8488
default:
@@ -108,6 +112,7 @@ private static String[] getAudioDevices(int type)
108112
String deviceType = audioDeviceTypeToString(deviceInfo.getType());
109113

110114
if (deviceType.equals(audioDeviceTypeToString(AudioDeviceInfo.TYPE_UNKNOWN))) {
115+
System.out.println("Unknown device");
111116
// Not supported device type
112117
continue;
113118
} else if (deviceType.equals(audioDeviceTypeToString(AudioDeviceInfo.TYPE_BUILTIN_MIC))) {

0 commit comments

Comments
 (0)