Qt アプリケーションから udp プロトコルを使用して他のデバイスにオーディオ ストリームを送信しようとしています。私の問題は、ターゲットデバイスが受信するすべてのパケットに対して一定数のサンプル (私の場合は 320) を必要とすることです。そのためには、サウンドをキャッチするために使用する QAudioInput オブジェクトの setBufferSize 関数を使用する必要があると思いますが、QAudioInput オブジェクト全体に関するドキュメントは非常に奇妙で貧弱です。送信するサンプルの数を制御するにはどうすればよいですか? ありがとうございました。
これは私がストリームを送信する方法です:
QAudioFormat format;
format.setSampleRate(48000);
format.setChannelCount(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
//If format isn't supported find the nearest supported
QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
if (!info.isFormatSupported(format))
format = info.nearestFormat(format);
input = new QAudioInput(format);
socket = new QUdpSocket();
socket->connectToHost(ip, port);
input->start(socket);
これはQByteArrayの方法です:
QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
//If format isn't supported find the nearest supported
QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
if (!info.isFormatSupported(format))
format = info.nearestFormat(format);
input = new QAudioInput(format);
input->setNotifyInterval((int)20);
connect(input, SIGNAL(notify()), this, SLOT(readMore()));
socket = new QUdpSocket();
socket->connectToHost(ip, port);
array.clear();
input->start(socket);
void UDPSender::readMore()
{
array.append(device->readAll());
qDebug()<<"Array size"<<array.length();
if(array.length()>=5120) \\ at this time, I don't care about exceeded data
{
socket->write(array.mid(0,5120));
array.clear();
}
}