информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСтрашный баг в WindowsSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Это опять я :-))) 02.01.03 17:20  Число просмотров: 2248
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Все есть!
> отдельный пример как позвонить ( конечно с использованием
> ТАПИ)
> и
> отдельный пример использования waveOutWrite и т.д
> (низкоуровневые функции работы со звуком)
> Только никак не соображу как его в линию проиграть?
> Немного бы продолжил! А?
>

Как получить DeviceID для waveOutOpen я написал. Одни из граблей: его надо обязательно открывать с флагом WAVE_MAPPED - это позволяет винде преобразовывать форматы перед выводом в устройство (частоту, битовость и количество каналов). Без этого, если например, твой модем не поддерживает 44100 Гц, 16 бит, Stereo, то попытка открыть такое устройство без WAVE_MAPPED вывалится с ошибкой "Неправильный формат". После этого наделать буферов для вывода, подготовить их (waveOutPrepareHeader()), добавить в очередь для вывода (waveOutWrite()), в колбяке сделать waveUnprepareHeader/wavePrepareHeader (хотя я просто сбрасывал флаг DONE и устанавливал PREPARED и все работало). Заново заполнить буфер и записать. Если есть пример, то я даже зря все это рассказываю. MM подсистема выглядит загадочно только пока не увидишь как реально с ней работать. Если у тебя нет RAW звука для проигрывания - посмотри на mmioOpen/... для работы с WAV-форматом, а про использование функций в том же ddrec-е - тоже все довольно прозрачно
<beginners>
Как же проиграть звук в телеф. линию? 30.12.02 06:06  
Автор: rom30 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Это опять я :-))) 30.12.02 14:36  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Во первых открывать линию (после инициализации и всего остального) нужно c LINEMEDIAMODE_AUTOMATEDVOICE:
// ... lineOpen(hLineApp, dwDeviceID, &hLine, dwAPIVersion, 0, 0, LINECALLPRIVILEGE_NONE, LINEMEDIAMODE_AUTOMATEDVOICE, NULL);
Во-вторых при дозвоне в параметрах указать ту же константу:
// ... lineCallParams.dwMediaMode = LINEMEDIAMODE_AUTOMATEDVOICE; dwCompletionID = lineMakeCall(hLine, &hCall, numba, 0, &lineCallParams);

В-третьих, получить ID wave устройств для ввода/вывода звука:
DWORD DeviceInID, DeviceOutID; // ... lpDeviceID = calloc(sizeof(VARSTRING), 1); lpDeviceID->dwTotalSize = sizeof(VARSTRING); lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, "wave/in"); if (lpDeviceID->dwNeededSize > lpDeviceID->dwTotalSize) { lpDeviceID = realloc(lpDeviceID, lpDeviceID->dwNeededSize); lpDeviceID->dwTotalSize = lpDeviceID->dwNeededSize; lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, "wave/in"); } DeviceInID = *((ULONG *)((char *)lpDeviceID + sizeof(VARSTRING))); lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, "wave/out"); if (lpDeviceID->dwNeededSize > lpDeviceID->dwTotalSize) { lpDeviceID = realloc(lpDeviceID, lpDeviceID->dwNeededSize); lpDeviceID->dwTotalSize = lpDeviceID->dwNeededSize; lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, "wave/out"); } DeviceOutID = *((ULONG *)((char *)lpDeviceID + sizeof(VARSTRING))); free(lpDeviceID);
Вообще-то есть "wave/in/out", но у меня он не работал
Кроме того умнее сделать функцию: GetWaveID(LPCSTR). И вызывать
DeviceInID = GetWaveID("wave/in"); DeviceOutID = GetWaveID("wave/out");
Ну а работа с MM это отдельный разговор. Можешь поискать в MSDN-е (точнее в KB) файлик ddrec (Direct-to-Disk Recorder) - там все очень хорошо проиллюстрировано. Или просто в MSDN-е посмотреть функции waveInXxx, waveOutXxx (начинать с waveInOpen() и waveOutOpen(), которым нужны как раз те IS-шники которые ты получишь у TAPI)
Это опять я :-))) 30.12.02 17:11  
Автор: rom30 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Все есть!
отдельный пример как позвонить ( конечно с использованием ТАПИ)
и
отдельный пример использования waveOutWrite и т.д (низкоуровневые функции работы со звуком)
Только никак не соображу как его в линию проиграть?
Немного бы продолжил! А?


> Во первых открывать линию (после инициализации и всего
> остального) нужно c LINEMEDIAMODE_AUTOMATEDVOICE:
> > // ... > lineOpen(hLineApp, dwDeviceID, &hLine, dwAPIVersion, 0, 0, > LINECALLPRIVILEGE_NONE, LINEMEDIAMODE_AUTOMATEDVOICE, > NULL); >
> Во-вторых при дозвоне в параметрах указать ту же константу:
> > // ... > lineCallParams.dwMediaMode = LINEMEDIAMODE_AUTOMATEDVOICE; > dwCompletionID = lineMakeCall(hLine, &hCall, numba, 0, > &lineCallParams); >
>
> В-третьих, получить ID wave устройств для ввода/вывода
> звука:
> > DWORD DeviceInID, DeviceOutID; > // ... > lpDeviceID = calloc(sizeof(VARSTRING), 1); > lpDeviceID->dwTotalSize = sizeof(VARSTRING); > lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, > "wave/in"); > if (lpDeviceID->dwNeededSize > > lpDeviceID->dwTotalSize) { > lpDeviceID = realloc(lpDeviceID, > lpDeviceID->dwNeededSize); > lpDeviceID->dwTotalSize = > lpDeviceID->dwNeededSize; > lineGetID(0, 0, hCall, LINECALLSELECT_CALL, > lpDeviceID, "wave/in"); > } > DeviceInID = *((ULONG *)((char *)lpDeviceID + > sizeof(VARSTRING))); > > lineGetID(0, 0, hCall, LINECALLSELECT_CALL, lpDeviceID, > "wave/out"); > if (lpDeviceID->dwNeededSize > > lpDeviceID->dwTotalSize) { > lpDeviceID = realloc(lpDeviceID, > lpDeviceID->dwNeededSize); > lpDeviceID->dwTotalSize = > lpDeviceID->dwNeededSize; > lineGetID(0, 0, hCall, LINECALLSELECT_CALL, > lpDeviceID, "wave/out"); > } > DeviceOutID = *((ULONG *)((char *)lpDeviceID + > sizeof(VARSTRING))); > > free(lpDeviceID); >
> Вообще-то есть "wave/in/out", но у меня он не работал
> Кроме того умнее сделать функцию: GetWaveID(LPCSTR). И
> вызывать
> > DeviceInID = GetWaveID("wave/in"); > DeviceOutID = GetWaveID("wave/out"); >
> Ну а работа с MM это отдельный разговор. Можешь поискать в
> MSDN-е (точнее в KB) файлик ddrec (Direct-to-Disk Recorder)
> - там все очень хорошо проиллюстрировано. Или просто в
> MSDN-е посмотреть функции waveInXxx, waveOutXxx (начинать с
> waveInOpen() и waveOutOpen(), которым нужны как раз те
> IS-шники которые ты получишь у TAPI)
Это опять я :-))) 02.01.03 17:20  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Все есть!
> отдельный пример как позвонить ( конечно с использованием
> ТАПИ)
> и
> отдельный пример использования waveOutWrite и т.д
> (низкоуровневые функции работы со звуком)
> Только никак не соображу как его в линию проиграть?
> Немного бы продолжил! А?
>

Как получить DeviceID для waveOutOpen я написал. Одни из граблей: его надо обязательно открывать с флагом WAVE_MAPPED - это позволяет винде преобразовывать форматы перед выводом в устройство (частоту, битовость и количество каналов). Без этого, если например, твой модем не поддерживает 44100 Гц, 16 бит, Stereo, то попытка открыть такое устройство без WAVE_MAPPED вывалится с ошибкой "Неправильный формат". После этого наделать буферов для вывода, подготовить их (waveOutPrepareHeader()), добавить в очередь для вывода (waveOutWrite()), в колбяке сделать waveUnprepareHeader/wavePrepareHeader (хотя я просто сбрасывал флаг DONE и устанавливал PREPARED и все работало). Заново заполнить буфер и записать. Если есть пример, то я даже зря все это рассказываю. MM подсистема выглядит загадочно только пока не увидишь как реально с ней работать. Если у тебя нет RAW звука для проигрывания - посмотри на mmioOpen/... для работы с WAV-форматом, а про использование функций в том же ddrec-е - тоже все довольно прозрачно
Смотря что ты хочешь сделать! 30.12.02 11:21  
Автор: choor Статус: Elderman
<"чистая" ссылка>
Какая твоя задача?
Посмотри пож-та "это опять я" - я изложил там что мне надо 30.12.02 17:15  
Автор: rom30 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach