ショートビデオSDKは、基本的な録画に基づいてアップグレードされた録画機能を提供します。 基本的な録画のすべての機能とは別に、短いビデオSDKは、画面録画とも呼ばれるビュー録画もサポートしています。 ビューに記録されたビデオやカメラを使用して記録されたビデオなど、複数のソースから収集されたビデオを組み合わせることができます。

サポートされているエディション

エディション 対応
Professional 必須
標準モード 必須
基本 任意

用語

このセクションでは、マルチソース録音の理解に役立つ用語について説明します。 詳細については、「マルチソース录音」、「トラック」、および「トラックのレイアウト」をご参照ください。

関連クラス

分類 説明
AliyunIDoRecorder 記録、プレビュー設定、エフェクト設定、コールバック設定など、マルチソース記録機能を定義するコアクラス。
AliyunMultiRecorderCreator マルチソース録音インスタンスを作成するために使用されるファクトリクラス。
AliyunVideoRecorderConfig ビデオの幅と高さ、エンコーダの種類、フレームレートなど、記録パラメータを定義するクラス。
AliyunIDoCapture カメラデータコレクターと部分的な画面録画コレクターの追加を含む、ビデオキャプチャ設定を定義するクラス。
AliyunICameraCapture カメラの記録を定義するクラス。
AliyunIViewCapture 画面記録を定義するクラス。
OnVideoRecordListener 録音完了コールバック、録音進行状況コールバック、録音エラーコールバックなど、録音リスナーを定義するクラス。
OnAudioCallBack PCM形式のオーディオデータのコールバックを定義するクラス。
OnFrameCallBack 選択したプレビュー解像度のコールバック、カメラでキャプチャされたフレームデータのコールバック、カメラの有効化に失敗したときに発生するエラーのコールバックなど、データキャプチャのコールバックを定義するクラス。
OnPictureCallback 写真のキャプチャとスナップショットのコールバックを定義するクラス。
AliyunIClipManager ビデオクリップを管理するクラスは、たとえば、ビデオクリップを削除したり、録画時間を設定したりします。

マルチソース記録の設定

マルチソース録音には、カメラとマイクの権限が必要です。
設定 手順 説明 サンプルコード
基本設定 1 録画インスタンスを作成および破棄し、録画パラメータを設定します。 AliyunIDoRecorderクラスの初期化とパラメーターの設定
2 画面録画とカメラ録画のパラメーターを設定します。 ビデオソースの設定
3 コールバックを設定します。 コールバックの設定
4 プレビュービューを設定し、プレビューを有効にします。 プレビューの有効化
5 ビデオクリップの録画を開始、キャンセル、および停止します。 録音を開始
6 記録を停止し、設定情報を生成します。 録音を停止する
詳細構成 7 カメラ制御とビデオクリップ管理のパラメーターを設定します。 カメラ制御のパラメータには、カメラタイプとフラッシュモードがあります。 ビデオクリップ管理のパラメータには、最大または最小の録画時間、ビデオクリップを削除する方法、ビデオクリップの数を照会する方法などがあります。 ビジネス要件に基づいてこれらのパラメーターを設定します。 カメラの設定とビデオクリップの管理
8 ビジネス要件に基づいて、レタッチ、フィルター、アニメーションステッカーなどの録音エフェクトを設定します。 エフェクトの設定
9 BGM、バックグラウンドイメージ、およびスピードランピングを設定します。 その他の機能の設定

AliyunIDoRecorderクラスの初期化とパラメーターの設定

AliyunIDoRecorderクラスを初期化し、録画インスタンスを作成し、録画パラメーターを設定します。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

クラスを初期化するInitialize the class
// 録音インスタンスを作成します。
AliyunIVideoRecorder recorder = AliyunMultiRecorderCreator.getVideoRecorderInstance (コンテキスト、設定);

// 録音インスタンスを破棄します。
// SDKを使用する必要がなくなった場合、またはプログラムを終了する前に、録画インスタンスを破棄します。 使用中に録画インスタンスを破棄しないでください。 アクティビティ# onDestroyで関連するAPI操作を呼び出します。
recorder.de stroy();
記録パラメータの設定
AliyunVideoRecorderConfig config = AliyunVideoRecorderConfig.builder()
                // 必須パラメーター:
                . videoWidth(***)
                . videoHeight(***)
                . outputPath(***)
                // オプションのパラメーター:
                .***()
                .***()
                .build();

ビデオソースの設定

ビジネス要件に基づいて複数のソースからのビデオを組み合わせます。 すべてのビデオソースを追加したら、recorder.prepare() を呼び出して、ビデオソースが追加されたことを示す必要があります。

カメラ録画の設定

AliyunICameraCapture
// 1. レイアウトを設定します。
AliyunLayoutParam cameraLayoutParam = AliyunLayoutParam.builder()
                . layoutLevel(***)
                . centerX(***)
                . centerY(***)
                . widthRatio(***)
                . heightRatio(***)
                . displayMode(***)
                . build();

// 2。 ビデオソースを追加します。
AliyunICameraCapture cameraCapture = recorder.getVideoCapture() 。addCameraCapture(cameraLayoutParam);

// 3。 ビデオソースを設定します。
// (必須) カメラのプレビュー表示を設定します。
cameraCapture.setDisplayView(SurfaceView)
// (オプション) その他の設定を設定します。
cameraCapture.set ***();

画面録画の設定

AliyunIViewCapture
// 1. レイアウトを設定します。
AliyunLayoutParam viewLayoutParam = AliyunLayoutParam.builder()
                . layoutLevel(***)
                . centerX(***)
                . centerY(***)
                . widthRatio(***)
                . heightRatio(***)
                . displayMode(***)
                . build();

// 2。 ビデオソースを追加します。
// 現在の録画ビューを取得します。
ビューrecordView = getRecordView();
AliyunIViewCapture viewCapture = recorder.getVideoCapture().addViewCapture(viewLayoutParam、recordView);

// 3。 (オプション) ビデオソースを設定します。
viewCapture.set ***();

ビデオソースの準備

すべてのビデオソースを追加したら、次のAPIを呼び出して、ビデオソースが追加されたことを示す必要があります。
recorder.prepare();

コールバックの設定

コールバックを設定して、オーディオとビデオの処理の進行状況とステータスをタイムリーに取得できます。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

// (オプション) 録音コールバックを設定します。
recorder.setOnRecordListener(OnVideoRecordListener);

// (オプション) オーディオコレクションのコールバックを設定します。
recorder.setOnAudioCallback(OnAudioCallBack);

プレビューの有効化

ほとんどの場合、Activity#onResumeでstartPreviewを呼び出し、Activity#onPauseでstopPreviewを呼び出します。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

// プレビューを開始します。
// Activity#onResumeで次のAPI操作を呼び出します。
AliyunIRecorder.startPreview();

// プレビューを停止します。
// Activity#onPauseで次のAPI操作を呼び出します。
AliyunIRecorder.stopPreview();

録音を開始

録画プロセスでは、必要な完全なビデオを取得するまで、ビデオを停止、キャンセル、または再録画する必要があります。 録画を停止すると、ビデオクリップが生成されます。 ただし、録画をキャンセルした場合、現在のビデオクリップは保持されません。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

録音を開始
// 録音を開始します。
recorder.startRecording();
ビデオクリップを録画する
// 録音を開始します。
recorder.startRecording();

// 録音を停止します。 ビデオクリップが生成される。
recorder.stopRecording();

recorder.startRecording();
// 録音をキャンセルします。 現在のビデオクリップは保存されません。
recorder.ca ncelRecording();

// 次のビデオクリップの録画を続行します。
recorder.startRecording();
recorder.stopRecording();

録音を停止する

録画を停止すると、録画されたビデオクリップがビデオにマージされるか、録画されたビデオクリップに関する設定情報が生成されます。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

// 録画を停止し、録画したビデオクリップを1つのビデオにマージします。
recorder.finishRecording();

// ビデオクリップをマージせずに、録画を停止し、録画したビデオクリップに関する設定情報を生成します。
recorder.finishRecordingForEdit();

カメラの設定とビデオクリップの管理

カメラ制御とビデオクリップ管理のパラメーターを設定します。 カメラ制御のパラメータには、カメラタイプとフラッシュモードがあります。 ビデオクリップ管理のパラメータには、最大または最小の録画時間、ビデオクリップを削除する方法、ビデオクリップの数を照会する方法などがあります。 ビジネス要件に基づいてこれらのパラメーターを設定します。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

カメラ設定の構成
// カメラの数を取得します。
AliyunICameraCapture.getCameraCount();

// カメラタイプ: フロントカメラまたはリアカメラを指定します。
AliyunICameraCapture.setCamera(CameraType cameraType);

// センサーの角度を指定します。
// この設定は非常に重要です。 SDKリファレンスを読むことを推奨します。
AliyunICameraCapture.setRotation(int rotation);

// ビデオが記録される角度を指定します。
// この設定は非常に重要です。 SDKリファレンスを読むことを推奨します。
AliyunICameraCapture.setRecordRotation(int rotation);

// プレビュー時に、フラッシュモード、フォーカスモード、ズーム倍率、露出レベルなどのカメラパラメータを設定します。 次の方法を使用して、プレビューパラメーターを個別に設定することもできます。
AliyunICameraCapture.setCameraParam(CameraParam cameraParam);

// フロントカメラとリアカメラを切り替えます。
AliyunICameraCapture.switchCamera();

// フラッシュモードを指定します。
AliyunICameraCapture.setLight(FlashType flashType);

// ズーム倍率を指定します。
AliyunICameraCapture.setZoom (フロートレート);

// 露出レベルを指定します。
AliyunICameraCapture.setExposureCompensationRatio (フロート値);

// フォーカスモードを指定します。
AliyunICameraCapture.setFocusMode(intモード);

// 手動フォーカスを設定します。
AliyunICameraCapture.setFocus(float xRatio, float yRatio);
ビデオクリップの管理
// クリップマネージャを取得します。
AliyunIClipManagerマネージャー=AliyunIVideoRecorder.getClipManager();

// 最大録画時間を指定します。これは、単一のビデオクリップではなく、すべてのビデオクリップの最大時間です。
manager.setMaxDuration(int maxDurationMs);

// 最小録画時間を指定します。これは、単一のビデオクリップではなく、すべてのビデオクリップの最小時間です。
manager.setMinDuration(int minDurationMs);

// 最後のビデオクリップを削除します。
manager.de letePart();

// 指定したビデオクリップを削除します。
manager.de letePart(int index);

// すべてのビデオクリップを削除します。
manager.de leteAllPart();

// ビデオクリップの合計期間を取得します。
manager.getDuration();

// ビデオクリップの総数を取得します。
manager.getPartCount();

// ビデオクリップのパスを取得します。
manager.getVideoPathList();

エフェクトの設定

ビジネス要件に基づいて、レタッチ、フィルター、アニメーションステッカーなどの録音エフェクトを設定します。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

フィルター

カスタムフィルターを作成できます。 詳細については、「フィルターとトランジション」をご参照ください。

// フィルターを適用します。
AliyunICameraCapture.applyFilter(EffectFilter effectFilter);

// フィルターを削除します。
AliyunICameraCapture.removeFilter();
アニメーションフィルター
// アニメーションフィルターを適用します。
AliyunICameraCapture.applyAnimationFilter(EffectFilter effectFilter);

// アニメーションフィルターを削除します。
AliyunICameraCapture.removeAnimationFilter(EffectFilter effctFilter);
静的ステッカー
// 静的ステッカーを追加します。
AliyunICameraCapture.addImage(EffectImage effctImage);

// 静的ステッカーを削除します。
AliyunICameraCapture.removeImage(EffectImage effctImage);

// 静的ステッカーの位置を更新します。
AliyunICameraCapture.setEffectView(float xRatio、float yRatio、float widthRatio、float heightRatio、EffectBase effectBase);

アニメーションステッカー

カスタムアニメーションステッカーを作成できます。 詳細については、「アニメーション」をご参照ください。
// アニメーションステッカーを追加します。
AliyunICameraCapture.addPaster(EffectPaster effectPaster,float sx,float sy,float sw,float sh,float rotation,boolean flip);

// アニメーションステッカーを削除します。
AliyunICameraCapture.removePaster(EffectPaster effectPaster);

// アニメーションステッカーの位置を更新します。
AliyunICameraCapture.setEffectView(float xRatio、float yRatio、float widthRatio、float heightRatio、EffectBase effectBase);

高度なレタッチ

ビデオ録画モジュールは、基本的な組み込みレタッチ機能を提供するだけでなく、Alibaba CloudやFaceUnityなどのレタッチSDKの使用もサポートします。 組み込みのレタッチ機能を使用して、レタッチレベルのみを設定できます。 レタッチSDKは、顔のレタッチ、顔の整形、メイクアップ、フィルター、ステッカーなど、豊富なレタッチ効果を提供します。
  • 内蔵レタッチ
    // レタッチを有効または無効にします。
    AliyunICameraCapture.setBeautyStatus (ブール値);
    
    // レタッチレベルを設定します。
    AliyunICameraCapture.setBeautyLevel(intレベル);
  • SDKのレタッチ
    カメラテクスチャIDとカメラ生フレームデータは、レタッチ効果を実装するためにSDKをレタッチするために必要です。 次のコードは、カメラテクスチャIDとカメラ生フレームデータを取得する方法の例を示しています。
    • カメラテクスチャIDの取得
      AliyunICameraCapture.setOnTextureIdCallback(new OnTextureIdCallBack() {
                  @Override
                  public int onTextureIdBack(int textureId, int textureWidth, int textureHeight, float[] matrix) {
                      if (mBeautyInterface != null) {
                          リターンmBeautyInterface.onTextureIdBack(textureId、textureWidth、textureHeight、matrix、mControlView.getCameraType().getType());
                      }
                      textureIdを返します。
                  }
      
                  @Override
                  public int onScaledIdBack(int scaledId, int textureWidth, int textureHeight, float[] matrix) {
                      scaledIdを返します。
                  }
      
                  @Override
                  public void onTextureDestroyed() {
                      // V3.7.8より前のバージョンのショートビデオSDKの場合、GLSurfaceViewでGLSurfaceView.queueEventを使用して、サードパーティのカスタムレンダリング用にglリソースを破棄できます。 ショートビデオSDK V3.7.8以降の場合は、このコールバックでglリソースを破棄することを推奨します。
                      if (mBeautyInterface != null) {
                          mBeautyInterface.release();
                          mBeautyInterface = null;
                      }
                  }
              });
    • カメラの生フレームデータを取得する
      AliyunICameraCapture.setOnFrameCallback(new OnFrameCallBack() {
                  @Override
                  public void onFrameBack(byte[] bytes, int width, int height, Camera.CameraInfo info) {
                      // コールバック生データのデータ型はNV21です。 取得した生データはFaceUnityで使用されます。
                      if (mBeautyInterface != null) {
                          mBeautyInterface.onFrameBack (バイト、幅、高さ、情報);
                      }
                  }
      
                  @Override
                  public Camera.Size onChoosePreviewSize (リスト <Camera.Size> supportedPreviewSizes、
                                                         カメラサイズpreferredPreviewSizeForVideo) {
                      ヌルを返します。
                  }
      
                  @Override
                  public void openFailed() {
                  }
              });

その他の機能の設定

バックグラウンドミュージック、ウォーターマーク、スピードランピングなどの機能がサポートされています。 コードで使用されるパラメーターの詳細については、「関連クラス」をご参照ください。

速度ランピング
// 録画の速度ランピングを設定します。
AliyunIDoRecorder. setRate (フロートレート);
ミュート
// マイクをミュートします。
AliyunIDoRecorder. setMute (ブールisMute);
オートクリア
// 録画終了時に録画したビデオクリップを自動的に消去するかどうかを指定します。
AliyunIDoRecorder. setIsAutoClearClipVideos (ブールisAutoClear);
バックグラウンドミュージック
// バックグラウンドミュージックを設定します。
AliyunIVideoRecorder.setMusic(String path,long startTime,long duration);

// バックグラウンドミュージックを削除します。
AliyunIDoRecorder. removeMusic();
透かし加工
// 透かしを追加します。
AliyunIDoRecorder. addWaterMark(EffectImage effectImage);

// 透かしを削除します。
AliyunIDoRecorder. removeWaterMark(EffectImage effectImage);
バックグラウンドの設定
// 背景色を指定します。
AliyunIDoRecorder. setBackgroundColor(int color);

// ビットマップの背景画像を指定します。
AliyunIDoRecorder. setBackgroundImage (ビットマップ);

// 背景画像のパスを指定します。
AliyunIDoRecorder. setBackgroundImage (文字列パス);

// 背景をクリアします。
AliyunIDoRecorder. clearBackground();

マルチソース記録のサンプルコード

android.os. バンドルをインポートします。android.os.Environmentをインポートします。android.view.SurfaceViewをインポートします。android.view.Viewをインポートします。android.widget.TextViewをインポートします。androidx.annotation.Nullableをインポートします。androidx.appcompat.app.AppCompatActivityをインポートします。impor t com.aliyun.svideosdk.common.struct.com mon.AliyunLayoutParam;
impor t com.aliyun.svideosdk.common.struct.com mon.VideoDisplayMode;
impor t com.aliyun.svideosdk.com mon.struct.encoder.VideoCodecs;
impor t com.aliyun.svideosdk.com mon.struct.recorder.CameraType;
com.aliyun.svideosdk.multirecorder.AliyunICameraCaptureをインポートします。com.aliyun.svideosdk.multirecorder.AliyunIVideoRecorderをインポートします。com.aliyun.svideosdk.multirecorder.AliyunIViewCaptureをインポートします。com.aliyun.svideosdk.multirecorder.OnVideoRecordListenerをインポートします。com.aliyun.svideosdk.multirecorder.config.AliyunVideoRecorderConfigをインポートします。com.aliyun.svideosdk.multirecorder.impl.AliyunMultiRecorderCreatorをインポートします。java.io. ファイルをインポートします。/**
 * マルチソース録音のデモサンプルコード
 * 注: 事前にストレージ、カメラ、マイクの権限を取得する必要があります。
 * /
public class MultiRecorderDemoがAppCompatActivityを拡張 {

    プライベートAliyunIVideoRecorder mRecorder;
    プライベートTextView mBtnRecord;
    プライベートSurfaceView mCameraPreview;
    プライベートビューmViewRecord;
    プライベートビューmViewRecordIcon;

    プライベートブールmIsRecording = false;

    @Override
    protected void onCreate(@ NullableバンドルsavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.multi_recoder_demo_layout);
        initViews();
        initRecorder();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mRecorder.startPreview();
    }

    @Override
    protected void onPause() {
        super.onPause();
        stopRecording();
        mRecorder.stopPreview();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mRecorder.de stroy();
    }

    プライベート文字列getSaveDir() {
        String saveDir = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "MultiRecord";
        ファイルdirFile=新しいファイル (saveDir);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        saveDirを返します。
    }

    private void initViews() {
        mBtnRecord = findViewById(R.id.record_btn);
        mCameraPreview = findViewById(R.id.multi_record_camera);
        mViewRecord = findViewById(R.id.multi_record_view);
        mViewRecordIcon = mViewRecord.findViewById(R.id.record_view_icon);
    }

    private void initRecorder() {
        // 1. パラメーターを設定します。
        AliyunVideoRecorderConfig config = AliyunVideoRecorderConfig.builder()
                // 必須パラメーター:
                . videoWidth(1080)
                . videoHeight(1920)
                . outputPath(getSaveDir() + File.separator + System.currentTimeMillis() + ".mp4")
                // オプションのパラメーター:
                . videoCodecs(VideoCodecs.H264_HARDWARE) // ハードウェアエンコーディング。
                .build();

        // 2. 録画インスタンスを作成します。
        mRecorder = AliyunMultiRecorderCreator.getVideoRecorderInstance(this、config);

        // 3. ビデオソースを設定します。
        // 3.1カメラの録画を設定します。
        addCameraCapture();
        // 3.2画面記録を設定します。
        addViewCapture();
        // 3.3ビデオソースを準備します。
        mRecorder.prepare();

        // 4コールバックを設定します。
        mRecorder.setOnRecordListener(new OnVideoRecordListener() {
            @Override
            public void onProgress (長期間) {

            }

            @Override
            public void onFinish(String outputPath) {

            }

            @Override
            public void onClipComplete(boolean validClip, long clipDuration) {

            }

            @Override
            public void onMaxDuration() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        stopRecording();
                    }
                });
            }

            @Override
            public void onError(int errorCode) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        stopRecording();
                    }
                });
            }

            @Override
            public void onInitReady() {

            }
        });
    }

    private void addCameraCapture() {
        // 1. 左側のレイアウトを設定します。
        AliyunLayoutParam cameraLayoutParam = AliyunLayoutParam.builder()
                . layoutLevel(1)
                . centerX(0.25f)
                . centerY(0.5f)
                . widthRatio(0.5f)
                . heightRatio(1.0f)
                . displayMode(VideoDisplayMode.FILL)
                .build();

        // 2. ビデオソースを追加します。
        AliyunICameraCapture cameraCapture = mRecorder.getVideoCapture().addCameraCapture(cameraLayoutParam);

        // 3. ビデオソースを設定します。
        // (必須) カメラのプレビュー表示を設定します。
        cameraCapture.setDisplayView(mCameraPreview);

        // (オプション) その他の設定を設定します。
        cameraCapture.setCamera(CameraType.BACK);// リアカメラ。
    }

    private void addViewCapture() {
        // 1. 右側のレイアウトを設定します。
        AliyunLayoutParam viewLayoutParam = AliyunLayoutParam.builder()
                . layoutLevel(2)
                . centerX(0.75f)
                . centerY(0.5f)
                . widthRatio(0.5f)
                . heightRatio(1.0f)
                . displayMode(VideoDisplayMode.FILL)
                .build();

        // 2. ビデオソースを追加します。
        // 現在の録画ビューを取得します。
        ビューrecordView = mViewRecord;
        AliyunIViewCapture viewCapture = mRecorder.getVideoCapture().addViewCapture(viewLayoutParam, recordView);

        // 3. (オプション) ビデオソースを設定します。
    }

    private void startRecording() {
        if (mIsRecording) {
            return;
        }
        mIsRecording = true;
        mRecorder.startRecording();
    }

    private void stopRecording() {
        if (!mIsRecording) {
            return;
        }
        mRecorder.stopRecording();
        mIsRecording = false;
    }

    public void onClickRecord (ビューを表示) {
        if (mIsRecording) {
            stopRecording();
            mBtnRecord.setText("記録開始");
        } else {
            startRecording();
            mBtnRecord.setText("記録停止");
        }
    }
}

XMLでの構成例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ + id/demo_root_view"
    アンドロイド: layout_width="match_parent"
    アンドロイド: layout_height="match_parent">

    <LinearLayout
        アンドロイド: layout_width="match_parent"
        アンドロイド: layout_height="match_parent"
        アンドロイド: orientation="horizontal">

        <SurfaceView
            android:id="@ + id/multi_record_camera"
            android:layout_width="0dp"
            アンドロイド: layout_height="match_parent"
            アンドロイド: layout_weight="1" />

        <FrameLayout
            android:id="@ + id/multi_record_view"
            android:layout_width="0dp"
            アンドロイド: layout_height="match_parent"
            アンドロイド: layout_weight="1">

            <TextView
                android:id="@ + id/record_view_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                アンドロイド: layout_gravity="center"
                android:text="スクリーン録画" />

        </FrameLayout>

    </LinearLayout>

    <Button
        android:id="@ + id/record_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        アンドロイド: layout_marginLeft="5dp"
        アンドロイド: layout_marginBottom="5dp"
        android:onClick="onClickRecord"
        android:text="録音開始" />

</RelativeLayout>