Главная страница
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.021 c
15-1253166116
Andy BitOff
2009-09-17 09:41
2009.11.15
Работа с .pdf


2-1254562617
vegarulez
2009-10-03 13:36
2009.11.15
[D7+ Flash] Как поместить Tlabel, над TShockwaveFlash ?


2-1254145991
faiwer
2009-09-28 17:53
2009.11.15
FIB, TMemoryStream, TRichEdit


15-1252920399
XXL
2009-09-14 13:26
2009.11.15
Моему холодильнику сегодня 40 лет


3-1229064285
Tornado
2008-12-12 09:44
2009.11.15
Доступ к БД Firebird