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

XXXXXX

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

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

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

    2

Весь контент XXXXXX

  1. Спасибо большое!!! На тестовой процедуре ошибка исчезла, сейчас буду тестить в проекте.
  2. нет, занимаюсь одним проектом, с передачей аудио с андроида на комп и наоборот по сети. Ну, в принципе всё работает, вот только проблема появляется при плохом интернете. Поэтому решили закодировать поток при помощи кодека.
  3. Помогите пожалуйста разобраться с кодом С#, в коде загружается dll и используются функции из неё, хочу перевести на дельфи. загрузка dll [DllImport("opus.dll", CallingConvention = CallingConvention.Cdecl)] internal static extern IntPtr opus_decoder_create(int Fs, int channels, out IntPtr error); [DllImport("opus.dll", CallingConvention = CallingConvention.Cdecl)] internal static extern void opus_decoder_destroy(IntPtr decoder); [DllImport("opus.dll", CallingConvention = CallingConvention.Cdecl)] internal static extern int opus_decode(IntPtr st, byte[] data, int len, byte[] pcm, int frame_size, int decode_fec); public static OpusDecoder Create(int outputSampleRate, int outputChannels) { if (outputSampleRate != 8000 && outputSampleRate != 12000 && outputSampleRate != 16000 && outputSampleRate != 24000 && outputSampleRate != 48000) throw new ArgumentOutOfRangeException("inputSamplingRate"); if (outputChannels != 1 && outputChannels != 2) throw new ArgumentOutOfRangeException("inputChannels"); IntPtr error; IntPtr decoder = API.opus_decoder_create(outputSampleRate, outputChannels, out error); if ((Errors)error != Errors.OK) { throw new Exception("Exception occured while creating decoder"); } return new OpusDecoder(decoder, outputSampleRate, outputChannels); } public unsafe byte[] Decode(byte[] inputOpusData, int dataLength, out int decodedLength) { if (disposed) throw new ObjectDisposedException("OpusDecoder"); byte[] decoded = new byte[MaxDataBytes]; int frameCount = FrameCount(MaxDataBytes); int length = 0; if (inputOpusData != null) length = API.opus_decode(_decoder, inputOpusData, dataLength, decoded, frameCount, 0); else length = API.opus_decode(_decoder, null, 0, decoded, frameCount, (ForwardErrorCorrection) ? 1 : 0); decodedLength = length * 2; if (length < 0) throw new Exception("Decoding failed - " + ((Errors)length).ToString()); return decoded; } private void button3_Click(object sender, EventArgs e) { OpusDecoder _dec= OpusDecoder.Create(48000, 1); byte[] segDec = new byte[4000]; byte[] seg = new byte[4000]; seg[0] = 8; seg[1] = 11; seg[2] = 230; seg[3] = 61; seg[4] = 36; seg[5] = 236; seg[6] = 195; seg[7] = 220; seg[8] = 192; int len = 9; segDec = _dec.Decode(seg, len, out len); } код на C# работает, но когда перевожу его на дельфи он начинает ругаться "stackoverflow" загрузка dll function opus_decoder_create(Fs:LongInt; channels:Integer; var Error:Integer):OpusDecoder; cdecl; external 'opus.dll'; function opus_decode(st:OpusDecoder; data:array of Byte; len:Integer;var pcm: array of Byte; frame_size: Integer; decode_fec:Integer):Integer; cdecl; external 'opus.dll'; procedure opus_decoder_destroy(st:OpusEncoder); cdecl; external 'opus.dll'; использование функций procedure TMain.Decode_2Click(Sender: TObject); var OPDecoder: OpusDecoder; Error: Integer; PreEnc:array of Byte; PreDec:array of Byte; begin Error := 0 ; OPDecoder := opus_decoder_create(48000, 1, Error); SetLength(PreEnc, 4000); SetLength(PreDec, 4000); PreEnc[0] := 8; PreEnc[1] := 11; PreEnc[2] := 230; PreEnc[3] := 61; PreEnc[4] := 36; PreEnc[5] := 236; PreEnc[6] := 195; PreEnc[7] := 220; PreEnc[8] := 192; Error := opus_decode(OPDecoder, PreEnc, 9, PreDec, 2000, 0); end; в процедуру dll ки значения подаются одинаковые в обеих случаях, никак не могу разобраться в чём дело.
  4. XXXXXX

    Delphi/C# IntPtr

    Здравствуйте, может кто-нибудь помочь в переводе с C#? Есть: IntPtr decodedPtr; byte[] decoded = new byte[MaxDataBytes]; fixed (byte* bdec = decoded) { decodedPtr = new IntPtr((void*)bdec); } надо получить аналог в Дельфе.
  5. кстати, почему AnsiString? И в месте где у тебя создаётся TStringStream значение s правильное?
  6. Мне в свое время помогло: vStr := TStringStream.Create(s, TEncoding.UTF8);
  7. XXXXXX

    Уменьшение размера аудио

    Недавно прочитал про уменьшение размера аудио файла, потока. Нашёл технологии Amr и Speex, хочу найти имплементацию одной из них. Общая идея в том, чтобы уменьшить размер "сырого" (raw) аудио на андроиде. Буду благодарен за любую полезную информацию
  8. Здравствуйте! Подскажите пожалуйста, как можно проверить уровень сигнала, или скорость, мобильного интернета
  9. Как вы думаете, есть какой-нибудь выход ?
  10. я попробовал использовать ваш компонент, но сразуже наткнулся на проблему - после того как бросаешь на страницу TabControl - а другой компонент и задаёшь параметр align - client, перестаёт работать перелистывание. после отключения HitTest всё становится на свои места, но я не могу поймать момент нажатия на компонент.
  11. XXXXXX

    Сервис

    а можете привести пример Сервиса? Потомучто у меня такая-же проблема. Тестил сервис с Blong - а на киткате и вроди работало, а на пятёрке даже не запускается.
  12. вперед и с песней в Android Studio, там такое есть В Android Studio итак ясно, что есть возможность сделать это, иначе программы, которую я привёл в пример не было бы. Мне интересно слышал ли кто-нибудь если есть возможность сделать похожую вещь в Delphi. Может вы не слышали, или считаете что платформа на это неспособна. Да, ответили, но порой даже разработчики продукта не знают все его возможности, не то что пользователи. Раз вы высказали ваше мнение, не стоит его повторять, я интересуюсь в мнениях других пользователей тоже.
  13. Здравствуйте. Кто может подсказать, есть ли возможность разработать на Android аппликацию, которая будет отображать маленькую панельку, с кнопкой или другими компонентами, поверх остальных программ. В пример могу привести прогу Smart TaskBar : https://play.google.com/store/apps/details?id=com.kiumiu.ca.taskbar2
  14. XXXXXX

    GCM

    Всем большое спасибо, нашёл решение. при создании TStringStream добавил TStringStream.Create('', TEncoding.UTF8);
  15. XXXXXX

    GCM

    procedure TForm1.Button1Click(Sender: TObject); var AJson: TJSONObject; AJsonData: TJSONObject; ARegisterIds:TJSONArray; AData, AResponseContent:TSTringStream; DeviceToken:String; begin ARegisterIds := TJSONArray.Create; AJson := TJSONObject.Create; try DeviceToken := 't2uIvqpZ_o7u3sUxCBBAICxaRuj05mgHaGWY6x6Dwd3oYnwAEoSY5vl1BkcLzfLt4TPbNbFxr7WCKW5IictG_QCMTqSQ7QEp-mk-g9OG0CHaE5Rx01FT51Zc5om'; ARegisterIds.Add(DeviceToken); AJsonData := TJSONObject.Create; AJsonData.AddPair('id', ID.ToString()); ID := ID + 1; AJsonData.AddPair('message', Edit1.Text); AJson.AddPair('registration_ids', ARegisterIds); AJson.AddPair('data', AJsonData); IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.Request.CustomHeaders.AddValue('Authorization', 'key=AIzaSyBuYtgzrIE6Z-AQobRf1-taJOl6CdWUfL8'); AData := TStringStream.Create(AJson.ToString); AData.Position := 0; AResponseContent := TStringStream.Create('', TEncoding.UTF8); IdHTTP1.Post('https://android.googleapis.com/gcm/send', AData, AResponseContent); AResponseContent.Position := 0; Memo1.Lines.Add(AResponseContent.DataString); finally end; end; до записи в AData которую потом пересылаю через IdHttp, в AJson все символы отображаются отлично.
  16. Если не будет другого выхода, можете нарисовать Хинт вручную и показывать его при ивенте OnMouseEnter
  17. XXXXXX

    GCM

    AJsonData.AddPair('message', System.AnsiToUtf8(Edit1.Text)); Пробовал эту функцию, никакого эффекта.
  18. XXXXXX

    GCM

    Здравствуйте. Я пытаюсь использовать GCM (Google Cloud Messaging) в своей программе. Всё работает отлично, до тех пор пока не отправляю в уведомлении русский текст. При отправке приходит пустое уведомление. Кто-нибудь может подсказать в чём проблема? Заранее спасибо.
  19. XXXXXX

    Проблема авто-скрола в TMemo

    Доброго времени суток. У меня возникли проблемы с TMemo, пытаюсь сделать что-то наподобие поля ввода в чате. При переходе на новую строку и при авто-переносе текста (wordwrap), поле должно автоматически регулировать высоту, но до определённого размера. Для этого на событие "ChangeTracking" добавил контроль : procedure TfMain.MemoSendTextChangeTracking(Sender: TObject); const Offset = 20; begin MemoSendText.ScrollTo(MemoSendText.Caret.Pos.X, MemoSendText.Caret.Pos.Y, True); if LayoutSendBox.Height < 100 then LayoutSendBox.Height := MemoSendText.ContentBounds.Height + Offset; end; "LayoutSendBox" - представляет собой контейнер, в котором находится само поле, у которого в параметре Align указанно "Client", то-есть при изменении высоты контейнера соответственно меняется высота самого поля. Функция Wordwrap у поля - включена, как и ShowScrollBars, т.е. если поле растягивается больше допустимого размера, появляется скрол бар и при дальнейшем вводе текста поле скролится вниз, при помощи процедуры "ScrollTo" Проблема состоит в следующем: После того как поле TMemo достигает своего максимального размера и начинает опускаться вниз при продолжении ввода текста, скрол бар начинает прыгать после введения каждого символа, т.е. после ввода первого символа поднимается наверх на пару пикселей, так, что нижней части последней строчки становится не видно (хотя если проскролить поле вниз, нижняя часть отображается), а при вводе следующего символа всё становится на место. Может кто-нибудь подсказать в чём проблема?
×
×
  • Создать...