powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посылка и прослушка звука из com порта
25 сообщений из 29, страница 1 из 2
Посылка и прослушка звука из com порта
    #37607799
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется GSM модем Huawei e173
С помощью АТ-комманд можно с него звонить. Но только одна проблема: ничего не слышно ни мне ни тому кому звоню.
Однако если для звонков использовать программу ( http://files.ksn.name/Mobile_Partner_11.030.01.07.03.exe) то всё нормально слышно.
Специалисты сказали, что нужно ловить звук и передавать через СОМ порт. Номер этого порта известен. Непонятно только с помощью чего этот звук передавать.
Может надо для этого модема ещё и драйвер какой-то дополнительный написать именно для звука?
Или в каком направлении копать?
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37607812
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно звук сначала нужно представить в виде какой-то двоичной последовательности и передать на СОМ порт так же, как и передаются АТ команды?
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37608597
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищи pdf документ от конкретной модели - АТ команды. Думаю, не будешь рад когда уйма времени убьешь почти впустую. Обычный call вызов тот которым ты пользуешься рассчитан на (я так понял) для соединения модем->модем. Могу ошибаться (давно было) При соединении двух телефонов таким способом можно общаться по HyperTerminal. Баловались
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37609511
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то были телефоны Сименс, почти во всех моделях был модем. Хороший модем, с поддержкой факсов и данных. Но такой фичи чтоб "голос через модем" не было. Т.е. если номер через COM порт набираешь, то весь звук по любому через телефон только.
С Huawei не знаком, но допускаю что там "голосовой модем".
Попробуй www.ventafax.ru , если повезет и подберешь Voice Command Set (система голосовых команд модема, единого стандарта фактически нет), то сможешь опробовать, а в лог файле посмотреть что вента делает и какие AT-команды и т.д. посылает и чего принимает.
И как правильно было замечено, нужен справочник по AT-командам модема для именно этой модели.
Но AT-команд мало, надо еще понимать как голос (данные) пакуется-отправляется-принимается-шифруется-дешифруется, coder-encoder итд.
Но, непонятно зачем это нужно, потому что писать подобные вещи ой как нелегко.
Помнится, когда для упомянутого сименса писал прием-передачу СМС, было много энтузазизма тогда, кучу времени потратил, одно шифрование в юникод чего стоило (биты ручками переставлять). Да и то все быстреько загнулось на след. модели сименса (когда смсы стали храниться не только на симке 10шт, но и в телефоне).
А Вы говорите голос...ой...эт имеет смысл если только с головой в это окунуться и спонсор богатый.

Модем, это как бы для отправки fax/data, а для этого есть специализированные программы, и они должны уметь с ним работать. А "голос" если и нужен, то для реализации спецефических фич, например голосовое приветствие перед отправкой факса, рассылка голосовых сообщений, но никак не "говорить через модем" -эт по определению плохая идея.
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37797963
Vitalsva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
donpaulsИмеется GSM модем Huawei e173
С помощью АТ-комманд можно с него звонить. Но только одна проблема: ничего не слышно ни мне ни тому кому звоню.
Однако если для звонков использовать программу ( http://files.ksn.name/Mobile_Partner_11.030.01.07.03.exe) то всё нормально слышно.
Специалисты сказали, что нужно ловить звук и передавать через СОМ порт. Номер этого порта известен. Непонятно только с помощью чего этот звук передавать.
Может надо для этого модема ещё и драйвер какой-то дополнительный написать именно для звука?
Или в каком направлении копать?

Доброго время провождения! Я тоже пытаюсь написать программу для звонков! У тебя как получилось donpauls? Вот нашел интересную статью!

ЧАСТЬ III. ПРИЕМ/ПЕРЕДАЧА ГОЛОСОВЫХ ДАННЫХ



1. Формат GSM:

GSM - это кадровый (фреймовый) формат. Один GSM-фрейм содержит 160 PCM выборок с частотой 8КГц, что составляет 0.02 секунды звучания. Размер одного GSM-фрейма 33 байта. Для использования в модемах каждый GSM-кадр снабжается начальным и конечным словами (маркерами), а также в конец фрейма добавляется один нулевой незначащий байт. Итого один GSM-фрейм имеет размер в 38 байт. Выглядит это следующим образом:
0xB6 0xB6 [0 .. GSM FRAME .. 32] 0x00 0xA5 0xA5
или
0xFE 0xFE [0 .. GSM FRAME .. 32] 0x00 0xA5 0xA5

Кадры, начинающиеся с 0xB6B6 обозначают GSM-фрейм, который содержит голосовые данные, уровень громкости которых ниже порога тишины DSP. 0xB6B6 - это маркер того, что модем определяет тишину. Кадры, которые начинаются с 0xFEFE, содержат речевые данные с нормальным уровнем. Слово 0xA5A5 - означает конец фрейма.

Эти начальные и конечные слова должны обязательно использоваться, для записи и воспроизведения через модем. Они должны быть удалены, если декодирование GSM-кадров необходимо делать программным путем.

В голосовых модемах с протоколом x.2 есть возможность выбирать будут ли GSM-кадры снабжаться маркерами или нет. Это можно указать в регистре S41. Во время передачи голосовых данных, модем сам распознает вид кадров (с маркерами или без них). Во время приема голосовых данных модем передает кадры, тип которых установлен в регистре S41.




2. Прием голосовых данных:

Начало приема голосовых данных следует после ввода команды #VRX в голосовом командном режиме. Чтобы остановить поток данных, необходимо послать в модем любой одиночный символ, например, 0x10. После чего необходимо дочитать из буфера модема, оставшиеся там голосовые данные для формирования полноценного GSM-фрейма. Поток голосовых данных заканчивается кодом <DLE><ETX>.
Если при GSM сжатии голосовых данных случается так, что символ <DLE> является частью GSM-кадра, то модем добавляет за ним еще один символ <DLE>. Т.е. при приеме двух подряд символов <DLE> необходимо один из них выкинуть. Если при приеме голосовых данных модем обнаружит DTMF-тон, сигнал готовности (dialtone), тишину или факсовый вызов, то в общий поток данных вставляется соответствующий <DLE>-код (см. часть II). Для правильного формирования GSM-кадров, необходимо удалить из потока оба символа - символ <DLE> и следующий за ним символ, указывающий на тип обнаруженного сигнала.




3. Передача голосовых данных:

После ввода команды #VTX и получения ответа CONNECT можно передавать в модем голосовые данные на устройство вывода, указанное командой #VLS в соответствующем формате (см. #VSM). Для передачи данных в формате GSM, необходимо сформировать 38-байтовые GSM-кадры (как было указано выше) и передавать их в модем. Если передаваемые данные находятся в PCM-формате (например, обычный WAV-файл), то необходимо с помощью специального кодера перекодировать их в формат GSM.

Для того, чтобы окончить вопроизведение голосовых данных, необходимо послать в модем символьную пару <DLE><ETX>. После чего модем выдаст ответ (VCON) и возвратится в голосовой командный режим.


Просто пробую через терминал отправлять команды не идут!
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37800362
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал когда-то автопрозвонку. Только на c#. Но язык там особого значения не имеет - главное последовательность АТ-команд.
Если интересно, могу выложить.
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37828448
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999 здравствуй. Мне очень интересна твоя тема автопрозвонки. Скинь на С# прогу, посмотрю последовательность АТ команд, надеюсь она у тебя с пояснениями. сам я недалеко продвинулся. при заданном условии у меня делается вызов абонента, а дальше как загнать при снятии трубки WAV файл для меня потемки...
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37830750
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техник55, выкладываю сюда, хоть и на c#. Если модератору не понравится, давай почту, отправлю туда.

В архиве есть голосовой файл tada.raw - для тестирования. Это одна из основных проблем - правильный формат файла. Я его делал с помощью Sound Forge (версию точно не помню, кажется, 10).

И еще одна проблема, правильно подобрать параметры VRN и VRA. Я их устанавливал в 70 и 50 соответственно.

Короче, если что, пиши.
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831000
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, спасибо что откликнулись. Еще не открывал, позже гляну. Хотелось бы узнать про VRN и VRA, что за параметры? и голосовой файл обязательно должен быть RAW, нельзя WAV. Я уже на всякий случай проверил свой модем через програмку Ventafax, все работает, все прозванивается, у абонента играет мелодия. Это радует меня, теперь надо самому написать что-то подобное, надеюсь ваша прога поможет.
Возможно буду писать, консультироваться...
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831052
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRN - интервал (в 1/10 секунды) до поступления первого гудка.
VRA - интервал по истечении которого, если не поступил очередной (после первого) гудок, модем "решает", что на "том" конце сняли трубку.

Wav файл использовать нельзя. Вообще, расширение файла в данном случае - не критерий. Просто я сохранил файл с таким расширением. Этот файл в фармате GSM.

Если еще какие вопросы, обращайтесь. Skype = Teymur.Gasimov.

P.S. Если есть Ventafax, зачем делать свою программу?
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831059
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timur999,
>Если еще какие вопросы, обращайтесь. Skype = Teymur.Gasimov
особенно когда такие познания
>VRN - интервал (в 1/10 секунды) до поступления первого гудка.
>VRA - интервал по истечении которого, если не поступил очередной (после первого) гудок, модем "решает", что на "том" конце сняли трубку.
ОК, замётано!!
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831112
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со скайпом пока не получится, может позже, на работе все заблокировано, ничего не поставишь. Я так понял что ты для GSM модема прогу писал? у мня обычный голосовой модем ZyXel. я думаю команды все равно будут похожи!!!
Почему не оставляю VentaFax, а пишу свою, п.ч. уже много написано на VB6 для контроллера. Смысл в том что как авария будет на контроллере, то должно быть оповещение. Для отправки смс через GSM билайн я уже накарябал прогу, да там легко. Теперь задача была поставлена голос передать через ZyXel... вот так.
Вообще тяжко писать было???
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831151
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не сложно скинь прогу установочную, чтобы твой исходник загрузить. А то только на этом старье ПК имеется VB6 и все...
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831363
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Установочник делать лень. Вот ехе-шка. Работает с .NET2.0.
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831381
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, спасибо попробую
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37831500
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техник55Со скайпом пока не получится, может позже, на работе все заблокировано, ничего не поставишь. Я так понял что ты для GSM модема прогу писал? у мня обычный голосовой модем ZyXel. я думаю команды все равно будут похожи!!!
Почему не оставляю VentaFax, а пишу свою, п.ч. уже много написано на VB6 для контроллера. Смысл в том что как авария будет на контроллере, то должно быть оповещение. Для отправки смс через GSM билайн я уже накарябал прогу, да там легко. Теперь задача была поставлена голос передать через ZyXel... вот так.
Вообще тяжко писать было???

Программу я писал не для GSM, а для обычного dial-up модема (точно уже не помню какого. Какой-то там Robotics).

У модема должна быть поддержка голосового режима (Диагностика, Опросить модем) - напротив AT+FCLASS=? в списке должна быть цифра 8.

Программу написать не тяжело. Сложнее подобрать формат файла и временные интервалы для правильной работы (определение снятия трубки, сигнал "занято" и т.п.)
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37832618
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, у меня точно голосовой модем. Когда я в VentaFax отправляю мелодию у меня в окошечке высвечивается AT+FCLASS=8
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37833238
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, посмотрел ваш исходник и понял, что вы профи, а я так....
У вас там целый программный продукт, что не могу сказать про себя...
Вы будете смеяться вот часть моего кода для отправки смс:

Sub send_message()
Dim comm As New MSComm ' в референсах подключить mscomm32.ocx
If comm.PortOpen = False Then
comm.CommPort = 16 ' номер порта к которому подключен GSM-модем
comm.Settings = "19200,N,8,1"
comm.Handshaking = comNone
comm.InputLen = 0
comm.InBufferSize = 40
comm.OutBufferSize = 40
comm.RThreshold = 0
comm.PortOpen = True
End If
comm.Output = "AT+CMGF=1" & vbCrLf ' Текстовый режим
comm.Output = "AT+CMGS=" & Chr(34) & "+79234920314" & Chr(34) & vbCrLf ' номер телефона (кому)
comm.Output = "повреждение датчика №1" & Chr(26) & vbCrLf ' текст сообщения
comm.PortOpen = False
counter = counter + 1
End Sub
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37833293
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, глаза боятся, а руки делают, начнем:

Sub call_message()
Dim comm As New MSComm ' в референсах подключить mscomm32.ocx
If comm.PortOpen = False Then
comm.CommPort = 1 ' номер порта к которому подключен ZyXel-модем
comm.Settings = "9600,N,8,1" ' задаем параметры
comm.PortOpen = True 'открываем порт
End If
comm.output="AT+FCLASS=8"& vbCrLf ' я так понял переводим в голосовой режим модем
' Далее я так понял задаем временные параметры, про кот. вы мне говорили...
comm.output="AT+VRN=70"& vbCrLf ' время ожидания первого гудка
comm.output="AT+VRA=50"& vbCrLf 'интервал после кот. он решает, что трубку сняли
' Далее делаем вызов
comm.output="ATD2208"& vbCrLf ' вызов абонента с номером 2208

Дальше нужны наверно какие-то условия:
Если VRA=50, тогда посылаем мелодию, иначе comm.output="ATH"& vbCrLf 'завершаем сеанс связи и ....закрываем порт.

это конечно не конец проги, моя сейчас задача что абонент снял трубку и ему проиграла мелодия, остальное позже думать будем!!!

Еще я совсем не понял команды АТ+VSM, AT+VTX, может еще какие упустил????
и еще как отправлять мелодию, какие АТ команды, вроде все пересмотрел у вас а этот момент не нашел. может вы как эту мелодию
преобразуете (кодируете). В общем просветите...
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37833391
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техник55,

Модератор: просьба изучить и использовать http://sql.ru/faq/faq_topic.aspx?fid=202
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37834068
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Техник55,
Первое что бросается в глаза - частота порта. 9600 бод явно слишком мало. Я использую 115200. Это не "потолок", но более высокую частоту АТС может не потянуть. Запустите мою программу и нажмите "Настройки". Насколько я помню, у класса mscomm настройки почти такие же.

У меня цикл обмена начинается с такой процедуры:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
private void Start()
        {
            try
            {
                // Блокировать
                this.Running = true;
                this.EnableRun(false);
                ((MDIParent)this.MdiParent).ShowStatus1("Прозвонка");
                // Установить бегущий ProgressBar
                this.progressBar1.Style = ProgressBarStyle.Marquee;
                // Сброс
                this._stop = false;
                this._listIndex = 0;
                // Открыть порт
                this.serialPort1.Open();
                // остальные команды посылаются из ReceiveData
                this._state = States.ATZ;
                this.SendCommand("ATZ");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Static.AppName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }




Т.е. посылается команда ATZ для инициализации (так сказать, на всякий случай). Далее разбираем ответ от порта:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
#region Прием

        private void ReceiveData()
        {
            if (!this._stop)
            {
                if (this.InvokeRequired)
                {
                    VoidHandler _ReceiveData = new VoidHandler(this.ReceiveData);
                    this.Invoke(_ReceiveData);
                }
                else
                {
                    string response = this.serialPort1.ReadExisting();
                    this.txtLog.Text = response + this.txtLog.Text;
                    switch (this._state)
                    {
                        case States.ATZ:
                            this.ATZ(response);
                            break;
                        case States.AT_FCLASS_8:
                            this.AT_FCLASS_8(response);
                            break;
                        case States.AT_VSM:
                            this.AT_VSM(response);
                            break;
                        case States.AT_VRA:
                            this.AT_VRA(response);
                            break;
                        case States.AT_VRN:
                            this.AT_VRN(response);
                            break;
                        case States.ATDT:
                            this.ATDT(response);
                            break;
                        case States.AT_VTX:
                            this.AT_VTX(response);
                            break;
                        case States.CONNECT:
                            this.CONNECT(response);
                            break;
                        case States.ATH:
                            this.ATH(response);
                            break;
                    }
                }
            }
        }

        #endregion




Т.е. в зависимости от того какую команду отправили (ATZ, AT+FCLASS=8, AT+VSM=128,8000 и т.д.), соответствующая процедура обрабатывает ответ порта (#region AT команды). Вся последовательность команд у меня построена так:

1. ATZ
2. AT+FCLASS=8
3. AT+VSM=128,8000
4. AT+VRA=ххх
5. AT+VRN=ххх
6. ATDTnnnnnnnnn

далее в зависимости от ответа модема (OK или VCON или CONNECT - private void ATDT) отправляем команду AT+VTX или вешаем трубку.

После отправки AT+VTX пересылаем голосовые данные и одновременно разбираем ответ порта. Варианты ответа:
1. DLE+b - абонент повесил трубку
2. OK или VCON - наши данные дошли до цели

Завершаем передачу данных двумя байтами DLE ETX.

Техник55Если VRA=50, тогда посылаем мелодию, иначе comm.output="ATH"& vbCrLf 'завершаем сеанс связи и ....закрываем порт.

Мелодию посылаем после AT+VTX и получения CONNECT или OK (private void AT_VTX).
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37834079
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]
Мелодию посылаем после AT+VTX и получения CONNECT или OK (private void AT_VTX).[/quot]
Ну после какой команды запускать мелодию я понял. А как ее запускать и какую именно и как ее кодировать и какими командами???
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37834094
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#region Голосовые данные

        private void SendData()
        {
            // добавить обработку DLE+ETX
            int length = this._data.Length;
            int offset = 0;
            int BLOCK_SIZE = this.serialPort1.WriteBufferSize;
            int blockSize = BLOCK_SIZE;
            while (!this._stop)
            {
                if ((length - offset) < BLOCK_SIZE)
                {
                    blockSize = length - offset;
                }
                this.serialPort1.Write(this._data, offset, blockSize);
                if (blockSize < BLOCK_SIZE)
                {
                    break;
                }
                else
                {
                    offset += BLOCK_SIZE;
                }
                // Проверить доступность порта из потока
                // по документации обращение к потоку должны быть из потока, в котором он создан
                Application.DoEvents();
            }
            this.SendDLE_ETX();
        }

        private void SendDLE_ETX()
        {
            if (!this._stop)
            {
                this.serialPort1.Write(new byte[] { DLE, ETX }, 0, 2);
            }
        }

        #endregion



Никакого кодирования. Просто байты и все :)
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37834661
Техник55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
timur999, вопросик небольшой. Какой командой проверить занят мой модем или свободен. Для чтобы дальше с ним работать???
...
Рейтинг: 0 / 0
Посылка и прослушка звука из com порта
    #37834936
timur999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что значит "занят"? Другая программа уже использует порт? Тогда Вы его и открыть не сможете наверное.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посылка и прослушка звука из com порта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]