Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.01.2012, 00:55
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию Воспроизведение звука

Интересует возможность воспроизведения звука, причем с возможностью его отключения и конечно при параллельном воспроизведении.
Как я заприметил начинаем с подключения модуля MMSystem.
Далее есть парочка команд.
Код:
sndPlaySound('C:\Sound.wav', SND_ASYNC); // Обычное воспроизведение
sndPlaySound('C:\Sound.wav', SND_ASYNC + SND_LOOP); // Зацикленное воспроизведение
sndPlaySound(nil, SND_ASYNC); // Остановка воспроизведения

mciSendString(PChar('Play "C:\Sound.wav"'),nil,0,0); // Воспроизведение
mciSendString(PChar('close waveaudio'),nil,0,0); // Остановка, только как-то она у меня некорректно работает
Вообщем не могу разобраться со всей этой кучей да и вообще со звуком. Нужно что бы можно было воспроизводить отдельный звук, отключать именно его в нужный момент, зацикливать, ну и что бы были параллельные звуки.
Ответить с цитированием
  #2  
Старый 14.01.2012, 01:24
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

bass.dll чем не устраивает?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 14.01.2012, 08:49
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вариантов много. к примеру:

Код:
uses
  MCIPlayer,

MCIPlayer.Open('d:\Музыка\Ennio Morricone\Chi Mai.mp3');
MCIPlayer.Play;
MCIPlayer.Stop;
MCIPlayer.Close;
MCIPlayer.Pause;
MCIPlayer.Resume;
MCIPlayer.TriggerPause;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:=IntToStr(GetLength);
  Label2.Caption:=IntToStr(GetPosition);
  Label3.Caption:=IntToStr(Integer(GetMode));
end;

http://data.cod.ru/139012
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 14.01.2012, 14:37
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
bass.dll чем не устраивает?
Это что такое и как ним пользоваться?

Цитата:
Сообщение от NumLock
вариантов много. к примеру:
Что-то оно у меня совсем не хочет работать.
Ответить с цитированием
  #5  
Старый 14.01.2012, 14:49
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

http://data.cod.ru/139024
-жми Open
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 14.01.2012, 20:18
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Разобрался. Но смысл? Воспроизведение идет только одного трека, а мне нужно несколько одновременно. И что бы отключать можно было нужный.
Ответить с цитированием
  #7  
Старый 14.01.2012, 21:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

я тебе по секрету скажу: скопируй exe и mp3 в какую-нибудь папку и замени "я узнал что у меня.mp3" на другой mp3, но с тем же именем, проще говоря подмени mp3. теперь запусти exe из 1 и 2 папки.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 14.01.2012, 21:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если скачаешь библиотеку bass, ссылку на которую тебе уже указывали, то там имеются примеры. Заходишь в каталог дельфи и смотришь пример 'basstest', получишь именно то, что ищешь.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 14.01.2012, 21:35
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
я тебе по секрету скажу: скопируй exe и mp3 в какую-нибудь папку и замени "я узнал что у меня.mp3" на другой mp3, но с тем же именем, проще говоря подмени mp3. теперь запусти exe из 1 и 2 папки.

И таких программок штук десять и каждую запускать

Вот кое что нарыл, но все же маловато. Цикла нету, да и почему-то воспроизводит только MP3, WAV и MIDI не читает.
Код:
Пример кода
	mciSendString(PChar('Play "C:\Sound.wav"'),nil,0,0);

Команды
	Воспроизвести - Play "C:\Sound.wav"
	Остановить - Stop "C:\Sound.wav"
	Приостановить - Pause "C:\Sound.wav"
	Ожидание - Play "C:\Sound.wav" Wait
	Закрыть звук - Close WaveAudio
Ответить с цитированием
  #10  
Старый 14.01.2012, 21:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Приведённый NumLock-ом код может читать и WAV и MIDI, только нужно внести небольшое изменение. Но по мне так, так bass удобнее. Хотя для мелочи и команды Внды подойдут.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 14.01.2012, 21:52
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Да ну как для мелочи...
- Нужно включить воспроизведение фоновой музыки под циклом.
- Воспроизводить короткие звуковые сигналы под видом когда наводишь курсор на кнопку, убираешь курсор, нажимаешь на кнопку.

Загрузку CPU он грузит с BASS кода, да?
Label1.Caption := 'CPU% ' + FloatToStrF(BASS_GetCPU, ffFixed, 4, 2);
Ответить с цитированием
  #12  
Старый 14.01.2012, 21:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Попробуй этот файл, только дополнительно требуется bass.dll
Этот файл грузит проц на 0.5% при 2 песнях. 4 песни загрузили на 1%
Вложения
Тип файла: rar test.rar (3.0 Кбайт, 32 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 14.01.2012 в 22:03.
Ответить с цитированием
  #13  
Старый 14.01.2012, 22:23
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Попробуй этот файл, только дополнительно требуется bass.dll
Этот файл грузит проц на 0.5% при 2 песнях. 4 песни загрузили на 1%
Данный проект аналог того что находится в примере, грузит CPU одинаково.
Ответить с цитированием
  #14  
Старый 15.01.2012, 10:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Kaktuz
И таких программок штук десять и каждую запускать
вообще-то имелось в виду создавать нужное количество экземпляров TMCIPlayer (предполагалось обернуть все в класс), каждый отвечает за свой звук (запуск 2-х программ был для примера демонстрации микшера).

Код:
uses
  MMSystem,

type
  TMCIPlayer = class
  private
    FDeviceID: Cardinal;
  public
    constructor Create(FileName: String);
    destructor Destroy; override;
    procedure Play;
    procedure Stop;
  end;

{ TMCIPlayer }

constructor TMCIPlayer.Create(FileName: String);
var
  OpenParms: TMCI_Open_Parms;
  FFlags: Longint;
  FError: Longint;
  Buffer: array [0..$ff] of Char;
begin
  inherited Create;
  OpenParms.dwCallback:=0;
  OpenParms.wDeviceID:=0;
  OpenParms.lpstrDeviceType:='';
  OpenParms.lpstrElementName:=PChar(FileName);
  OpenParms.lpstrAlias:=PChar(IntToStr(GetTickCount)+#0);
  FFlags:=MCI_WAIT or MCI_OPEN_ELEMENT or MCI_OPEN_ALIAS;
  FError:=mciSendCommand(0, MCI_OPEN, FFlags, Longint(@OpenParms));
  if FError=0 then FDeviceID:=OpenParms.wDeviceID
  else
  begin
    FDeviceID:=0;
    mciGetErrorString(FError, @Buffer[0], Length(Buffer));
    ShowMessage(StrPas(@Buffer[0]));
  end;
end;

destructor TMCIPlayer.Destroy;
var
  GenericParms: TMCI_Generic_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    GenericParms.dwCallback:=0;
    FFlags:=MCI_WAIT;
    if mciSendCommand(FDeviceID, MCI_CLOSE, FFlags, Longint(@GenericParms))=0 then
      FDeviceID:=0;
  end;
  inherited Destroy;
end;

procedure TMCIPlayer.Play;
var
  PlayParms: TMCI_Play_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    FFlags:=MCI_NOTIFY;
    PlayParms.dwCallback:=0;
    PlayParms.dwFrom:=0;
    PlayParms.dwTo:=0;
    mciSendCommand(FDeviceID, MCI_PLAY, FFlags, Longint(@PlayParms));
  end;
end;

procedure TMCIPlayer.Stop;
var
  GenericParms: TMCI_Generic_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    FFlags:=MCI_WAIT;
    GenericParms.dwCallback:=0;
    mciSendCommand(FDeviceID, MCI_STOP, FFlags, Longint(@GenericParms));
  end;
end;

ну и дальше:

Код:
TMCIPlayer.Create('c:\Windows\Media\flourish.mid').Play;
..
TMCIPlayer.Create('c:\Windows\Media\Windows Ringin.wav').Play;

не забывая разрушать объекты.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram