从无声子网络播放带有Qt4的mp3

从无声子网络播放带有Qt4的mp3,qt4,mp3,lame,qtmultimedia,Qt4,Mp3,Lame,Qtmultimedia,在我的项目中使用声子是不可取的。因此,决定使用QAudioOutput和解码器Lame。通过QNetworkReply从网络获取的数据,并尝试解码4096字节的块,但我得到一个错误。我明白我的行为是不正确的,因为我找不到一个解释如何去做。我想我需要跳过ID3标签,处理干净的数据 #include <QtNetwork> #include <QObject> #include <lame/lame.h> class Decoder:public QObject

在我的项目中使用声子是不可取的。因此,决定使用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);
      }
  }
#包括
#包括
#包括
类解码器:公共QObject
{
Q_对象
公众:
QNetworkReply*\u回复;
显式解码器(QNetworkReply*reply,QObject*parent=0):
QObject(父对象),
_答复(答复)
{
QObject::连接(应答、信号(下载进度(qint64、qint64))、插槽(读取数据(qint64、qint64));
}
公众时段:
无效读取数据(qint64就绪,qint64总计)
{
如果((_reply->size()>4096)| |(ready==total))
{
QByteArray数据=_回复->读取(4096);
qint16 l_buf[4096*100];
qint16 r_buf[4096*100];
hip_t decoder=hip_decode_init();
qint32 decoded=hip_decode(解码器,(无符号字符*)data.data(),data.size(),l_buf,r_buf);
}
}

你需要给我们看你的代码。我研究了MP3的结构,并得出结论,我需要寻找标题FFFB,考虑样本的长度并积累它们。我认为这是正确的方法。