FAQ FM
Мультимедиа

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

[Android] Как сгенерировать звук определенной частоты?

uses
  {...}, AndroidApi.JNI.Media;

procedure MakeSound(ADuration: Integer);
var
  Volume: Integer;
  StreamType: Integer;
  ToneType: Integer;
  ToneGenerator: JToneGenerator;
begin
  Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // Громкость
  StreamType := TJAudioManager.JavaClass.STREAM_ALARM;
  ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // Тип звука
  ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume);
  ToneGenerator.startTone(ToneType, ADuration);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   MakeSound(1000);
end;


[Android] Как записать видео с помощью стандартной программы?

uses
  {...}, System.Messaging {TMessageManager}, Androidapi.JNI.GraphicsContentViewText;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
    function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
  public
    FMessageSubscriptionID: Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses
  System.IOUtils, Androidapi.JNI.Os, Androidapi.JNI.App, Androidapi.JNI.Net,
  Androidapi.JNIBridge, Androidapi.Helpers, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Provider;

const
  RECORD_VIDEO = 9;

procedure TForm1.Button1Click(Sender: TObject);
var
  VideoIntent: JIntent;
  videoUri: Jnet_Uri;
  AFile: JFile;
  FileName: TFileName;
begin
  FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(
    TMessageResultNotification, HandleActivityMessage);
  VideoIntent := TJIntent.JavaClass.init(
    TJMediaStore.JavaClass.ACTION_VIDEO_CAPTURE);
  if VideoIntent.resolveActivity(SharedActivityContext.getPackageManager()) <> nil then
  begin
    // см. /storage/sdcard0/Documents
    FileName := TPath.Combine(TPath.GetSharedDocumentsPath, 'recording.mp4');
    AFile := TJFile.JavaClass.init(StringToJString(FileName));
    videoUri := TJnet_Uri.JavaClass.fromFile(AFile);
    VideoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT,
      TJParcelable.Wrap((videoUri as ILocalObject).GetObjectID));
    SharedActivity.startActivityForResult(VideoIntent, RECORD_VIDEO);
  end;
end;

procedure TForm1.HandleActivityMessage(const Sender: TObject;
  const M: TMessage);
begin
  if M is TMessageResultNotification then
    OnActivityResult(
      TMessageResultNotification(M).RequestCode,
      TMessageResultNotification(M).ResultCode,
      TMessageResultNotification(M).Value);
end;

function TForm1.OnActivityResult(RequestCode, ResultCode: Integer;
  Data: JIntent): Boolean;
begin
  Result := False;

  TMessageManager.DefaultManager.Unsubscribe(
    TMessageResultNotification, FMessageSubscriptionID);
  FMessageSubscriptionID := 0;

  if RequestCode = RECORD_VIDEO then
  begin
    if ResultCode = TJActivity.JavaClass.RESULT_OK then
    begin
      TThread.Queue(nil, procedure
        begin
          Label1.Text := 'recording completed';
          Invalidate;
        end);
    end;
  end;
end;

При использовании материала - ссылка на сайт обязательна