• 9501阅读
  • 8回复

QSound ::如何进行顺序播放不同音频文件? [复制链接]

上一主题 下一主题
离线dinotiger510
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-01
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
如题:

想做个简单的文本读写程序,如现有发音读出数字0-9的九个音频文件。

文本是“123456”,现要使用QSound类顺序读取0.wav,1.wav。。。。。。。。等等,顺序播报出声音。

经过简单程序使用,发现这句话一般都只能读出一个音,而不会6个音全读出。


相信有与我相同需求的人士。。。。。

请大虾指教。。。谢谢。
离线benbenmajia

只看该作者 1楼 发表于: 2010-04-01
QSound中isFinished()不是可以判断文件是否结束吗?
安然.....
离线dinotiger510
只看该作者 2楼 发表于: 2010-04-01
不行,至少windows下不行。我认为此函数是在QSound向设备发送了命令之后,就认为是结束了。然而若你此时再有新命令发送到设备,则会将正在执行的播报给覆盖,进而播报新来的。

采取最早的方式读取几个wav文件已抛弃。现考虑采用wav文件合成的方式进行。

以找到一些资料,介绍wav文件组成。又遇到 一个问题:
读取wav中4个字节,此4字节数据标识的是wav文件大小。但我使用QFile::read函数读取获得的char*中的值为-80,45,1,0.利用QByteArray的函数toInt,toLong,toUInt,toULong,都返回的值为0.

所以,目前我还不能得到一个wav的文件大小。而此值必须获得,之后还需要进行写入修改。

不知道qt中像这样的读写问题,数据类型之间的转换,是怎么的。。。


期待大虾出现。。。。
离线benbenmajia

只看该作者 3楼 发表于: 2010-04-01
可以尝试下QTimer
安然.....
离线午小夜

只看该作者 4楼 发表于: 2010-04-02
用Phonon模块吧,简单又方便。
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线午小夜

只看该作者 5楼 发表于: 2010-04-02
用Phonon模块吧,简单又方便。
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线benbenmajia

只看该作者 6楼 发表于: 2010-04-02
引用第5楼午小夜于2010-04-02 09:28发表的  :
用Phonon模块吧,简单又方便。

小夜夜,phonon关于这个音频视频的控制很齐全?
[ 此帖被午小夜在2010-04-02 10:39重新编辑 ]
安然.....
离线午小夜

只看该作者 7楼 发表于: 2010-04-02
引用第6楼benbenmajia于2010-04-02 09:49发表的  :
小夜夜,phonon关于这个音频视频的控制很齐全?




非常好用,信号,状态,都很齐全.
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线hasitate

只看该作者 8楼 发表于: 2010-08-07
QSound提供的功能有点问题。不能支持按顺序播放多个文件,总是停掉前面的,播放最新的一个。
可以修改QT的source code,重新编译。在src\gui\kernel\qsound_win.cpp中,修尬一个flag:int flags = SND_FILENAME|SND_SYNC
快速回复
限100 字节
 
上一个 下一个