Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
slamer
Сообщений: n/a
#1

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

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

Доброго дня, друзья.
Используется PlaySound с набором SND_FILENAME|SND_ASYNC|SND_LOOP.
В это время не прерывая текущий звук нужно вывести другой.
Можно ли это сделать с помощью PlaySound, или по другому?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2011, 16:44     Воспроизведение нескольких звуков одновременно
Посмотрите здесь:

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

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

Сравнение звуков - C++
Привет. Кто-нибудь знает какие-нибудь алгоритмы/библиотеки (на C/C++) для сравнения примерно одинаковых по длине звуков? Думается мне...

Программа для записи звуков. - C++
Приветствую всех. Хотелось бы узнать как можно реализовать запись звука с микрофона к примеру в формат wav. Подскажите где можно про это...

Звуковые сигналы с++. Получение 8-битных звуков - C++
Сегодня на паре на с++ был минус 8-ми битный Гимн РФ, подскажите или дайте ссылку, хочу разобраться с звуковыми сигналами.)

В каком слове текста меньше всего гласных звуков? - C++
Помогите пожалуйста сдать лабу по строкам ) "В каком слове текста меньше всего гласных звуков?" или "Удалить из текста все слова, которые...

В каком слове текста меньше всего согласных звуков? - C++
В каком слове текста меньше всего согласных звуков?

PlaySound или аналог для проигрывания двух и более звуков - C++
Добрый день, изучаю C++, сейчас мне нужно, чтобы проигрывался звук, я нашёл такую ф-цию как PlaySound() покопавшись здесь...

Написать функцию, которая принимает строку звуков, а возвращает звук - C++
Всем привет! В общем, я хочу разобраться с алгоритмом в такой задаче: в каком-то языке есть только 4 звука, назовем их А, В, C, D, а...

Повторное воспроизведение - C++
Доброго времени суток! Подскажите, пожалуйста, как сделать так, чтобы в консольке после выполнения всего, что было задано, нажал на любую...

Воспроизведение avi-видео на C++ - C++
Нужен исходник на лёгенькую программу, написанную на C++, воспроизводящий видео в формате avi

Воспроизведение звука из консоли - C++
Всем привет, нужно вызвать короткий звучек из консоли. Не стандартный, а тот, который я захочу, как сделать ?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Paramol
Сообщений: n/a
06.07.2011, 12:32     Воспроизведение нескольких звуков одновременно #2
Вам, скорее всего, подойдут следующие четыре функции, работающие со средой 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
Сообщений: n/a
07.07.2011, 12:09     Воспроизведение нескольких звуков одновременно #3
Спасибо за помощь, John.
Буду пробовать.
А если использовать многопоточность, как в Java-е?
Как Вы думаете?
PS. (По поводу ммsystem.h и работы с MCI)
Если у Вас есть какая нибудь информация, или ссылки на нее, пожалуйста поделитесь - aleksnc@yandex.ru
John Paramol
Сообщений: n/a
12.07.2011, 13:24     Воспроизведение нескольких звуков одновременно #4
есть у меня книжка 1996 года 'Мультимедиа для Windows -
руководство для программиста' (братья Фроловы).
В электронном виде (правда 1994) доступна по адресам:

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

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

P.S. многопоточность скорее вряд ли поможет, зачем усложнять жизнь,
описанный способ прост и вполне работоспособен.
А если Вам нужно что-то серьезное - на это есть DirectSound
(в нем как нельзя лучше проигрываются нескольео звуков одновременно
slamer
Сообщений: n/a
13.07.2011, 12:52     Воспроизведение нескольких звуков одновременно #5
Спасибо за совет.
DirectSound, конечно, сильно. Но на данном этапе ваш первый пример с МСI то что надо.
PS: Учебник Фроловых приобрел, буду изучать.
best regards, slamer.
Yandex
Объявления
13.07.2011, 12:52     Воспроизведение нескольких звуков одновременно
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru