Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
slamer

Воспроизведение нескольких звуков одновременно

01.07.2011, 16:44. Показов 3663. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня, друзья.
Используется PlaySound с набором SND_FILENAME|SND_ASYNC|SND_LOOP.
В это время не прерывая текущий звук нужно вывести другой.
Можно ли это сделать с помощью PlaySound, или по другому?
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2011, 16:44
Ответы с готовыми решениями:

Отлов нескольких одновременно нажатых клавиш
Всем доброго времени суток. Подскажите как одновременно отловить несколько клавиш, попробовал это проделать с ctrl + shift и правой +...

Работа с std::map одновременно в нескольких потоках
У меня есть мапа: std::map<std::string, bool> map_password; (ключ - предполагаемый пароль, значение - проверялся ли этот ключ или нет) ...

Одновременно воспроизведение звуков
Воспроизвожу звук функцией PlaySound(); А возможно ли ср-ми Билдера ОДНОВРЕМЕННОЕ КАЧЕСТВЕННОЕ воспроизведение двух звуковых файлов?

4
John Paramol
06.07.2011, 12:32
Вам, скорее всего, подойдут следующие четыре функции, работающие со средой Media Control Interface (MCI)
(интерфейс управляющих сообщений)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//-------------------------------------------------------------------
#include <windows.h>
#include <mmsystem.h>
//-------------------------------------------------------------------
UINT MCIOpen(LPSTR FileName)
{
   MCI_OPEN_PARMS mciOpen;
   memset(&mciOpen,0,sizeof(MCI_OPEN_PARMS));
   mciOpen.lpstrDeviceType = (LPSTR)'waveaudio';
   mciOpen.lpstrElementName = (LPSTR)FileName;
   mciOpen.lpstrAlias = NULL;
   DWORD flags = MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_WAIT;
   DWORD rc = mciSendCommand(0, MCI_OPEN, flags, 
              (DWORD)(LPVOID)&mciOpen);
   if (rc)
   {
     Beep(1000,100);
     return 0;
   }
   return mciOpen.wDeviceID;
}
//-------------------------------------------------------------------
void MCIClose(UINT wDeviceID)
{
  MCI_GENERIC_PARMS mcigen;
  DWORD rc = mciSendCommand(wDeviceID, MCI_CLOSE, MCI_WAIT, 
             (DWORD)(LPMCI_GENERIC_PARMS)&mcigen);
  if (rc) Beep(1000,100);
}
//-------------------------------------------------------------------
DWORD MCIPlay(UINT wDeviceID)
{
  MCI_PLAY_PARMS mciPlayParms;
  DWORD rc;
  rc = mciSendCommand(wDeviceID, MCI_SEEK,
       MCI_WAIT|MCI_SEEK_TO_START, NULL);
  rc = mciSendCommand(wDeviceID, MCI_PLAY, 0, 
       (DWORD)(LPVOID)&mciPlayParms);
  return rc;
}
//-------------------------------------------------------------------
DWORD MCIStop(UINT wDeviceID)
{
  MCI_GENERIC_PARMS mcigen;
  DWORD rc = mciSendCommand(wDeviceID, MCI_STOP, MCI_WAIT,
            (DWORD)(LPMCI_GENERIC_PARMS)&mcigen);
  if (rc) Beep(1000,100);
  return rc;
}
//-------------------------------------------------------------------
использовать их можно к примеру так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
main()
{
  UINT ID1 = MCIOpen('1.wav');
  UINT ID2 = MCIOpen('2.wav');
  MCIPlay(ID1);
  MCIPlay(ID2);
  Sleep(5000);
  MCIStop(ID1);
  MCIStop(ID2);
  MCIClose(ID1);
  MCIClose(ID2);
  return 0;
}
но похоже, что залупление этот интерфейс не поддерживает,
а с интерфейсом управляющих строк я не работал (там оно поддерживается).
Так что Вы можете по-прежнему пользоваться PlaySound с залуплением, и в фоне использовать эти функции.
например:
C++
1
2
3
4
5
6
7
8
9
10
main()
{
  PlaySound('1.wav',NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
  UINT ID2 = MCIOpen('2.wav');
  MCIPlay(ID2);
  Sleep(5000);
  MCIStop(ID2);
  MCIClose(ID2);
  return 0;
}
А вообще в mmsystem.dll есть много интересных функций высокого и низкого уровней.
Надо будет - кину примеры.
Удачи
slamer
07.07.2011, 12:09
Спасибо за помощь, John.
Буду пробовать.
А если использовать многопоточность, как в Java-е?
Как Вы думаете?
PS. (По поводу ммsystem.h и работы с MCI)
Если у Вас есть какая нибудь информация, или ссылки на нее, пожалуйста поделитесь - aleksnc@yandex.ru
John Paramol
12.07.2011, 13:24
есть у меня книжка 1996 года 'Мультимедиа для Windows -
руководство для программиста' (братья Фроловы).
В электронном виде (правда 1994) доступна по адресам:

http://emanual.ru/download/234.html
http://www.lcard.ru/~nail/frolov/bsp/v15/home.htm

правда там уже и некоторые поля в структурах не совпадают,
но это ничего, зато там исчерпывающая информация.

P.S. многопоточность скорее вряд ли поможет, зачем усложнять жизнь,
описанный способ прост и вполне работоспособен.
А если Вам нужно что-то серьезное - на это есть DirectSound
(в нем как нельзя лучше проигрываются нескольео звуков одновременно
slamer
13.07.2011, 12:52
Спасибо за совет.
DirectSound, конечно, сильно. Но на данном этапе ваш первый пример с МСI то что надо.
PS: Учебник Фроловых приобрел, буду изучать.
best regards, slamer.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2011, 12:52
Помогаю со студенческими работами здесь

Воспроизведение нескольких разных звуков подряд
Создаю хэш со звуком (взял в каком то примере) var mus = new Array() // Object(); mus = new music10(); mus...

Воспроизведение нескольких звуков для игры
Как реализовать воспроизведение звуков, при нажатие кнопки, выйгрышной комбинации и т.д. Точнее, как это сделать знаю, вопрос через что это...

Воспроизведение звуков
Здравствуйте, помогите пожалуйста В общем мне надо реализовать воспроизведение звуков, например чтоб звуков 10 воспроизвелось подряд ...

Воспроизведение звуков
Доброго времени суток! Поскажите как мне воспроизвести 2 трека один-за-другим поджряд из ресурсов? А то меня хватило только на: ...

Воспроизведение звуков паралельно
Столкнулся с такой проблемой как перебой одним звуком другого. Например запускается главное меню играет музыка, как только касаюсь пунктов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru