format은 아래와같이
QAudioFormat formatAudio;
formatAudio.setSampleRate(44100);
formatAudio.setChannelCount(2);
formatAudio.setSampleSize(24);
formatAudio.setCodec("audio/pcm");
formatAudio.setByteOrder(QAudioFormat::LittleEndian);
formatAudio.setSampleType(QAudioFormat::SignedInt);
audio device info는 아래와같이
QAudioDeviceInfo getAudioDevice(const QString &name)
{
foreach(const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioInput))
{
if(deviceInfo.deviceName() == name)
{
return deviceInfo;
}
}
return QAudioDeviceInfo();
}
audioDevice = getAudioDevice(“hw:CARD=G5,DEV=0”);
그 후 start하면 iodevice에 어떠한 데이터가 수신되지 않는다. 결론은 이유가 Qt는 24비트 셈플은 S24_LE로 초기화 하기때문이였다.
쉘에서 아래처럼 정보를 확인해보면 지원하는 포맷은 S24_3LE(…)
$ cat /proc/asound/card2/stream0
Creative Technology Ltd Sound BlasterX G5 at usb-3f980000.usb-1.3.1, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S24_3LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000
Data packet interval: 500 us
Capture:
Status: Stop
Interface 2
Altset 1
Format: S24_3LE
Channels: 2
Endpoint: 2 IN (ASYNC)
Rates: 44100, 48000, 88200, 96000
Data packet interval: 500 us
좀 더 깔끔하게 코딩하기위해 Qt의 Multmedia를 사용하려했지만 결국 alsa api를 써야할거같다. 아… 왜 저런 차이를 생각하지 못하고 네시간을 삽질했을까… PulseAudio를 활성화 시키면 리셈플링 되어 처리가 가능할거같은데 lite 이미지에서 PulseAudio를 활성화 하는 방법이 구글링되지않아 그건 포기해야겠다.