• 17960阅读
  • 12回复

【请问】QSound如何连续播放多个声音? [复制链接]

上一主题 下一主题
离线清晨
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-24
QSound *sound1 = new QSound("sound/1.wav", this); //构建对象
    QSound *sound2 = new QSound("sound/2.wav", this); //构建对象
    sound1->play();
    if(sound1->isFinished()==true)
    {
        sound1->stop();
        sound2->play();
    }

我想将多个音频文件连在一起播放  达到语音播报效果  但QSound每次只播报最后一个对象。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线彩阳

只看该作者 1楼 发表于: 2014-05-24
简单的当然不行了,不过通过信号和槽的机制你可以试试。QSound没有槽,你可以使用一个定时器来定时查询QSound::isFinished()。
上海Qt开发联盟,热忱地欢迎你的加入!
离线realfan

只看该作者 2楼 发表于: 2014-05-24
sound1->play()是立即返回
离线清晨

只看该作者 3楼 发表于: 2014-05-25
回 彩阳 的帖子
彩阳:简单的当然不行了,不过通过信号和槽的机制你可以试试。QSound没有槽,你可以使用一个定时器来定时查询QSound::isFinished()。 (2014-05-24 21:26) 

我定了定时器查询QSound::isFinished()也不行呃  他还是只播最后个音频文件。。。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线清晨

只看该作者 4楼 发表于: 2014-05-25
回 realfan 的帖子
realfan:sound1->play()是立即返回
 (2014-05-24 21:51) 

那该怎么办呢。。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线彩阳

只看该作者 5楼 发表于: 2014-05-25
编程方法出了问题:
你制作一个数组,连接定时器的信号和槽,然后监听isFinished,我这里给你写伪代码好了:
array = { "1.wav", "2.wav" };
onTimeout( )
{
  if ( sound.isFinished( ) )
  {
    sound.play( array[i++] );
  }
}
上海Qt开发联盟,热忱地欢迎你的加入!
离线清晨

只看该作者 6楼 发表于: 2014-05-26
回 彩阳 的帖子
彩阳:编程方法出了问题:
你制作一个数组,连接定时器的信号和槽,然后监听isFinished,我这里给你写伪代码好了:
array = { "1.wav", "2.wav" };
onTimeout( )
{
....... (2014-05-25 23:17) 

connect( inSoundTimer, SIGNAL(timeout()), this, SLOT(inSoundSlot()));

void callAllNum::inSoundSlot()
{
    int i=0;
    sound->play(soundList);
    if(sound->isFinished()==true)
    {
        i++;
        sound->play(soundList);
    }
}

我这么写也不对呃。。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线清晨

只看该作者 7楼 发表于: 2014-05-26
回 彩阳 的帖子
彩阳:编程方法出了问题:
你制作一个数组,连接定时器的信号和槽,然后监听isFinished,我这里给你写伪代码好了:
array = { "1.wav", "2.wav" };
onTimeout( )
{
....... (2014-05-25 23:17) 

试出来了   大神就是大神  太感谢了。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线清晨

只看该作者 8楼 发表于: 2014-05-26
soundList.clear();
soundList<<"sound/1.wav"<<"sound/2.wav";
soundList_i=0;
connect( inSoundTimer, SIGNAL(timeout()), this, SLOT(inSoundSlot()));

void callAllNum::inSoundSlot()
{
    if(soundList_i<soundList.count())
    {
        if(sound->isFinished()==true)
        {
            sound->play(soundList[soundList_i++]);
        }
    }
}
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jnny_cn

只看该作者 9楼 发表于: 2014-05-26
离线bb1994525

只看该作者 10楼 发表于: 2015-05-02
楼主,能把你的源码发我一份吗?或者你告诉我一下你的sound对象怎么创建的好吗?
QSound的用法不应该是 QSound  sound (文件路径名) ; 这样子吗?你的sound为什么是全局的一个对象呢?
求解~
离线liudianwu

只看该作者 11楼 发表于: 2016-04-25
bool QSound::isFinished () const
Returns true if the sound has finished playing; otherwise returns false.
Warning: On Windows this function always returns true for unlooped sounds.
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线z609932088

只看该作者 12楼 发表于: 2016-04-26
为什么不用QMediaPlayer了,难道你对延迟有要求
有阳光的地方就是青春
快速回复
限100 字节
 
上一个 下一个