|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.01.2014, 18:31 | #1 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
Запись WAVE потока из COM порта
Погите плиз как правильно писать данные с COM порта GSM модема:
Код:
|
22.01.2014, 19:36 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...скорее беда в заголовке файла, в описании структуры WAV PCM.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
10.02.2014, 19:16 | #3 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
Это опять я...
Звук из com порта(USB модем) считывается repeat ReadData := AudioPort.Read(Buf, 320); F.WriteBuffer(Buf, ReadData); until CallFinished = True; TxAndWait('AT+CHUP'); но он очень тихий...можно как то увеличить звук PCM файла? |
10.02.2014, 23:13 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Можно. Просто умножайте каждый полученный отсчет на заданный коэффициент. Также следует учитывать возможность ограничения сигнала.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
10.02.2014, 23:53 | #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. |
11.02.2014, 00:01 | #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. |
|
11.02.2014, 18:02 | #7 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
Громкость увеличил.
Но вот другой косячок: repeat ReadData := AudioPort.Read(Buf, 320); F.WriteBuffer(Buf, ReadData); until CallFinished = True; На телефоне показывает что 5 секунд длился разговор, а записалось только 2. Такое подозрение что после входящей команды - "положили трубку", голосовые данные еще содержаться в AudioPort. |
11.02.2014, 18:14 | #8 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
А извиняюсь...заголовок WAVE то я не подправил...
Спасибо товарищи! + по поводу заголовка потом еще спрошу... Последний раз редактировалось qZED; 11.02.2014 в 19:11. |
04.03.2014, 17:29 | #9 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 26
|
Я вернулся с темже грузом
В com порт посылаю wav файл - и тут заморочка, Delay - отрабатывает то больше то меньше...как реализовать правильную подачу данных в com порт GSM модема с задержкой в 20 мс?
Код:
|
04.03.2014, 21: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 |