Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.15;
Скачать: CL | DM;

Вниз

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

 
AlexanderMS ©   (2008-01-09 17:59) [0]

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


 
@!!ex ©   (2008-01-09 18:43) [1]

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


 
AlexanderMS ©   (2008-01-09 19:10) [2]


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

Проблема в том, что я совершенно не изучал и не разбирался с 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 19:33) [3]

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

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

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


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


> AlexanderMS


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


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


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

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


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

Движок Devil"s Engine.

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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.11.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1252748348
Kerk
2009-09-12 13:39
2009.11.15
mod_status


1-1224008956
DmitriyG.
2008-10-14 22:29
2009.11.15
Создание большого XML


2-1254397423
emplty
2009-10-01 15:43
2009.11.15
[ListBox] добавление строк сверху и отсчет с низу


2-1254421987
Семён. А
2009-10-01 22:33
2009.11.15
Как модифицировать функцию? + Array


15-1253028542
TUser
2009-09-15 19:29
2009.11.15
Нет ли у кого-нибудь совсем старого железа?