|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.01.2017, 16:13 | #11 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Я вот и писал в посте #2 что в mp3 не получиться поток снять с микрофона в Bass да и через WaveOut и был удивлен что ты по mp3 поток делаешь с микрофона. Вот ответ от поста #7 по поводу mp3 http://www.programmersforum.ru/showthread.php?t=184813
Поищи использования других кодеков типа G711, GSM вот ссылки на модули сжатия http://lakeofsoft.com/codec/ http://lakeofsoft.com/vc/download.html Бесплатные модули для сжатия звука Freeware версия http://lakeofsoft.com/vc/freeware.html Последний раз редактировалось Aliens_wolfs; 02.01.2017 в 18:32. |
02.01.2017, 20:02 | #12 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Использую Bass снятия звука с микрофона,затем кодирую в mp3 Lame_enc.dll на лету,
и отправляю на сервер сжатый mp3 данные. через Waveout работает если ни чего не делать, свернул или развернул любое окно ,то прерывается на это время звук и иногда вообще пропадает,пока не перезапустишь. сделано все в потоке ,почему то Execute потока прекращает выполняться ,хотя сам поток вроде не закрыт. VC components их давно уже пробовал еще лет 5 назад. да там есть и чат , но я делаю как в scype,когда кто то говорит то у него прыгает progressbar. Спасибо за ответы ,спасибо за помощь что помогаете разобраться. Последний раз редактировалось АНАТОЛИЙ249; 02.01.2017 в 20:10. |
03.01.2017, 14:29 | #13 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Вот тут нашел тоже самое у меня .
http://www.delphisources.ru/forum/sh...ad.php?t=16533 http://www.vr-online.ru/forum/zavisa...areheader-4045 как можно это исправить ? procedure WaveOutProc(HWO: HWAVEOUT; uMsg: UINT; dwInstance, dwParam1, dwParam2: DWORD); stdcall; var iError: Cardinal; FPWavehdr: PWavehdr; begin with TBSTH(dwInstance) do try if (uMsg = WOM_DONE ) then begin FPWavehdr := PWavehdr(dwParam1); iError := WaveOutUnprepareHeader(HWaveOut1^, FPWavehdr, SizeOf(TWaveHdr)); if ierror=0 then begin GlobalUnlock(DWORD(FPWavehdr)); GlobalFree(DWORD(FPWavehdr)); end; end; except on E: Exception do end; end; procedure TBSTH.Open(format:PWaveFormatEx); var waveformat:PWaveFormatEx; maxsizeformat,i:integer; begin if (format<>nil) and (HWaveOut1=nil) then begin acmMetrics(0, ACM_METRIC_MAX_SIZE_FORMAT,MaxSizeF ormat); getmem(WaveFormat, MaxSizeFormat); move(format^,waveformat^,maxsizefor mat); HWaveOut1:=new(PHWaveOut); i := WaveOutOpen(HWaveOut1,0, waveformat, cardinal(@WaveOutProc), Dword(self),CALLBACK_FUNCTION or WAVE_MAPPED); if i<>0 then begin showmessage('Problem creating playing handle' + inttostr(i)); exit; end; end; end; если не использовать процедуру вызова @WaveOutProc , то тогда работает нормально не вываливаеться , но идет утечка памяти ,@WaveOutProc-как я понимаю это убирает отыгранные буферы и освобождает память. i := WaveOutOpen(HWaveOut1,0, waveformat,0{cardinal(@WaveOutProc) }, Dword(self),CALLBACK_FUNCTION or WAVE_MAPPED); как освободить правильно память ,те буферы которые уже не нужны,а просто занимают память. @WaveOutProc-не понятно как и сколько освобождается или все освобождается, освободить хотя бы половину памяти которая занята для проигрывания буферов. которые уже отыграли и освободить память . Спасибо за ответы и помощь. Последний раз редактировалось АНАТОЛИЙ249; 03.01.2017 в 17:30. |
03.01.2017, 18:26 | #14 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
На модулях ACMWaveIn.pas и ACMWaveOut.pas не пробовали?
Вот еще есть мой модуль по WaveOutIn на нем попробуйте сжатие сделать в этом проекте все готово там шаблоны есть по открытию и заполнению wav заголовков, в обратном вызове сжатие делайте, там я написал Последний раз редактировалось Aliens_wolfs; 03.01.2017 в 18:52. |
03.01.2017, 18:54 | #15 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
То что я написал выше это и есть ACMWaveOut.pas с него, оно работает нормально ,только когда сворачиваешь окно или разворачиваешь окно ,то тогда затыкается, эти же проблемы описаны в этой ссылке один в один.
http://www.vr-online.ru/forum/zavisa...areheader-4045 если ни чего не трогать то работает нормально. Попробовал RecMicWave.rar(FunctWave.pas) да работает но идет утечка памяти, потому что в функции waweout не используеться очистка памяти (WaveOutUnPrepareHeader). WaveOutUnPrepareHeader-используеться только в waweIn. Спасибо за помощь. Спасибо за ответы и помощь. Последний раз редактировалось АНАТОЛИЙ249; 03.01.2017 в 19:19. |
03.01.2017, 19:35 | #16 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Сейчас проверил этот проект нет утечки 30 минут работала программа, Очистка буфера там есть вы FunctWave.pas посмотрите в нем все реализованно
Код:
Пример с контролем памяти в Caption Последний раз редактировалось Aliens_wolfs; 03.01.2017 в 19:49. |
03.01.2017, 19:51 | #17 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Не это понятно просто в waweoutplayback
procedure TWaveOut.PlayBack(data: pointer; size: longint); var i:integer; Header:PWaveHdr; msg: TMessage; begin New(Header); FillChar(Header^, SizeOf(TWaveHdr), 0); with Header^ do begin lpNext:= Header; dwbufferlength:= Size; dwbytesrecorded:= size; dwUser:=0; dwflags:=0; dwloops:=0; getmem(lpData, size); FillChar(lpData^, size, 0); move(data^, lpData^, size); end; i:= WaveOutPrepareHeader(FhWaveOut, Header, sizeof(TWaveHdr)); if i <> 0 then begin if Assigned(FOnError) then FOnError(Self, Format('WaveOutPrepareHeader PlayBack error: %d',[i])); msg.Msg:= MM_WOM_DONE; msg.LParam:= Integer(Header); WaveInCallback(msg); Exit; end; i:= WaveOutWrite(FhWaveOut, Header, sizeof(TWaveHdr)); if i <> 0 then begin if Assigned(FOnError) then FOnError(Self, Format('WaveOutWrite PlayBack error: %d',[i])); msg.Msg:= MM_WOM_DONE; msg.LParam:= Integer(Header); WaveInCallback(msg); end; FPlay:= true; end; переменная I=0 всегда поэтому не заходит то что выделено жирным шрифтом. Просто я не могу понять ,почему при сворачивании или разворачивании другого окна ,любого не в программе ,затыкаться звук. несколько раз развернешь свернешь и вообще прекращается, проверил не работает именно waweout. Cпасибо за помощь. |
03.01.2017, 19:55 | #18 | |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
А как в используете этот компонент AcmWave на форму его кидаете или создаете?
Цитата:
можно было конечно назвать nErr У меня AcmWave работает даже при сворачивании вот пример Последний раз редактировалось Aliens_wolfs; 03.01.2017 в 20:15. |
|
03.01.2017, 20:20 | #19 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Я его создаю,и какой нужен размер буфера нужно отправлять в waweout ,4096 или 8192, для нормальной работы ?
и как вложить сюда файлы ? Спасибо за отвеьты и помощь. |
03.01.2017, 20:24 | #20 | |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Что бы выложить сюда файлы то где вы пишите ответы есть кнопочка расширеный режим, расшириться ваше окно ниже будет кнопка управление приложениями, нажмете ее откроется окно там увидите загрузку вложений и все
Цитата:
Еще бы посмотреть ваш код по сжатию в mp3 и разжатию тогда мог бы у себя поэкспериментироватью Для сжатия в mp3 я использовал код Lame_dll.pas а для разжатия я не нашел код Последний раз редактировалось Aliens_wolfs; 03.01.2017 в 20:34. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[РЕШЕНО] bass.dll, Программа получает мп3 файл с сервера и воспроизводит его, как его сохранить в файл? | NEoMASTERR | Общие вопросы Delphi | 0 | 25.01.2016 11:30 |
BASS.DLL и захват потока. | Twister901 | Visual C++ | 1 | 15.01.2013 10:54 |
Bass.dll не воспроизводит m3u | demiancz | Мультимедиа в Delphi | 19 | 30.10.2012 08:46 |
bass.dll Скорость мать его потока... | Дворник | Мультимедиа в Delphi | 5 | 24.08.2010 09:37 |
микшер на два потока в проигрывателе музыки. проигрыватель сделан на основе библиотеки Bass.dll | D-fens | Мультимедиа в Delphi | 4 | 08.06.2007 20:36 |