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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Это опять я :-))) 30.12.02 17:11  Число просмотров: 2083
Автор: 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)
<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