Просмотр полной версии : Получение голоса с Huawei E1550 сторонними программами
Raiv_ixx
03.09.2010, 15:55
Ситуация:
У меня есть E1550 от мтс, в родной программе звонки работают, всё разлочено.
Мне требуется написать софт на С++, который бы работал со звонками аналогично софту от МТС. С терминала команда ATD принимается, но звука нет. В программе от МТС всё работает.
Кто знает, где отловить звук, и в каком он идет формате?
iganshan
03.09.2010, 16:11
Ситуация:
У меня есть E1550 от мтс, в родной программе звонки работают, всё разлочено.
Мне требуется написать софт на С++, который бы работал со звонками аналогично софту от МТС. С терминала команда ATD принимается, но звука нет. В программе от МТС всё работает.
Кто знает, где отловить звук, и в каком он идет формате?
подобную проблему (пулл из 20 модемов E1550) знакомый решил с помощью http://www.asterisk.org/
Работает только на линухе.
Raiv_ixx
03.09.2010, 16:22
У меня ограничение WinXP-Vista-7:(
iganshan
03.09.2010, 18:49
Ситуация:
С терминала команда ATD принимается, но звука нет. В программе от МТС всё работает.
Ставьте снифер ком порта и смотрите обмен модема со сьютой в момент дозвона.
p.s. попробуйте atd; (добавить точку с запятой, без неё модем считает что идёт обмен данными, если я ничего не путаю)
Raiv_ixx
06.09.2010, 10:43
Да, идея со снифером хорошая.
Ща попробую:)
Raiv_ixx
07.09.2010, 12:54
Так... по результатам пробования снифферов.
попробовал два:
HDD free serial port monitor - перестает работать после первых пары пакетов.
Com port toolkit - вообще не работает:(
Ктонибудь посоветует нормальный сниффер для WinXP?
BurlakovSG
08.10.2010, 12:29
Голос идёт по другому порту (HUAWEI Mobile Connect - 3G Application Interface) и активируется командой AT^DDSETEX=2 после команды ATD. Звук передаётся в формате PCM.
Для прослушивания СОМ портов я использовал программу portmon.
Голос идёт по другому порту (HUAWEI Mobile Connect - 3G Application Interface) и активируется командой AT^DDSETEX=2 после команды ATD. Звук передаётся в формате PCM.
Для прослушивания СОМ портов я использовал программу portmon.
Пишу аналогичную программу на delphi. Какова частота дискретизации и битовое разрешение выборки?
Raiv_ixx
23.09.2011, 23:02
Пишу аналогичную программу на delphi. Какова частота дискретизации и битовое разрешение выборки?
канал моно, частота 8000, размер 16 бит, сэмплы знаковые.
канал моно, частота 8000, размер 16 бит, сэмплы знаковые.
Срасибо огромное, буду пробовать. Нет случайно примера на любом языке программирования по работе с портом звука для E1550? И еще вопрос. Как узнать в программе какие COM-порты соответствуют модему? COM-порт, в который посылаются AT команды найти не проблема, просто шлем туда AT и ждем ответа OK. А как определить порт, по которому идет звук?
Raiv_ixx
25.09.2011, 00:25
Срасибо огромное, буду пробовать. Нет случайно примера на любом языке программирования по работе с портом звука для E1550?
Есть но на работе. могу потом кинуть. там RAW PCM. читаешь его байтами и пишешь... 160 байт по-моему размер пакета, или 320, не помню точно.
исходящий звук: кодировщик в рсм-> выходные данные - пишешь в порт
входящий звук - читаешь с порта -> гонишь в декодировщик
проигрывание raw pcm в дельфях гугли - я с дельфями такого не делал) По идее должно работать через DirectSound.
И еще вопрос. Как узнать в программе какие COM-порты соответствуют модему? COM-порт, в который посылаются AT команды найти не проблема, просто шлем туда AT и ждем ответа OK. А как определить порт, по которому идет звук?
Ищи в установленных драйверах драйвер с именем "HUAWEI Mobile Connect - 3G Application Interface", у него пропертя "порт" - там ком-порт звука. На си для этого используется набор функций вида "SetupDi..." из Windows DDK. Возможно их както удастся тебе проэкспортить, см. например тут (http://www.rsdn.ru/forum/delphi/451928.all.aspx).
Есть но на работе. могу потом кинуть. там RAW PCM. читаешь его байтами и пишешь... 160 байт по-моему размер пакета, или 320, не помню точно.
Не могли бы Вы кинуть при случае? Чтобы уже окончательно во всем разобраться. Заранее спасибо!
Raiv_ixx, подкинешь сорцы?
Autumnus
08.03.2012, 23:35
Размер пакета 320 байт. У кого-то получилось читать и писать голос?
Тоже сижу с аналогичной ситуацией.
--------------------------------------------------------------
Сделал чтение звуковых данных и их запись в файл
а вот когда из этого файла передаю данные обратно в порт, то слышны какие-то отрывки, такое ощущение, что воспринимаются только куски.
http://depositfiles точка ком files/9djo6h3z
исходник
Здравствуйте Autumnus...
А как Вы это сделали? Можете исходником поделиться?!
Ваша ссылка на депозитфайлс не активна.
Спасибо
С Уважением duser
------------------------------------------------
Добавлено позже:
Пишет: Либо файл не существует или была удалена из-за нарушения авторских прав.
Autumnus
09.03.2012, 14:04
ввв getzilla точка нэт /files/3057162/gsm.rar.html
ps как тут ссылки нормально выкладывать без звездочек?
Если время будет, можете более подробно описать исходный код...
Autumnus
10.03.2012, 20:13
гетзилла.нэт
files/3068525/gsm.rar.html
реализовано проигрывание звука из файла в аудиопорт и запись аудио из порта в wav файл. снабдил исходник некоторыми комментариями и добавил отсылку и получение смс. будут вопросы отвечу.
Код писался в Delphi 5 с компонентом ApdComPort из AsyncPro 4.07.
Здравствуйте Autumnus...
Если у Вас что-то доработано пожалуйста дайте ссылку...
Мучаюсь разработкой проги, которая должна как минимум повторять функционал MTS Connect (особенно голосовые звонки, через наушники, микрофон...)(даа, круто сказано...) :)
Или может нужно пользоваться вот этими компонентами, как Вы думаете "Как превратить «сырое» аудио в файл wav (или другой формат)?" ссылка http://symmetrica.net/audio/newac-tech.htm
С Уважением duser
И ёще код в Вашем исходнике, которой создает wav файл, у меня не проигрывается, даже не открывается проигрывателем? В чем может быть дело??? :confused:
Autumnus
13.03.2012, 16:59
Работу со звуком я доделаю, у меня это был отдельный проект, только сейчас со временем плохо. Как доберусь, так объединю.
Wav файл состоит из заголовка 44 байт + данные:
52 49 46 46 xx xx xx xx 57 41 56 45 66 6D 74 20
10 00 00 00 01 00 01 00 40 1F 00 00 80 3E 00 00
02 00 10 00 64 61 74 61 yy yy yy yy .. данные ..
это стандартный заголовок для наших нужд, меняться будут лишь x и y, при этом, y= размер данных в байтах, а x=y-8. Проверьте, верно ли сформирован заголовок.
Или так, y=размер файла-44.
Да Спасибо со звуком вроде справился, записывается в файл и с проигрыванием проблем нет, buf: string; string заменил на AnsiString и все заработало...
Скажите пожалуйста Autumnus, а можно ли записывать PCM данные с микрофона в порт?
Autumnus
13.03.2012, 18:44
C микрофона звук идет по такому же принципу, как и через порт. В данном случае необходимо настроить микрофон на тот же формат и брать буфер равным 320 байт, при заполнении которого пересылать данные в порт. Если память не изменяет, для получения звука я использовал компонент из DelphiX. Хотя могу и наврать )
Постараюсь найти время и глянуть.
------------------------------------------------
Добавлено позже:
Наврал ))
Это куски кода, которые осуществляют получение звукового потока из микрофона (ну или другого выбранного устройства в микшере)
WavBufLen=10;
FCapture: TSoundCaptureStream;
FWaveStream: TWaveStream;
ShellMW.FWaveStream := TWaveFileStream.Create(ShellMW.LastFile, fmCreate);
with ShellMW.FCapture.SupportedFormats[SoundFormatIndex] do ShellMW.FWaveStream.SetPCMFormat(SamplesPerSec, BitsPerSample, Channels); //здесь задаются параметры входного сигнала
ShellMW.FWaveStream.Open(true);
ShellMW.FCapture.BufferLength:=WavBufLen;
ShellMW.FCapture.OnFilledBuffer:=ShellMW.CaptureFilledBuffer;
ShellMW.FCapture.CaptureFormat:=SoundFormatIndex;
ShellMW.FCapture.Start;
procedure TShellMW.CaptureFilledBuffer(Sender: TObject);
var
work_buffer: array [0..999] of byte;
i: integer;
begin
Fcapture.Read(work_buffer, 200);
end;
процедура CaptureFilledBuffer срабатывает каждый раз при заполнении буфера
наводку дал, пока много времени нет, когда напишу то выложу ;)
Autumnus
15.03.2012, 22:04
duser, ну как, помогло?
Здравствуйте Autumnus...
Спасибо что написали!
... Да как-то со временем у меня не получилось, сегодня завтра посмотрю. И еще много вопросов возникают. :confused:
1. Прога записывает в файл без проблем (взято из Вашего кода).
Вопрос: Как можно параллельно воспроизвести этот кусок RAW PCM?
2. И еще не успел проанализировать Ваш последний код (с микрофоном...) т.е. записывать PCM данные с микрофона в порт?
3. В Зависимости от условия, записывать данные в файл, в один файл, целиком и звук и данные с микрофона (т.е. тел. разговор...)???
Вот такие вопросы??? Если время будет пишите!
С уважением duser...
Autumnus
16.03.2012, 13:05
1. В аудиоустройство данные записываются так же - потоком. Т.е. буфер записывается в файл и этот же буфер отправляем в аудиоустройство.
2....
3. Скорее всего данные в порту будут смешиваться. Даже не придется отдельно выводить каждый поток в аудиоустройство. В общем нужно попробовать. А если не будут - то большой проблемы тоже не вижу buf_out[i]:=buf1[i]+buf2[i];
Спасибо Autumnus, попробую разобраться...
Да никак не получается с параллельным проигрыванием... :confused::confused:
---------------------------------------------------------------------
Здравствуйте Autumnus...
Вроде бы этот код должен воспроизвести RAW PCM из буфера..., или я не правильно делаю???
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
...
bufStream := 'RIFF WAVEfmt '+#$10+#0+#0+#0+#01+#0+#01+#0+#$40+#$1F+#0+#0+#$80+#$3E+#0+#0+#02+#0+#$10+#0+'data ';
ApdComPort1.GetBlock(buf, Count);
with TMemoryStream.Create do begin
try
SetSize(44 + Count);
Seek(0, soFromBeginning);
WriteBuffer(bufStream[1], 44);
Seek(44, soFromBeginning);
WriteBuffer(buf, Count);
Seek(4, soFromBeginning);
dk:=Count-8;
WriteBuffer(dk, 4);
Seek(40, soFromBeginning);
WriteBuffer(Count, 4);
Seek(0, soFromBeginning);
PlaySound(Memory, 0, SND_MEMORY or SND_SYNC);
finally
Free;
end;
end;
...
end;
Autumnus
18.03.2012, 09:03
http://www.delphisources.ru/pages/faq/base/about_sound_again.html
http://www.delphisources.ru/pages/faq/base/waveform_audio_win32_api.html
можно покопаться вот тут
а по поводу примера - можно проигрывать данные по 320 байт, это во-первых, а во-вторых, Memory не вижу как связаны Memory и TMemoryStream
думаю, лучше всё-таки порциями через waveOutWrite звук выводить
Здравствуйте Autumnus
На счет Memory (с помощью with)...
with TMemoryStream.Create do begin
PlaySound(Memory, 0, SND_MEMORY or SND_SYNC);
end;
или
OutStream = TMemoryStream.Create;
PlaySound(OutStream.Memory, 0, SND_MEMORY or SND_SYNC);
...
В отдельные потоки передаю stream, что-то тормоз получается (не синхронно, с обрывами)...
Да верно говорите, надо как-то по другому нужно воспроизвести.
Суть ясна, проблема именно в реализации... :confused:
Спасибо за ссылки...
Autumnus
18.03.2012, 20:26
Тормозит из-за того, что звук идет маленькими порциями. Можно попробовать двойную буферизацию. Т.е. два массива - из одного проигрывается, а в другой пишется. Думаю здесь это лучше реализовать через потоки.
Здравствуйте Autumnus
Если Вам Нетрудно!, можете привести код (пример для Нашего случая, т.е. синхронно проигрывался звук с порта.......)
:confused:
...
Спасибо...
Autumnus
29.03.2012, 17:18
Здравствуйте Autumnus
Если Вам Нетрудно!, можете привести код (пример для Нашего случая, т.е. синхронно проигрывался звук с порта.......)
:confused:
...
Спасибо...
Пока сам еще этим не занимался.
Как успехи, что-то получилось?
Здравствуйте Autumnus
Я уже неделю не смотрел, как-то без базовых знаний работы со звуком, не получается, да наверно здесь в большой степени и лень мешает...
А Вы можете мне помочь в реализации следующей задачи?...
1. С модемом идет родная программа, там есть весь функционал (звонилка, смс и т.д. ...)
2. Пока что для звонков буду использовать родную программу, мне нужно будет просто захватить разговор и записывать в файл.
3. Когда запускается эта программа, Мы знаем что она блокирует порт HUAWEI Mobile Connect - 3G Application Interface. ВОПРОС. Можно ли параллельно получить доступ к этому порту??? (хотя наверно нет...)
4. Если невозможно получить доступ к этому порту, как записать звук с компьютера, т.е. как понимаю с микшера (звук+микрофон...)???
Вчера скачал компоненты AudioLab, там есть компонент SystemMixer. Никак не могу понять как с этим компонентом можно захватить звук и записывать в файл???...
Спасибо
С Уважением duser
Autumnus
30.03.2012, 09:44
Здравствуйте, duser!
Подключиться к порту можно программой Advanced Serial Port Monitor. В своё время она мне здорово помогла разобраться в работе модема. Это сниффер. Можно наглядно смотреть что в порт пишется и что из него читается. Через эту программу так же хорошо видно, как идёт голосовой поток - по 320 байт туда и сюда.
Удачи!
Спасибо Autumnus!
Вы не подскажите как можно из Delphi подключится к этому порту параллельно, т.е. когда я запускаю родную программу модема, этот порт блокируется...
-------------------------------------------------------
Спасибо Autumnus!
Advanced Serial Port Monitor то что нужно ... Но
Есть ли готовые компоненты, или пример на Delphi, открыть порт в режиме сниффера???
гетзилла.нэт
files/3068525/gsm.rar.html
реализовано проигрывание звука из файла в аудиопорт и запись аудио из порта в wav файл. снабдил исходник некоторыми комментариями и добавил отсылку и получение смс. будут вопросы отвечу.
Код писался в Delphi 5 с компонентом ApdComPort из AsyncPro 4.07.
Пожалуйста, помогите со следующим вопросом по данной программе:
при записи звукового файла (8000Гц, 16бит, удалил первые 44 байта) в порт, в телефоне только слышен очень короткий шум, а в программе в memo выводится "block is empty 1".
гетзилла.нэт
files/3068525/gsm.rar.html
реализовано проигрывание звука из файла в аудиопорт и запись аудио из порта в wav файл. снабдил исходник некоторыми комментариями и добавил отсылку и получение смс. будут вопросы отвечу.
Код писался в Delphi 5 с компонентом ApdComPort из AsyncPro 4.07.
Получилось у кого-то проигрывание звука в аудиопорт?
Autumnus
06.05.2012, 16:11
Проблема в том, что нужно подавать данные по счетчику. Т.е. не весь буффер целиком и за раз. А рассчитать сколько блоков в секунду. В исходнике эта проблема решена.
Проблема в том, что нужно подавать данные по счетчику. Т.е. не весь буффер целиком и за раз. А рассчитать сколько блоков в секунду. В исходнике эта проблема решена.
За исходники огромное спасибо!
Меня остановила описанная выше проблема и комментарий в исходнике "но это почему-то не работает" в процедуре ApdComPort2TriggerOutbuffFree.
Если исходник рабочий, попробую поискать у себя проблему.
Благодарю за исходники.
При попытке приёма возникает ошибка переполнения стека.
Как организовать синхронную запись\чтение в порт?
Autumnus
09.07.2012, 13:29
Долго не мог зайти. Почему-то в IE страница до конца не открывалась. Только шапочка. С файерфокса всё теперь открылось нормально.
Исходники я выкладывал, если ссылки битые, то перезалью. Проблему отправки голоса можно решить отправляя буфера по таймеру в порт. Размер буфера должен быть 320 байт.
Кто может помочь с проблемой передачи данных к com порт модема! Хотя бы ссылки дайте!
Это известно: для Huawei звук идет в порт HUAWEI Mobile Connect - 3G Application Interface, после того как скажешь ему AT^DDSETEX=2.
Звук идет по порту в формате PCM 8000fps 16бит signed.
А вот как получить данные с com порта и вывести на компьютор (колонки) и как взять с микрофона звук порциями по 320 байт и передовать в com порт модема?
Если есть пример с описанием вообще хорошо!
Vituskosoy
13.09.2012, 08:10
VitSVA, научись сперва сохранять и воспроизводить wav-файл с помощью waveIn/waveOut-функций (примеров полно), а потом уже легко привяжеш к модему.
А готовый отшлифованый пример врядли кто-то выложит, пока такие программы используются в комерческих целях. Сам помучишся и посмотрим, выложиш ли ты...
Если хочеш, можеш поковырять в Asterisk модуль chan_dongle, там есть все, открытые коды, но под линух.
Eryoma85
13.11.2013, 04:49
Здравствуйте уважаемые форумчане!
Решил написать программу как у МТС - естественно с своим дизайном и функционалом. Как это сделать пока не пойму (в части передачи звука из микрофона или аудиофайла - например автоответчик). ссылки на примеры которые здесь выложены уже мертвые. Может кто-нибудь поможет примером или советом.... буду очень признателен.
Autumnus
21.12.2013, 11:10
Исходники
http://kronosa.ru/gsm.rar
Autumnus
03.09.2014, 08:32
Доброе время суток!
Исходником не занимался всё это время. Времени нет. Насколько я помню, возможно, wav пишется без заголовка. Заголовок у файла не такой уж и сложный, можно посмотреть описание и сам файл в шестнадцатиричном виде и сорентироваться.
Файл перезалил, доступен http://kronosa.ru/gsm.rar
По преобразованию сырого аудио в вав-файл могу сказать, что нужно добавить только заголовок. Но это будет не сжатый PCM.
pochekutov
26.02.2016, 09:00
Доброе время суток!
Исходником не занимался всё это время.
Актуально. Выложи, пожалуйста, исходники. Ссылка kronosa.ru/gsm.rar не работает.
vBulletinВ®, Jelsoft Enterprises Ltd. Translate: zCarot