![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
![]()
Погите плиз как правильно писать данные с COM порта GSM модема:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...скорее беда в заголовке файла, в описании структуры WAV PCM.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
![]()
Это опять я...
Звук из com порта(USB модем) считывается repeat ReadData := AudioPort.Read(Buf, 320); F.WriteBuffer(Buf, ReadData); until CallFinished = True; TxAndWait('AT+CHUP'); но он очень тихий...можно как то увеличить звук PCM файла? |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Можно. Просто умножайте каждый полученный отсчет на заданный коэффициент. Также следует учитывать возможность ограничения сигнала.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 21.01.2012
Сообщений: 240
|
![]()
Беглым взглядом по коду:
Код:
Правильней будет (размер заголовка data-чанка + размер данных + размер заголовка fmt-чанка + размер данных fmt чанка): Код:
4 байта WaveHeader.idRiff := 'RIFF'; 4 байта WaveHeader.RiffLen := DataHeader.DataLen - 8; 4 байта WaveHeader.idWave := 'WAVE'; 4 байта WaveHeader.idFmt := 'fmt '; 4 байта WaveHeader.InfoLen := 16; 2 байта WaveHeader.WaveType := 1; 2 байта WaveHeader.Ch := 1; 4 байта WaveHeader.Freq := 8000; 4 байта WaveHeader.BytesPerSec := 16000; 2 байта WaveHeader.Align := 2; 2 байта WaveHeader.Bits := 16; Последний раз редактировалось blackstrip; 10.02.2014 в 23:57. |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 21.01.2012
Сообщений: 240
|
![]() Цитата:
А если 16-битный WAV-файл записывать, то там уже нулем является $0000 как положено, и можно умножать действительно на коэффициент. А еще лучше имхо для 16-битных, например, использовать массив integer-ов, который перед записью поэлементно рубить до границ от -32768 до 32767, и потом превращать в smallint (двухбайтовые со знаком). P.s. кстати, автор темы, а у вас в вашем потоке точно 16-битный звук идет? Если идет 8-битный, а вы его записываете в 16-битный файл, то у вас получается громкость около 1/256-той от максимальной. Отсюда так тихо. Либо пишите в 8-битный wav, прибавляя к каждому отсчету $80 перед записью. Либо домножьте каждый отсчет вашего звука на $FF (чтоб сделать его максимально громким). p.p.s хотя конечно, если б шел 8-битный, а вы записывали бы его как 16-битный, то все бы сбилось совсем, по два реальных 8-битных отсчета записывались бы в файл как один 16-битный, а скорость воспроизведения такого потока стала бы в 2 раза больше, т.к. за один раз вместо 8-битного отсчета проигрывался бы сразу 16-битный отсчет скомканный из реальных двух 8-битных. Последний раз редактировалось blackstrip; 11.02.2014 в 00:21. |
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
![]()
Громкость увеличил.
Но вот другой косячок: repeat ReadData := AudioPort.Read(Buf, 320); F.WriteBuffer(Buf, ReadData); until CallFinished = True; На телефоне показывает что 5 секунд длился разговор, а записалось только 2. Такое подозрение что после входящей команды - "положили трубку", голосовые данные еще содержаться в AudioPort. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
![]()
А извиняюсь...заголовок WAVE то я не подправил...
Спасибо товарищи! + по поводу заголовка потом еще спрошу... Последний раз редактировалось qZED; 11.02.2014 в 19:11. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
![]()
В com порт посылаю wav файл - и тут заморочка, Delay - отрабатывает то больше то меньше...как реализовать правильную подачу данных в com порт GSM модема с задержкой в 20 мс?
Код:
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
Что до Gettickcount, лучше использовать QueryPerformanceCounter или KeStallExecutionProcessor.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
запись всего потока с dvb карты | aid33443 | Компьютерное железо | 0 | 08.04.2012 01:37 |
Запись звука с микрофон в wave файл | iankov | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 31.05.2011 17:50 |
Запись аудио потока в событие OnBuffer компонента SampleGrabber | Jacobson | Мультимедиа в Delphi | 2 | 01.08.2010 00:22 |
Запись аудио потока в SampleGrabber | Jacobson | Мультимедиа в Delphi | 0 | 21.07.2010 18:57 |
запись из потока в массив | Владимир1988 | Помощь студентам | 2 | 06.02.2010 03:08 |