#delphi #audio
#delphi #Аудио
Вопрос:
Я создаю проект для создания мультизвукового чата с помощью компонентов Indy и компонентов wave audio, но я застрял с ошибкой. Это простой код, но я не знаю, как это исправить.
sendtocl — это клиент, который я использую
procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer;
BufferSize: Cardinal; var FreeIt: Boolean);
begin
Freeit :=True;
sendtocl.SendBuffer(Buffer^, Buffersize);
end;
Я получил эту ошибку при компиляции
Не существует перегруженной версии ‘SendBuffer’, которую можно вызвать с этими аргументами
какие-либо предлагаемые исправления?
» sentocl» — это мой indyudpclient
procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer; BufferSize: Cardinal; var FreeIt: Boolean);
begin
Freeit := True;
sendtocl.SendBuffer(RawToBytes(Buffer^, Buffersize));
end;
Этот исправленный код от Remy lebeau устраняет ошибку компиляции, но когда я пытаюсь отправить аудио, текст получает огромные данные, а другой клиент в сети не слышит звука. я думаю, что-то в onread с indy server компонент, который я использую :
Wave audio, сервер и клиент indy udp,,, с использованием delphi xe5
Remy могу ли я отправить аудиопоток через клиент indyudp? образец в wave audio предназначен для winsock, но я действительно потерял, как это сделать с помощью indy, можете ли вы дать мне ссылку на это
Комментарии:
1. Я предполагаю, что вы откуда-то взяли свой код, и этот код был взят из другой версии Indy, отличной от используемой вами.
2. Да, у меня есть предложение. Посмотрите на исходный код (который поставляется со всеми версиями Indy, которые когда-либо распространялись с Delphi) и выясните, для чего нужны правильные типы параметров
SendBuffer
, а затем исправьте код так, чтобы он использовал правильные типы. Поскольку вы не указали, какие версии Delphi и Indy вы используете, и даже не указали, что это за классsentocl
, невозможно быть более конкретным. («sendtocl — это клиент, который я использую», не указывает тип класса этого «клиента».)
Ответ №1:
Если вы посмотрите на объявление SendBuffer()
, оно ожидает a TIdBytes
в качестве входных данных. Для этого вы можете использовать RawToBytes()
функцию Инди:
procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer; BufferSize: Cardinal; var FreeIt: Boolean);
begin
Freeit := True;
sendtocl.SendBuffer(RawToBytes(Buffer^, Buffersize));
end;