私のプロジェクトでは、フォノンを使用することは望ましくありません。したがって、QAudioOutput とデコーダー Lame を使用することにしました。QNetworkReply を介してネットワークから取得したデータは、4096 バイトのブロックをデコードしようとしますが、エラーが発生します。やり方の説明が見つからないので、私の行動が正しくないことを理解しています。ID3 タグをスキップして、クリーンなデータで作業する必要があると思います
#include <QtNetwork>
#include <QObject>
#include <lame/lame.h>
class Decoder:public QObject
{
Q_OBJECT
public:
QNetworkReply* _reply;
explicit Decoder(QNetworkReply *reply,QObject *parent=0):
QObject(parent),
_reply(reply)
{
QObject::connect(reply,SIGNAL(downloadProgress(qint64,qint64)),SLOT(readData(qint64,qint64));
}
public slots:
void readData(qint64 ready,qint64 total )
{
if ((_reply->size() > 4096) || (ready == total))
{
QByteArray data = _reply->read(4096);
qint16 l_buf[4096*100];
qint16 r_buf[4096*100];
hip_t decoder = hip_decode_init();
qint32 decoded = hip_decode(decoder,(unsigned char*)data.data(),data.size(),l_buf,r_buf);
}
}