Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 00:03   #1
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
Стрелка Проблема со звуками в программе

Здравствуйте, есть проблема.
1 проблема состоит в следующем
Есть фоновый звук программы, есть звук у кнопки, если я нажимаю на кнопку фоновый звук пропадает.

procedure TForm1.FormActivate(Sender: TObject);
begin
PlaySound('create', HInstance, SND_RESOURCE or SND_ASYNC);
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
PlaySound('button', HInstance, SND_RESOURCE or SND_ASYNC);
end;

Нужно чтобы при нажатии на Картинку (procedure TForm1.Image2Click) музыка которая играет при открытии формы не прерывалась.
DKENT вне форума Ответить с цитированием
Старый 13.05.2012, 00:29   #2
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

Думаю здесь ты найдешь все что нужно:-)
Вложения
Тип файла: rar Bass_simple_lite.rar (3.12 Мб, 7 просмотров)
JekaDefer вне форума Ответить с цитированием
Старый 13.05.2012, 00:47   #3
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

Нужно решить проблему без подключения дополнительных модулей!!!
DKENT вне форума Ответить с цитированием
Старый 13.05.2012, 08:19   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

MCISendString() ...uses mmsystem, то бишь использование winmm.dll
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.05.2012, 10:38   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Боюсь, только высокоуровневыми средствами эту задачу не решить. Кто-то должен микшировать звук. Это можно либо поручить DirectSound, либо делать самому ручками.
s-andriano вне форума Ответить с цитированием
Старый 13.05.2012, 12:11   #6
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

Если можно дайте пример кода)
DKENT вне форума Ответить с цитированием
Старый 13.05.2012, 13:57   #7
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

На пример и исходник)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MMSystem;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TPlayThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R MyWave.RES}
procedure TPlayThread.Execute;
Var
  hResource: THandle;
  pData: Pointer;
begin
  hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDATA));
  try
    pData := LockResource(hResource);
    if pData = nil then
      raise Exception.Create('Cannot read MyWave');
    PlaySound(pData, 0, SND_MEMORY or SND_ASYNC or SND_LOOP);
  finally
    FreeResource(hResource);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  PlayThread: TPlayThread;
begin
  PlayThread:=TPlayThread.Create(true);
  PlayThread.FreeOnTerminate:=true;
  PlayThread.Priority:=tpHigher;
  PlayThread.Resume;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Windows.Beep(1000, 100);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  mciSendString('play 1.wav', nil, 0,0);
end;

end.
Да, и без потока тож можно...
Код:
procedure TForm1.Button2Click(Sender: TObject);
  hResource: THandle;
  pData: Pointer;
begin
  hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDATA));
  try
    pData := LockResource(hResource);
    if pData = nil then
      raise Exception.Create('Cannot read MyWave');
    PlaySound(pData, 0, SND_MEMORY or SND_ASYNC or SND_LOOP);
  finally
    FreeResource(hResource);
  end;
end;
Вложения
Тип файла: rar 2 Мелодии.rar (678.8 Кб, 7 просмотров)

Последний раз редактировалось JekaDefer; 13.05.2012 в 13:59.
JekaDefer вне форума Ответить с цитированием
Старый 13.05.2012, 14:15   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...directsound хорош, но не нужно усложнять. Простой пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 MCISendString(PChar('play ' + 'tuz.wav'),nil,0,0)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 MCISendString(PChar('play ' + 'baz.wav'),nil,0,0)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MCISendString(PChar('play ' + 'fon.mid'),nil,0,0)
end;
Вложения
Тип файла: zip одновременное воспроизведение.zip (239.6 Кб, 9 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.05.2012, 14:42   #9
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

JekaDefer Создал процедуру по вашему примеру.
Вылетает следующая ошибка
http://s47.radikal.ru/i116/1205/e2/69e1baabbaa7.jpg

В MyWave.rc прописано следующие
MyWave wave 1.wav

Вес файла ресурсов составляет 202кб.

Код:
procedure TForm1.FormActivate(Sender: TObject);
var
 hResource: THandle;
  pData: Pointer;
begin
  hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDATA));
  try
    pData := LockResource(hResource);
    if pData = nil then
      raise Exception.Create('Cannot read MyWave');
    PlaySound(pData, 0, SND_MEMORY or SND_ASYNC or SND_LOOP);
  finally
    FreeResource(hResource);
  end;
end;
Кому не трудно посмотрите исходник!
Вложения
Тип файла: rar Тест.rar (5.15 Мб, 11 просмотров)
DKENT вне форума Ответить с цитированием
Старый 13.05.2012, 15:03   #10
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

не знаю чего там у тебя было не так, переделал по новому все заработало... Я вот ток не догнал в чем это ты там программируешь что у тебя EXEшник с одной кнопкой весит аж 8 метров)))
Вложения
Тип файла: rar Тест.rar (549.4 Кб, 9 просмотров)

Последний раз редактировалось JekaDefer; 13.05.2012 в 15:06.
JekaDefer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема в программе AterAvi Общие вопросы C/C++ 0 08.04.2012 13:53
StringGrid, проблема в программе Nancy90 Помощь студентам 2 28.11.2011 15:20
Проблема в программе. anr Общие вопросы Delphi 1 05.02.2010 00:27
Проблема в программе на С++, множественное исполнение цикла Vikelf Помощь студентам 1 25.05.2009 09:31
проблема в программе cheef Общие вопросы Delphi 2 28.04.2009 13:34