Russian Qt Forum

Qt => Мультимедиа => Тема начата: jatsuk от Февраль 24, 2012, 07:28



Название: QSound ??? или нет
Отправлено: jatsuk от Февраль 24, 2012, 07:28
Задача - проиграть звук 1 раз.
нужна пауза, остановка и проигрывание звука с определенного места (например передавать через Slider).

Реально ли это сделать с помощью QSound ??

или нужно использовать что то другое ??

P.S. сделал только проигрывание и стоп...


Название: Re: QSound ??? или нет
Отправлено: Bepec от Февраль 24, 2012, 08:12
Лучше Phonon использовать.

Насколько я знаю -  QSound позволяет производить/зацикливать/останавливать звук.

Т.е. проигрывания с определённой точки - не видать. Только с начала файла ;)

Phonon может сделать всё то, что ты хочешь ;)


Название: Re: QSound ??? или нет
Отправлено: jatsuk от Февраль 24, 2012, 08:44
Спасибо, так не хотелось разбираться с фононом, но видимо придется ;)


Название: Re: QSound ??? или нет
Отправлено: Bepec от Февраль 24, 2012, 09:17
В путь (А ещё лучше удали темку, особой информации ведь не содержит :) )


Название: Re: QSound ??? или нет
Отправлено: QtCoder от Февраль 24, 2012, 09:27
Минусы QSound - нельзя проигрываемый файл положить в ресурсы.
У фонона можно играть прямо из ресурсов, но при первой загрузке фонон грузит кодеки и подтормаживает программу. Даже если там простой wav.


Название: Re: QSound ??? или нет
Отправлено: Bepec от Февраль 24, 2012, 09:41
QSound проигрывает файлы откуда угодно, исключая сетевые ресурсы.
Из своего файла ресурсов файл играет так же превосходно, как и из чистого файла.

QtCoder -  не пробовал, не вводи людей в заблуждение ;)


Название: Re: QSound ??? или нет
Отправлено: popper от Февраль 24, 2012, 09:48
Делал подобную задачу через QAudioOutput.
Во вложенном архиве исходники с реализацией простого виджета управления проигрыванием звука. 


Название: Re: QSound ??? или нет
Отправлено: QtCoder от Февраль 24, 2012, 10:06
QSound проигрывает файлы откуда угодно, исключая сетевые ресурсы.
Из своего файла ресурсов файл играет так же превосходно, как и из чистого файла.

QtCoder -  не пробовал, не вводи людей в заблуждение ;)

Из доки для Qt 4.7.1
Цитировать
Note that QSound does not support resources. This might be fixed in a future Qt version.

И да, я пробовал. Кто тут вводит в заблуждение еще вопрос


Название: Re: QSound ??? или нет
Отправлено: Bepec от Февраль 24, 2012, 10:13
Версия 4.7.2 - поддерживат :D номер правки и её статус найдёшь сам, если захочешь ;)


Название: Re: QSound ??? или нет
Отправлено: kirill от Февраль 29, 2012, 21:09
Версия 4.7.2 - поддерживат :D номер правки и её статус найдёшь сам, если захочешь ;)
Проверил на 4,7,2 - не работает.
Зачем ты вводишь людей в заблуждение?
Дай пруфлинк что оно работает хоть в какой-то версии Qt.

Открыл доку по 4.8
"Note that QSound does not support resources. This might be fixed in a future Qt version."
 >:(


Название: Re: QSound ??? или нет
Отправлено: Bepec от Март 01, 2012, 07:05
up


Название: Re: QSound ??? или нет
Отправлено: kolob от Май 21, 2012, 22:36
А документации написано вот что:
Цитировать
Note that QSound does not support resources.

Цитировать
QSound проигрывает файлы откуда угодно, исключая сетевые ресурсы.
Из своего файла ресурсов файл играет так же превосходно, как и из чистого файла.

Если у тебя получилось, примерчик можешь показать?


Название: Re: QSound ??? или нет
Отправлено: Kurt от Май 22, 2012, 12:00
QSound в 4.8.1 под Windows не использует Qt-ресурсы, так как вызов QSound:play просто запускает в отдельном потоке соответствующую winapi функцию:
Код:
        int flags = SND_FILENAME|SND_ASYNC;
        if (loops == -1)
            flags |= SND_LOOP;

        PlaySound((wchar_t*)filename.utf16(), 0, flags);


Для себя делал костыль, wav-файлы складывал все таки в Qt-ресурсы и при запуске копировал в директорию с приложением:
Код:
//=================================================================================================
void MainWnd::extractSoundFiles()
{
    // extract WAV-files from resource
    QDir srcDir(":/sounds");
    QDir dstDir;
    const QString dirName(srcDir.dirName());
    if (!dstDir.exists(dirName)) dstDir.mkdir(dirName);
    dstDir.cd(dirName);
    foreach (const QString & fileName, srcDir.entryList(QDir::Files | QDir::Hidden | QDir::NoSymLinks)) {
        const QString dstName(dstDir.absoluteFilePath(fileName));
        if (!QFile::exists(dstName)) {
            QFile::copy(srcDir.absoluteFilePath(fileName), dstName);
        }
    }
}


Название: Re: QSound ??? или нет
Отправлено: Kurles от Май 22, 2012, 12:15
QSound в 4.8.1 под Windows не использует Qt-ресурсы, так как вызов QSound:play просто запускает в отдельном потоке соответствующую winapi функцию:

Для себя делал костыль, wav-файлы складывал все таки в Qt-ресурсы и при запуске копировал в директорию с приложением:
Не совсем корректный костыль - далеко не всегда у пользователя есть права писать в директорию с папкой программы, более правильно использовать либо QTemporaryFile, если QSound наплевать на расширение, либо связку QString QDir::tempPath () [static] + QFile и удалять файлы при выходе из программы или по окончании их  использования.