![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Воспроизвести 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, передать ему этот кусок... и гиде проблема???