информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителяСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Смотря что ты хочешь сделать! 30.12.02 11:21  Число просмотров: 1944
Автор: choor Статус: Elderman
<"чистая" ссылка>
Какая твоя задача?
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach