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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.05.2013, 21:31
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию Заикание звука в DirectSound

Привет всем! Пишу програмку по звуку через компонент DelphiX. Работает норм. Но возникает один нюанс при сворачивании своего приложения звук заикается, когда окно свернулось звук играет дальше. Как решить мне эту проблему?
Ответить с цитированием
  #2  
Старый 21.05.2013, 11:37
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Фоновую музыку лучше крутить через MediaPlayer, а DXSound предназначен для воспроизведения коротких wav-семплов, типа выстрела.
Ответить с цитированием
  #3  
Старый 21.05.2013, 19:36
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Цитата:
для воспроизведения коротких wav-семплов, типа выстрела
Как раз я и использую короткие звуки с микшированием более длинных звуков.
Ответить с цитированием
  #4  
Старый 22.05.2013, 02:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Klyaksa
...использую короткие звуки с микшированием более длинных звуков.
Неужели очередной трекер? Подозреваю что для работы DxSound используются низкоуровневые обращения и к буферу и к директиксовской библиотеке, (подвисает наверное и при перетаскивании формы по экрану, не только при свёртывании), а от этого панацеи нет, разве что на что-то другое перейти.

З.Ы. Можно ещё вроде в синхропотоке проиграть это дело, но наверное это тоже не решение, если их будет много.

Последний раз редактировалось Alegun, 22.05.2013 в 02:55.
Ответить с цитированием
  #5  
Старый 22.05.2013, 02:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

При работе с DirectX (DirectSound, DirectMusic), заикания нет ни при перетаскивании окна, ни при сворачивании. Что там наворотили в DelphiX и как идёт обращение к указанным интерфейсам неизвестно. Но этой гадостью (DelphiX) не пользовался и нет желание пользваться в дальнейшем.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 22.05.2013, 12:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я думаю проблема в том, что звук и графика в одном потоке реализованы. Сделайте вывод звука например через sndPlaySound()
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 22.05.2013, 13:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Шутишь? Это только для тестовых программ подойдёт, он же однопоточный, два звука одновременно проиграть нельзя.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 22.05.2013, 14:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ой ли? А флаг асинхронного воспроизведения ни о чем не говорит?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 22.05.2013, 15:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

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

Цитата:
Сообщение от Страдалецъ
Ой ли? А флаг асинхронного воспроизведения ни о чем не говорит?
SND_ASYNC это для асинхронного воспроизведения, т.е. PlaySound возвращается немедленно, а не ожидает окончания воспроизведения.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 22.05.2013, 16:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну а вам что надо? Надо ведь что-бы воспроизведение шло в отдельном потоке, не затормаживаясь при сворачивании. Так это и будет. Или я не догоняю что-то?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 22.05.2013, 17:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

имеется в виду что только 1 звук может проирываться, несколько она не умеет. одновременно.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #13  
Старый 22.05.2013, 18:08
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

В диспетчере задач приложение для каждого звука создает отдельный поток. И вопроизводятся они одновременно. Только вот если поставить в главном потоке Sleep(n), то весь звук заикается. Может как-то можно перенести DXSound1 в отдельный поток только как его там создать я не знаю.
P.S.
Проект скинул бы но че-то грузить не хочет пишет:"Кажется, произошла проблема с базой данных Форум по программированию - Delphi Sources.".Могу только код дать.
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DXSounds, ComCtrls;

type
  TForm1 = class(TForm)
    Button2: TButton;
    DXSound1: TDXSound;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  //r:trect;
    Audio,Audio1,Audio2,Audio3: TAudioFileStream;
   // pust:bool=true;
   // x,y,z:integer;
    //buf:array[0..244000]of word;
    ///image1,bmp:tbitmap;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var x,y:integer;
l:cardinal;
begin

Audio.Play;
//Audio1.play;
audio2.Play;
audio3.Play;
sleep(10000);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

    Audio := TAudioFileStream.Create(DXSound1.DSound);
    Audio.AutoUpdate := true;
    Audio.BufferLength := 100;
    Audio.FileName := 'wind_bkg_1.wav';
    Audio.Looped := true;
    audio.Frequency:=44000;
///////////////////////////////////////

   { Audio1 := TAudioFileStream.Create(DXSound1.DSound);
    Audio1.AutoUpdate := true;
    Audio1.BufferLength := 100;
    Audio1.FileName := 'night_bkg_1.wav';
    Audio1.Looped := true;
    audio1.Frequency:=44000;}
///////////////////////////////////////

    Audio2 := TAudioFileStream.Create(DXSound1.DSound);
    Audio2.AutoUpdate := true;
    Audio2.BufferLength := 100;
    Audio2.FileName := 'rain_l.wav';
    Audio2.Looped := true;
    audio2.Frequency:=44000;
    AUdio2.Pan:=-10000;
    //audio2.Volume:=-1000;
///////////////////////////////////////

    Audio3 := TAudioFileStream.Create(DXSound1.DSound);
    Audio3.AutoUpdate := true;
    Audio3.BufferLength := 100;
    Audio3.FileName := 'rain_r.wav';
    Audio3.Looped := true;
    audio3.Frequency:=44000;
    audio3.Pan:=10000;
    //audio3.Volume:=-1000
///////////////////////////////////////
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
audio.Volume:=TrackBar1.Position;
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
begin
audio3.Volume:=TrackBar2.Position;
audio2.Volume:=TrackBar2.Position;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

Audio.Stop;
//Audio1.play;
audio2.Stop;
audio3.stop;
end;
Ответить с цитированием
  #14  
Старый 22.05.2013, 22:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Страдалецъ
Ой ли? А флаг асинхронного воспроизведения ни о чем не говорит?
Ни очём в данном случае. Как уже ответил NumLock, 2 звука проиграть невозможно. При установление указанного флага и попытке запустить 2 звук, первый немедленно заткнётся. Без него вернёт ошибку о невозможности запустить 2 звук.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 23.05.2013, 03:46
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Перекачал экзешник для проверки, что он может воспроизводить 3 звука одновременно. Только создайте файлы в одной папке с экзешником с названием как указано в коде.(чтобы не было ошибок)
Вложения
Тип файла: 7z Project1.7z (155.5 Кбайт, 11 просмотров)

Последний раз редактировалось Klyaksa, 23.05.2013 в 03:48.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter