Russian Qt Forum
Ноябрь 23, 2024, 00:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSound ??? или нет  (Прочитано 9056 раз)
jatsuk
Гость
« : Февраль 24, 2012, 07:28 »

Задача - проиграть звук 1 раз.
нужна пауза, остановка и проигрывание звука с определенного места (например передавать через Slider).

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

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

P.S. сделал только проигрывание и стоп...
Записан
Bepec
Гость
« Ответ #1 : Февраль 24, 2012, 08:12 »

Лучше Phonon использовать.

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

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

Phonon может сделать всё то, что ты хочешь Подмигивающий
Записан
jatsuk
Гость
« Ответ #2 : Февраль 24, 2012, 08:44 »

Спасибо, так не хотелось разбираться с фононом, но видимо придется Подмигивающий
Записан
Bepec
Гость
« Ответ #3 : Февраль 24, 2012, 09:17 »

В путь (А ещё лучше удали темку, особой информации ведь не содержит Улыбающийся )
Записан
QtCoder
Гость
« Ответ #4 : Февраль 24, 2012, 09:27 »

Минусы QSound - нельзя проигрываемый файл положить в ресурсы.
У фонона можно играть прямо из ресурсов, но при первой загрузке фонон грузит кодеки и подтормаживает программу. Даже если там простой wav.
Записан
Bepec
Гость
« Ответ #5 : Февраль 24, 2012, 09:41 »

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

QtCoder -  не пробовал, не вводи людей в заблуждение Подмигивающий
Записан
popper
Гость
« Ответ #6 : Февраль 24, 2012, 09:48 »

Делал подобную задачу через QAudioOutput.
Во вложенном архиве исходники с реализацией простого виджета управления проигрыванием звука. 
Записан
QtCoder
Гость
« Ответ #7 : Февраль 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.

И да, я пробовал. Кто тут вводит в заблуждение еще вопрос
Записан
Bepec
Гость
« Ответ #8 : Февраль 24, 2012, 10:13 »

Версия 4.7.2 - поддерживат Веселый номер правки и её статус найдёшь сам, если захочешь Подмигивающий
Записан
kirill
Гость
« Ответ #9 : Февраль 29, 2012, 21:09 »

Версия 4.7.2 - поддерживат Веселый номер правки и её статус найдёшь сам, если захочешь Подмигивающий
Проверил на 4,7,2 - не работает.
Зачем ты вводишь людей в заблуждение?
Дай пруфлинк что оно работает хоть в какой-то версии Qt.

Открыл доку по 4.8
"Note that QSound does not support resources. This might be fixed in a future Qt version."
 Злой
« Последнее редактирование: Февраль 29, 2012, 21:13 от Kirill » Записан
Bepec
Гость
« Ответ #10 : Март 01, 2012, 07:05 »

up
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #11 : Май 21, 2012, 22:36 »

А документации написано вот что:
Цитировать
Note that QSound does not support resources.

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

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

Qt 5.11.0, Win, MinGW
Kurt
Гость
« Ответ #12 : Май 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);
        }
    }
}
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #13 : Май 22, 2012, 12:15 »

QSound в 4.8.1 под Windows не использует Qt-ресурсы, так как вызов QSound:play просто запускает в отдельном потоке соответствующую winapi функцию:

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

Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.246 секунд. Запросов: 23.