Alex7wrt

Пользователи
  • Публикаций

    447
  • Зарегистрирован

  • Посещение

  • Победитель дней

    16

Alex7wrt стал победителем дня 8 июня

Alex7wrt имел наиболее популярный контент!

Информация о Alex7wrt

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина

Посетители профиля

984 просмотра профиля
  1. Добрый день. Столкнулся со следующей задачей: не получается использовать микрофон под iOS. В документации Apple нашел следующее: ссылка. Судя по этой информации, начиная с iOS 10 нужно выполнять запросы на разрешение использования тех или иных функций. Кто-нибудь знает как добавить запрос на разрешение использования микрофона в iOS? На тестируемом устройстве установлена iOS 11.4. Среда 10.1.2.
  2. Проверьте в Project->Options->User Permissions проставлены ли разрешения на Modify Audio Settings и Record Audio (предполагаю, что после Bass_Init вы пишите Bass_RecordInit, как в моем примере).
  3. Измените в Deployment RemotePath этого файла на assets\internal\
  4. Alex7wrt

    Audio Streaming

    Можно еще поиграться с размером буфера в Bass, который измеряется в миллисекундах и по умолчанию равен 500. Чем он больше, тем меньше вероятность потерь, но больше задержка звука при стримминге.
  5. Alex7wrt

    Audio Streaming

    Может быть. Не могу подтвердить или опровергнуть ваше предположение, но в моем случае передача звука происходит в локальной сети, не в интернете. Через все роутеры, включая точку доступа со смартфона, все работало хорошо, без потерь.
  6. Alex7wrt

    Audio Streaming

    Методом проб и ошибок обнаружил, что для речи запись с частотой дискретизации 16000 выдает практически такое же качество, как и 44100, но ощутимо лучше, чем 8000. При этом используется одноканальная запись (моно), что с учетом 16 бит на семпл дает 32 кБ/с (256 кбит/с), что не сильно нагружает WiFi сеть. Потерь нет (и это в UDP протоколе). Также, одна из причин, почему я не использую сжатие в данном приложении, это телефоны-приемники, которые у нас по большей части старые смартфоны с одноядерным процессорм. А в приложении кроме аудиочата есть и другие нагружающие фичи. Не хочется лишний раз нагружать проц и садить батарею, если и так все норм.
  7. Alex7wrt

    Audio Streaming

    Под Android я тоже делал аудио чат родными средствами, но через Bass получилось лучше и проще. В частности, там буферизация из коробки, можно эффекты накладывать, например усиление голоса при записи через микрофон. Поэтому и предложил, ведь под Bass код, что под Android, что под iOS, один и тот же. Поделиться не сложно. Ниже надергал основную схему из того приложения, о котором говорил выше. uses FMX.Radio.Bass; var BLoaded: boolean; chanPlay, ChanMic: Dword; avail, freq: word; buffer: TIDBytes; procedure TForm1.OnCreate(Sender: TObject); begin //Создаем UDP сервер UDP_Rec:=TIDUDPServer.Create; with UDP_Rec do begin DefaultPort:=UDP_RecPort; BufferSize:=1600; BroadcastEnabled:=true; Active:=true; end; freq:=16000; //Частота дискретизации setlength(buffer,UDP_Rec.BufferSize); BLoaded:=BASS_Init(-1, 44100, 0, nil, nil); //Подключаем библиотеку BASS_RecordInit(-1); //Инициализируем запись end; //Захват звука с микрофона procedure TForm1.Recording(Sender: TObject; const Point: TPointF); begin isrecording:=not isrecording; if isrecording then begin UDP_Rec.OnUDPRead:=nil; chanMic:=BASS_RecordStart(freq, 1, 0, nil, nil); VoiceThread:=TVoiceThread.Create; //Создание потока для отправки по UDP end end; //Передача буффера в потоке procedure TVoiceThread.Execute; begin while isrecording do begin try avail:=BASS_ChannelGetData(chanMic, nil, BASS_DATA_AVAILABLE); if avail>=UDP_Rec.BufferSize then begin //Если в буффере собралось не меньше 1600 байт, отправляем try BASS_ChannelGetData(chanMic, buffer, UDP_Rec.BufferSize); UDP_Rec.Broadcast(Buffer,UDP_RecPort); except end; end; finally sleep(20); end; end; BASS_ChannelStop(chanmic); BASS_StreamFree(chanmic); end; //Создание канала для воспроизведения звука из буффера: procedure TForm1.receiving(Sender: TObject); begin chanPlay:= BASS_StreamCreate(freq, 1, 0, STREAMPROC_PUSH, nil); UDP_Rec.OnUDPRead:=UDP_RecRead; BASS_ChannelPlay(chanPlay, false); end; //Получаем буффер из UDP procedure TForm1.UDP_RecRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin try BASS_StreamPutData(chanPlay, AData,length(AData)) except end; end; Bass.zip
  8. Alex7wrt

    Audio Streaming

    Советую обратить внимание на библиотеку Bass. Буквально на днях решал похожую задачу под Android (аудио чат в пределах локальной сети) с использованием данной библиотеки. Она же доступна и под iOS.
  9. uses VCD: TVideoCaptureDevice; ABitmap: TBitmap; bd: TBitmapData; ----------------------- В событии OnVideoBufferReady добавляете: VCD.SampleBufferToBitmap(ABitmap,true); with ABitmap do begin if Map(TMapAccess.ReadWrite, bd) then try // Здесь делаете преобразования пикселей битмапа с помощью функций bd.GetPixel и bd.SetPixel finally Unmap(bd); end; SaveToFile('Сохраняем ABitmap'); Free; end; end;
  10. А в тех приложениях, где вы видели подобное окно, была информация о том, что личные данные собирает Google для рекламы или же о том, что сам разработчик приложения собирает данные для своих целей?
  11. Alex7wrt

    Не выбирается цвет кнопки

    Кидаете на форму панель, нажимаете на нее правой кнопкой - > Edit Custom Style - > И там в стиле меняете свойство Fill
  12. Спасибо за подробный ответ. Но дело в том, что лично я никаких данных пользователя не собираю. Насколько я понял, данные собирает Google для отображения рекламы в баннере, который есть в приложении. Какие именно данные собирает Google, я тоже не знаю. Поэтому я не понимаю, как реализовать те пункты, которые вы указали. На странице Admob есть ссылка на инструкцию (https://developers.google.com/admob/android/eu-consent) как отобразить диалоговое окно в Android Studio. Но как это сделать в FMX не понятно. И, кстати, также интересует вопрос, что будет, если не выводить диалоговое окно, если ничего не предпринять? Приложение перестанет быть доступным для стран ЕС или последуют какие-нибудь иные ограничения?
  13. Alex7wrt

    Не выбирается цвет кнопки

    Если нужно менять цвет, то выбирайте TRectangle, как выше писали. Он полностью заменяет TPanel + имеет много возможностей по оформлению заливки и рамки, даже углы можно закруглить и т.п.
  14. Спасибо за совет, но ваш второй ответ противоречит первому. Хотелось бы точно знать что к чему с этой штукой.
  15. Хорошо, если так и есть. Но инфа на странице Admob дает повод задуматься: