Перейти к содержанию
Fire Monkey от А до Я

Лидеры

  1. Alex7wrt

    Alex7wrt

    Пользователи


    • Баллы

      6

    • Постов

      508


  2. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      3

    • Постов

      2 517


  3. rareMax

    rareMax

    Пользователи


    • Баллы

      2

    • Постов

      553


  4. gonzales

    gonzales

    Пользователи


    • Баллы

      2

    • Постов

      334


Популярный контент

Показан контент с высокой репутацией 08.06.2018 во всех областях

  1. 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
    4 балла
  2. {$ZEROBASEDSTRING ON} и работай с учётом что строка с 0 начинается. Либо юзай хелперы
    2 балла
  3. gonzales

    Пуши в IOS

    Все правильно, так и работает. При публикации в аппсторе sandbox (песочница) надо снять
    2 балла
  4. krapotkin

    Пуши в IOS

    конечно. мы же читаем json пуша в программе самостоятельно соответственно, можем разобрать и делать что-нибудь свое
    1 балл
  5. Alex7wrt

    Audio Streaming

    Методом проб и ошибок обнаружил, что для речи запись с частотой дискретизации 16000 выдает практически такое же качество, как и 44100, но ощутимо лучше, чем 8000. При этом используется одноканальная запись (моно), что с учетом 16 бит на семпл дает 32 кБ/с (256 кбит/с), что не сильно нагружает WiFi сеть. Потерь нет (и это в UDP протоколе). Также, одна из причин, почему я не использую сжатие в данном приложении, это телефоны-приемники, которые у нас по большей части старые смартфоны с одноядерным процессорм. А в приложении кроме аудиочата есть и другие нагружающие фичи. Не хочется лишний раз нагружать проц и садить батарею, если и так все норм.
    1 балл
  6. Способ решить эту проблему я ищу почти год, и хоть на форуме несколько раз упоминались похожие темы, решил создать еще одну, т.к. нет никакого решения (все просмотрел). На форме 2 или больше TEdit, переход с первого на второй по Enter (Next). Все что набрано в первом TEdit, при нажатии любой буквы второго TEdit переносится во второй плюс эта буква (см. скриншот) Все это происходит при включенном на телефоне "подсказчике" слов, но он удобен и огромное количество людей им пользуются. Приложений у меня было несколько. И на C++ и на Delphi. Использовал RAD XE 10 Четыре планшета и три смартфона с Андроидами 4, 5, 6 для тестов. Клавиатуры и родные и Гугл. Все они как близнецы повторяют этот трюк и как избавится от него, никак не могу найти решение. Единственное, что помогает - отключить подсказки в самом телефоне, но это на своем. А те кто скачивают программу из интернета, им как быть? Благодарен за любые советы (подсказки). Сам я ищу возможность обнулить буфер клавиатуры при выходе с одного Эдита и входе в следующий.
    1 балл
  7. Martifan

    Audio Streaming

    сам у Bass есть этот модуль разберусь и результат вылажу
    1 балл
  8. Barbanel

    Иконки для приложение в App Store

    Я олень) Оказывается в студии в свойствах проекта есть две вкладки: iPhone и iPad. Проблема решена.
    1 балл
  9. не совсем понятно чем обычный THTTPClient не угодил?
    1 балл
  10. Alex7wrt

    Audio Streaming

    Советую обратить внимание на библиотеку Bass. Буквально на днях решал похожую задачу под Android (аудио чат в пределах локальной сети) с использованием данной библиотеки. Она же доступна и под iOS.
    1 балл
  11. Anatoliy

    Пуши в IOS

    После публикации в app store пуши перестали приходить. Помогло обратно вернуть в false 'sandbox' => false, и пуши пошли. Таким образом, не знаю как у других, но у меня во время разработки пуши работают если 'sandbox' => true, а после публикации в app store вернуть обратно 'sandbox' => false Может кому пригодиться эта информация. Почему так не знаю.
    1 балл
  12. На сенсорном экране нужно обрабатывать тап, в Делфи есть компонент для жестов. Копай в эту сторону
    1 балл
  13. При открытии/ворачивании в приложение очисти буфер
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...