IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Звук в Visual C++ (https://www.imho.ws/showthread.php?t=57885)

galeon 05.05.2004 14:38

Звук в Visual C++
 
Хай, all. Кто может подскажет как организовать одновременное воспроизведение двух звуковых файлов? Говорят надо как-то частоту складывать ... но как? Суть такая: пишется что-то типа "пианино". надо сделать так чтобы можно ставить аккорды. Заранеее thanks :rolleyes:

gandalf_g 05.05.2004 17:35

Цитата:

Platform SDK: Windows Multimedia

BOOL PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);
пример:
PlaySound("1.wav", NULL, SND_FILENAME | SND_ASYNC);
PlaySound("2.wav", NULL, SND_FILENAME | SND_ASYNC);
PlaySound("3.wav", NULL, SND_FILENAME | SND_ASYNC);

чтобы остановить:
PlaySound(NULL, NULL, 0);

galeon 05.05.2004 21:24

Эти три функции воспроизводят звук не одновременно, а последовательно ... т.е сначала один а при следующем вызове, прерывая предидущий, воспроизводиться следующий. Или в данном примере проигрывается только последний файл ... или я что-то не догоняю? По крайней мере у меня так.

mosh 08.05.2004 17:14

Если сэмплы не большие по объёму, то
читаешь заголовок и, на основании инфы в нем, заполняешь
структурку WAVEFORMATEX инициализируешь DirectSound, с помощью DirectSoundCreate и создаёшь DirectSound буфер, с помощью
CreateSoundBuffer или, если не умеешь читать заголовки,
то с помошью CreateSoundBufferFromFile
для каждого следующего звукового файла создаёшь вторичный буфер...
...звуки будут проигрываться как им укажешь через IDirectSoundBuffer::Play для каждого из созданных буферов,
а микшироваться они будут автоматически! :)

blood_hound 11.05.2004 17:46

А что если в разных потоках каждый PlaySound запустить?

gandalf_g 11.05.2004 18:52

Цитата:

Сообщение от galeon
Эти три функции воспроизводят звук не одновременно, а последовательно ... т.е сначала один а при следующем вызове, прерывая предидущий, воспроизводиться следующий. Или в данном примере проигрывается только последний файл ... или я что-то не догоняю? По крайней мере у меня так.

как так, стоит же флаг SND_ASYNC, читаем MSDN
Цитата:

SND_ASYNC The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.

Mind 12.05.2004 23:57

Цитата:

Сообщение от mosh
Если сэмплы не большие по объёму, то
читаешь заголовок и, на основании инфы в нем, заполняешь
структурку WAVEFORMATEX инициализируешь DirectSound, с помощью DirectSoundCreate и создаёшь DirectSound буфер, с помощью
CreateSoundBuffer или, если не умеешь читать заголовки,
то с помошью CreateSoundBufferFromFile
для каждого следующего звукового файла создаёшь вторичный буфер...
...звуки будут проигрываться как им укажешь через IDirectSoundBuffer::Play для каждого из созданных буферов,
а микшироваться они будут автоматически! :)

Ti zabil upomyanut pro podkluchenie lib'ov,sozdanie interface'a dlya DX i t.d.
Esli chelovek nikogda ne ispolzoval etu travu, to emu bez spez. litri ne oboitis.
Voobschem mnogo gimora s etim DirectX dlya nooba. Da i ispolzuetsya on tolko v pleerah i igrah. WinApi samoe to dlya wav'ov.

mosh 14.05.2004 18:12

Я лишь внёс предложение, гимора совсем не много...
...если б человек заинтересовался, то мог бы обратиться за
подробностями!

edbond 19.05.2004 19:09

используй библиотеки: fmod или bass. разберешся, пригодится :)


Часовой пояс GMT +4, время: 16:22.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.