|
Мобильные модемы для сотовых сетей. 3G/GPRS/EDGE/GSM/HSCSD Программный и аппаратный ремонт модемов (USB, PCMCIA) для различных сотовых сетей (Билайн, Мегафон, МТС, TELE2, Скайлинк и т.д.), работающих в стандарте GSM/HSCSD/GPRS/EDGE/3G- UMTS, CDMA 1X, EV-DO и т.п. |
|
Опции темы | Оценить тему | Опции просмотра |
13.03.2012, 16:59 | #21 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
Работу со звуком я доделаю, у меня это был отдельный проект, только сейчас со временем плохо. Как доберусь, так объединю.
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. |
Следующие пользователи поблагодарили Autumnus за это сообщение: | duser (13.03.2012) |
13.03.2012, 17:19 | #22 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Да Спасибо со звуком вроде справился, записывается в файл и с проигрыванием проблем нет, buf: string; string заменил на AnsiString и все заработало...
Скажите пожалуйста Autumnus, а можно ли записывать PCM данные с микрофона в порт? |
13.03.2012, 18:44 | #23 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
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.CaptureFi lledBuffer; 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; 13.03.2012 в 18:55. Причина: Сообщения , идущие подряд, объединены. |
15.03.2012, 22:04 | #24 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
duser, ну как, помогло?
|
16.03.2012, 12:25 | #25 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Здравствуйте Autumnus...
Спасибо что написали! ... Да как-то со временем у меня не получилось, сегодня завтра посмотрю. И еще много вопросов возникают. 1. Прога записывает в файл без проблем (взято из Вашего кода). Вопрос: Как можно параллельно воспроизвести этот кусок RAW PCM? 2. И еще не успел проанализировать Ваш последний код (с микрофоном...) т.е. записывать PCM данные с микрофона в порт? 3. В Зависимости от условия, записывать данные в файл, в один файл, целиком и звук и данные с микрофона (т.е. тел. разговор...)??? Вот такие вопросы??? Если время будет пишите! С уважением duser... |
16.03.2012, 13:05 | #26 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
1. В аудиоустройство данные записываются так же - потоком. Т.е. буфер записывается в файл и этот же буфер отправляем в аудиоустройство.
2.... 3. Скорее всего данные в порту будут смешиваться. Даже не придется отдельно выводить каждый поток в аудиоустройство. В общем нужно попробовать. А если не будут - то большой проблемы тоже не вижу buf_out[i]:=buf1[i]+buf2[i]; |
16.03.2012, 16:10 | #27 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Спасибо Autumnus, попробую разобраться...
|
17.03.2012, 11:40 | #28 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Да никак не получается с параллельным проигрыванием...
--------------------------------------------------------------------- Здравствуйте 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; Последний раз редактировалось Vasilio; 19.03.2012 в 13:32. Причина: Сообщения, идущие подряд, объединены. |
18.03.2012, 09:03 | #29 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
http://www.delphisources.ru/pages/fa...und_again.html
http://www.delphisources.ru/pages/fa...win32_api.html можно покопаться вот тут а по поводу примера - можно проигрывать данные по 320 байт, это во-первых, а во-вторых, Memory не вижу как связаны Memory и TMemoryStream думаю, лучше всё-таки порциями через waveOutWrite звук выводить |
18.03.2012, 09:30 | #30 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Здравствуйте 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, что-то тормоз получается (не синхронно, с обрывами)... Да верно говорите, надо как-то по другому нужно воспроизвести. Суть ясна, проблема именно в реализации... Спасибо за ссылки... |
18.03.2012, 20:26 | #31 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
Тормозит из-за того, что звук идет маленькими порциями. Можно попробовать двойную буферизацию. Т.е. два массива - из одного проигрывается, а в другой пишется. Думаю здесь это лучше реализовать через потоки.
|
19.03.2012, 10:12 | #32 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Здравствуйте Autumnus
Если Вам Нетрудно!, можете привести код (пример для Нашего случая, т.е. синхронно проигрывался звук с порта.......) ... Спасибо... Последний раз редактировалось duser; 19.03.2012 в 10:23. |
29.03.2012, 17:18 | #33 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
|
30.03.2012, 09:32 | #34 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Здравствуйте Autumnus
Я уже неделю не смотрел, как-то без базовых знаний работы со звуком, не получается, да наверно здесь в большой степени и лень мешает... А Вы можете мне помочь в реализации следующей задачи?... 1. С модемом идет родная программа, там есть весь функционал (звонилка, смс и т.д. ...) 2. Пока что для звонков буду использовать родную программу, мне нужно будет просто захватить разговор и записывать в файл. 3. Когда запускается эта программа, Мы знаем что она блокирует порт HUAWEI Mobile Connect - 3G Application Interface. ВОПРОС. Можно ли параллельно получить доступ к этому порту??? (хотя наверно нет...) 4. Если невозможно получить доступ к этому порту, как записать звук с компьютера, т.е. как понимаю с микшера (звук+микрофон...)??? Вчера скачал компоненты AudioLab, там есть компонент SystemMixer. Никак не могу понять как с этим компонентом можно захватить звук и записывать в файл???... Спасибо С Уважением duser |
30.03.2012, 09:44 | #35 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
Здравствуйте, duser!
Подключиться к порту можно программой Advanced Serial Port Monitor. В своё время она мне здорово помогла разобраться в работе модема. Это сниффер. Можно наглядно смотреть что в порт пишется и что из него читается. Через эту программу так же хорошо видно, как идёт голосовой поток - по 320 байт туда и сюда. Удачи! |
30.03.2012, 09:49 | #36 |
Новичок
Регистрация: 09.03.2012
Сообщений: 12
Поблагодарил: 2
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Спасибо Autumnus!
Вы не подскажите как можно из Delphi подключится к этому порту параллельно, т.е. когда я запускаю родную программу модема, этот порт блокируется... ------------------------------------------------------- Спасибо Autumnus! Advanced Serial Port Monitor то что нужно ... Но Есть ли готовые компоненты, или пример на Delphi, открыть порт в режиме сниффера??? Последний раз редактировалось Vasilio; 31.03.2012 в 17:31. Причина: Сообщения, идущие подряд, объединены. |
25.04.2012, 00:40 | #37 | |
Новичок
Регистрация: 25.04.2012
Сообщений: 3
Поблагодарил: 1
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Цитата:
при записи звукового файла (8000Гц, 16бит, удалил первые 44 байта) в порт, в телефоне только слышен очень короткий шум, а в программе в memo выводится "block is empty 1". |
|
28.04.2012, 00:10 | #38 | |
Новичок
Регистрация: 25.04.2012
Сообщений: 3
Поблагодарил: 1
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Цитата:
|
|
06.05.2012, 16:11 | #39 |
Новичок
Регистрация: 08.03.2012
Сообщений: 15
Поблагодарил: 0
Поблагодарили 4 раз за 4 сообщений
Репа: 0 |
Проблема в том, что нужно подавать данные по счетчику. Т.е. не весь буффер целиком и за раз. А рассчитать сколько блоков в секунду. В исходнике эта проблема решена.
|
06.05.2012, 20:07 | #40 | |
Новичок
Регистрация: 25.04.2012
Сообщений: 3
Поблагодарил: 1
Поблагодарили 0 раз за 0 сообщений
Репа: 0 |
Цитата:
Меня остановила описанная выше проблема и комментарий в исходнике "но это почему-то не работает" в процедуре ApdComPort2TriggerOutbuffFree. Если исходник рабочий, попробую поискать у себя проблему. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DC-Unlocker V1.00.0629 Huawei U8150 IDEOS | DB2020_Logs | DC-Unlocker | 10 | 27.04.2011 22:11 |
Проблема с Huawei E1550 от Киевстар | macciavelli | Мобильные модемы для сотовых сетей. 3G/GPRS/EDGE/GSM/HSCSD | 26 | 20.02.2011 10:28 |
HUAWEI E1550 Киевстар / Firmware 11.608.12.02.174 | Kovgan | Мобильные модемы для сотовых сетей. 3G/GPRS/EDGE/GSM/HSCSD | 45 | 03.05.2010 11:25 |
Разблокировка 3G модемов. Активация голоса в HUAWEI E1550 | shura | Запчасти и оборудование для ремонта телефонов | 4 | 08.01.2010 09:03 |
DC-unlocker client software V1.00.0376 | DB2020_Logs | DC-Unlocker | 4 | 23.12.2009 21:06 |