Конференция "Media" » Несколько потоков звука в программе [D6, D7, WinXP]
 
  • Дельфин (17.09.07 22:17) [0]
    Здравствуйте! Вопрос, наверное, очень простой, но я не разберусь... Как сделать в программе несколько потоков звука? Без использования нескольких компонентов МедиаПлеер, вообще без компонентов? Я без компонентов звук вывожу только функцией PlaySound() из mmsystem, но как только я пытаюсь проиграть другой файл, прежний обрывается, то есть звук там идет одним потоком. А как можно проигрывать скажем, пять фалов одновременно? Чтобы на каждом потоке отдельно управлять - загружать файл, проигрывать, останавливать, новый файл открывать и т.п.?
  • Rial © (18.09.07 06:42) [1]
    OpenAL, DirectSound, Bass - коючевые слова для поиска. :)
  • medved_68 © (18.09.07 08:17) [2]
    Дельфин почитай статью "Низкоуровневое программирование звука в Windows" в частности про набор интерфейсных функций звуковых устройств и погляди реализацию юнита mms. :)))
  • Сергей М. © (18.09.07 09:40) [3]

    > Дельфин   (17.09.07 22:17)


    см. DirectSound, ASIO
  • DiamondShark © (19.09.07 15:23) [4]
    Вай, какие страшные слова.
    Я тоже ругаццо умею: "MCI".


    function MciPlayFile(Notify: HWND; const FileName: string): MCIDEVICEID;
    var
     mciOpenParams: MCI_OPEN_PARMS;
     mciPlayParams: MCI_PLAY_PARMS;
     r: MCIERROR;
    begin
     mciOpenParams.lpstrDeviceType := 'waveaudio';
     mciOpenParams.lpstrElementName := PChar(FileName);

     r := mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD(@mciOpenParams));
     if r <> 0 then raise Exception.Create('O pula MCI_OPEN');

     Result := mciOpenParams.wDeviceID;

     mciPlayParams.dwCallback := Notify;
     r := mciSendCommand(Result, MCI_PLAY, MCI_NOTIFY, DWORD(@mciPlayParams));
     if r <> 0 then raise Exception.Create('O pula MCI_PLAY');
    end;



    При пользовании главное не забыть:
    1. Обработать MM_MCINOTIFY и закрыть девайс
    2. Файлы открываются эксклюзивно

    Вот так можно пользоваться:


    TForm1 = class(TForm)
     ...
     private
       procedure MMMciNotify(var Msg: TMessage); message MM_MCINOTIFY;
     ...
    end;

    ...

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     MciPlayFile(Handle, 'C:\WINNT\Media\Windows Logoff Sound.wav');
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
     MciPlayFile(Handle, 'C:\WINNT\Media\Windows Logon Sound.wav');
    end;

    procedure TForm1.MMMciNotify(var Msg: TMessage);
    begin
     mciSendCommand(Msg.LParam, MCI_CLOSE, 0, 0)
    end;



    Нажимайте попеременно кнопочки, наслаждайтесь параллельным звучанием файлов.
    Только не слишком резво, чтоб ошибку открытия не получить ;)
    Ну, с этим Вы справитесь. Программировать умеете, да и справка по MCI под рукой.
  • Сергей М. © (19.09.07 15:47) [5]

    > Я тоже ругаццо умею: "MCI"


    С чем тебя и поздравляю)

    Но ASIO, равно впрочем как и ALSA, изначально "заточены" под такие рантаймовые задачи. В отличие от MCI.
  • Сергей М. © (19.09.07 15:49) [6]

    > рантаймовые


    Пардон, "риэлтаймовые" конечно же.
  • Сергей М. © (19.09.07 17:44) [7]

    > Я тоже ругаццо умею: "MCI".


    Это я вижу)

    Только вот не вижу я, любезный, тех самых "аргументов" в пользу MCI vs DirectAccess, на коих ты с пеной у рта настаивал, скажем, в ветке про NP vs Sockets)

    Не сподобишься ли привести их, а ?
    Особенно в явно неизвестных условиях окружения задачи автора ?

    "Несподобнеость", извини уж, буду вынужден трактовать как очередной приступ паранойи) ...

    p.s.

    И не дожидайся, пока сюда заглянет Jeer (с) - с параноиками у него разговор жестче чем у меня)
  • DiamondShark © (19.09.07 18:49) [8]

    > Не сподобишься ли привести их, а ?

    Непременно, сразу как напомнишь мне, где я в этой ветке употребил что-нибудь вроде:
    "прямо таки напрашивается"
    "Даже не задумывайся"
    "выбор ... еще более очевиден"


    > Особенно в явно неизвестных условиях окружения задачи автора

    Что не помешало тебе охарактеризовать задачи как "риэлтаймовые".

    Хотя я в вопросе явно вижу поиск альтернативы МедиаПлеер и PlaySound(). Это, видимо, такой род паранойи -- вчитываться в вопрос.


    > "Несподобнеость", извини уж, буду вынужден трактовать как
    > очередной приступ паранойи) ...

    Хоть я и не знаю, что такое "Несподобнеость", но так и быть: считай как тебе заблагорассудится.
  • DiamondShark © (19.09.07 18:51) [9]

    > Хотя я в вопросе явно вижу поиск альтернативы МедиаПлеер
    > и PlaySound().

    для проигрывания файлов.
  • Дельфин (20.09.07 10:20) [10]
    Спасибо, буду разбираться
  • brother © (21.09.07 22:58) [11]
    мда, опять как всегда, общие слова...
  • dppyq (02.10.07 04:40) [12]
    <a href= http://rpz3zmr75a.com >Google</a>
  • dppyq (02.10.07 04:40) [13]
    <a href= http://rpz3zmr75a.com >Google</a>
  • zithromax effects on gonorrhea (04.02.08 05:06) [14]
    buy zithromax
    <a href= http://www.ps3forums.com/member.php?u=69459 >zithromax</a>
       
    zithromax prescribing information
  • buy zithromax online (04.02.08 07:55) [15]
    zithromax side effects cough
    <a href= http://janegreen.com/forums/member.php?u=862 >generic zithromax</a>
       
    generic zithromax without prescription
 
Конференция "Media" » Несколько потоков звука в программе [D6, D7, WinXP]
Есть новые Нет новых   [133929   +473][b:0][p:0.001]