Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 16:17   #11
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Raxp, спасибо вам, вы правы! Часть, которую вы веделили действительно прерывает все. Но я попробывал без неё сделать, и вылетела таже самая ошибка. Исправил немного код, который отвечает за начало считывания на следующий:
Код:
waveInOpen(addr(WaveIn),hwi,Addr(WaveFormat),MainForm.Handle,0,CALLBACK_WINDOW);
BufferSize:=WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
hbuf:=GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, BufferSize);
WaveHdr.lpData:=@hbuf;
WaveHdr.dwBufferLength:=BufferSize;
WaveHdr.dwFlags:=WHDR_BEGINLOOP;
waveInPrepareHeader(WaveIn,@WaveHdr,Sizeof(WaveHdr));
waveInAddBuffer(WaveIn,@WaveHdr,Sizeof(WaveHdr));
GetMem(p, BufferSize * sizeof(TPoint));
waveInStart(WaveIn);
И переменную WaveIn описал как hWaveIn
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 07.04.2010, 16:37   #12
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- "без нее сделать" - оно таки нужно, когда вы завершаете
2- вместо hwi -> WAVE_MAPPER
3- "WAVE_FORMAT_4S16" - я-бы не экспериментировал с этим, не у всех аудио может поддерживать... а вот _PCM это де-факто
4- "dwFlags" вообще не трогаю, по-умолчанию оставляю
5- "GetMem(p, BufferSize * sizeof(TPoint));" - это атавизм, оставшийся от отображения, лишнее
6- взгляните еще раз на код http://pblog.ru/?p=658 между комментариями "// получение аудиоданных и построение спектра" и "// СОБЫТИЯ КОМПОНЕНТА" и использование двух буферов для накопления и вывода.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.04.2010, 16:56   #13
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Просмотрев очередной раз (наверное уже 3-й) вашу статью, сделал кое-какие выводы, плюс ещё больше стал понимать, что пишу А это уже радует. И хочу спросить теперь вот что: наш буфер-то не резиновый верно? Как только он заполнится, должно выскочить сообщение об этом, если ошибка обработана, а если нет, то сам код ошибки должен появиться так? Или нет? Потому, что я свою прогу проверял, болтал в микрофон минуту, хотя буфер на столько не рассчитан (или рассчитан?) и ничего не появлялось.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 07.04.2010, 17:03   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- на вкладке микшера микрофон-то включен, в смысле в других программах аудиозаписи отображается то, что вы говорите?
2- для теста, попробуйте поболтать сюда (см. вложение)
Вложения
Тип файла: zip osd.zip (175.2 Кб, 53 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.04.2010, 17:07   #15
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Объясните пожалуйста вот эту строчку кода:
Код:
WaveData1:=PChar(GlobalAlloc(GMEM_FIXED or GMEM_NOCOMPACT or GMEM_NODISCARD,WaveDataLength));
Читая про это в интернете, мне очень тяжело понять, и я ничего не понял про эти флаги... Что конкретно делает эта функция?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 08.04.2010 в 14:07.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 08.04.2010, 15:28   #16
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

И ещё один довольно простой вопрос... Как можно маниторить количество свободных, ещё не записанных бит или байт в буффере для звука? Вот мой код, но он работает не так как надо, нужно чтобы Edit2 отображал меняющееся число бит буффера, как это сделать?
Код:
Код кнопки 1, где запускается запись звука:
...................
Edit1.Text:='длина буфера= '+inttostr(WaveDataLength)+' бит';
Edit2.Text:='количество оставшихся бит= '+inttostr(WaveDataLength-WaveHdr1.dwBytesRecorded); - вот это нужно мониторить
....................
Код кнопки 2, которая закрывает запись в буфер
Edit2.Text:='количество оставшихся бит= '+inttostr(WaveDataLength-WaveHdr1.dwBytesRecorded);
То есть, тем самым я хочу как-бы прервать запись если все биты будут записаны, и уже полученные данные из буффера передать через UDPClient на UDPSocket;
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 08.04.2010 в 15:31.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 08.04.2010, 15:34   #17
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...по флагам, по выделению памяти

...и все-же, почему вы не хотите перейти на использование двух буферов
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.04.2010, 15:35   #18
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я дойду до этого... Но постепенно. А можете заодно рассказать, какие преимущества двух буфферов?
P.S. Я был на том сайте, куда вы меня отправили "за флагами", я там ничего не понимаю к сожалению, не моглибы вы объяснить? По флагам вопрос исчерпан!
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 08.04.2010 в 15:40.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 08.04.2010, 15:36   #19
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...скорость.

...тута были (простейший пример)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.04.2010 в 15:39.
raxp вне форума Ответить с цитированием
Старый 08.04.2010, 15:42   #20
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Примеры я эти находил, а вот как мониторить у вас нет идей? Я думаю попробывать использовать поток...
P.S. ещё чуть-чуть и я разгадаю эту тайну звука
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 08.04.2010 в 15:45.
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WEB - программист. Временный сотрудник - работа дому. Julia G Фриланс 2 23.03.2010 21:45
Как найти временный файл bakabul JavaScript, Ajax 1 01.11.2008 09:44
Временный проект по DirectX (Москва) _HR Фриланс 1 19.02.2008 13:14
Запись в буфер Delphi & Asm SteelRat Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 27.02.2007 22:49