Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Воспроизвести WAV из части файла.


AlexanderMS ©   (2008-01-09 17:59:00) 

Есть один большой файл, который состоит из нескольких файлов (несжатый архив), в числе которых и WAV-файл. Нужно  воспроизвести этот WAV-файл с помощью DirectSound (известно смещение относительно начала архива и длина файла), не заводя дополнительных файлов. Подскажите, пожалуйста, как это можно сделать?


Сергей М.   (2008-01-10 14:29:00) [1]


> несколько звуков должно играть


В DS навернякаесть соотв. объекты/методы/свойства.

В кр.случае ничто не мешает месить аудиопотоки ручками и готовую смесь подавать на съедение той же sndPlaySound()


AlexanderMS   (2008-01-10 10:00:00) [2]


> см. sndPlaySound() с флагом SND_MEMORY

У меня игра, и несколько звуков должно играть асинхронно.


> Не знаю что за движок используешь.

Движок Devil's Engine.

---
Буду разбираться.


Сергей М.   (2008-01-10 08:55:00) [3]


> AlexanderMS


см. sndPlaySound() с флагом SND_MEMORY


@!!ex   (2008-01-09 19:33:00) [4]

> [2] AlexanderMS ©   (09.01.08 19:10)

Не знаю что за движок используешь.
Если влом разбиратся с чистым DS, используй fmod, у него можно сэмплэ загружаться откуда угодно, и из памяти тоже.

P.S.
DirectMusic и DirectSound - разные вещи.
Дело в том, что DM НЕ загружает сэмпл в память полностью, а подгружает по мере проигрывания. Тебе использовать DM не кактит вообще.


AlexanderMS   (2008-01-09 19:10:00) [5]


> гиде проблема???

Проблема в том, что я совершенно не изучал и не разбирался с DirectSound, подключил готовый звуковой движок и всё (конечно, я не прав, но времени на всё не хватает). Вот код загрузки из файла:

constructor TSound.Create(FileName : string);
var
 R : HRESULT;
 pConfig : IUnknown;
begin
 FVolume := 75;
 AutoDelete := true;
 AddSoundToArray(Self);

 if not assigned(Loader) then
 begin
     ;//Log('Playing "' + FileName + '"... The SoundManager isn''t loaded !', true);
 end else begin
     R := Loader.LoadObjectFromFile(CLSID_DirectMusicSegment, IDirectMusicSegment8,
                                    pwidechar(WideString(FileName)), Segment);
     if FAILED(R) then
     begin
        //Log('The Sound "' + FileName + '" isn''t loaded: ' + DMErrorString(R), true);
//         ShowError('The Sound "' + FileName + '" isn''t loaded: ' + DMErrorString(R));

        Segment := nil;
        Exit;
     end;

     if SUCCEEDED(Segment.GetAudioPathConfig(pConfig)) then begin
        R := Performance.CreateAudioPath(pConfig,
                          true,
                          Path);
        pConfig := nil;
     end else begin
        R := Performance.CreateStandardAudioPath(MONO_STEREO[InitStereo],
                                                 InitChannels, true, Path);
     end;

     if FAILED(R) then DirectMusicLog(R);

     SetVolume(FVolume);
     Segment.Download(Performance);
 end;
end;


Понятия не имею, куда и что можно добавить. :)


@!!ex   (2008-01-09 18:43:00) [6]

Прочитать в память кусок, создать сэпл DirectSound, передать ему этот кусок... и гиде проблема???


Наверх

Титульная страница Поиск, карта сайта Написать письмо