オーディオ オブジェクト

ArcGIS AppStudio は、録音を制御および監視する関数など、オーディオを処理する高度な録音コンポーネントを提供します。これを使用すると、アプリのニーズに合わせて構成可能な品質とサイズでデータを収集する強力なツールを作成できます。

レコーダー コントロール

AudioRecorder コンポーネントは、録音プロセスを制御する関数を提供します。録音、一時停止、停止の各メソッドは基本的なツールを提供します。ツールは、他のメソッドで補完できます。

次のサンプル コードは、録音プロセスを管理する汎用的なコントロール パネルを提供します。

//Creates both audio recorder and audio playback objects
AudioRecorder {
    id: audioRecorder
    onStatusChanged: {
        console.log("audioRecorder status:", status);
    }
    onErrorChanged: {
        console.log("audioRecorder error:", error, "errorString:", errorString);
    }
}
Audio {
    id: audio
    onStatusChanged: {
        console.log("audio status:", status);
    }
    onError: {
        console.log("audio error:", error, "errorString:", errorString);
    }
}
Flow {
    //Button to start recording, disabled if recording is unavailable or already underway
    Button {
        text: "Record"
        enabled: audioRecorder.available
        onClicked: audioRecorder.record();
    }
   
    //Stops recording currently underway or paused, disabled if neither is true
    Button {
        text: "Stop"
        enabled: audioRecorder.state == AudioRecorder.RecordingState || audioRecorder.state == AudioRecorder.PausedState
        onClicked: audioRecorder.stop();
    }
    //Opens file dialog to select where to create the audio file
    Button {
        text: "Location"
        enabled: audioRecorder.state == AudioRecorder.StoppedState
        onClicked: outputDialog.open();
    }
    FileDialog {
        id: outputDialog
        title: "Output Location"
        selectExisting: false
        selectMultiple: false
        nameFilters: [ "All files (*)" ]
        folder: AppFramework.standardPaths.standardLocations(StandardPaths.MusicLocation)[0]
        onAccepted: {
            audioRecorder.outputLocation = fileUrl;
        }
    }
    //Plays back recorded audio file
    Button {
        text: "Play"
        enabled: audioRecorder.state == AudioRecorder.StoppedState && audioRecorder.actualLocation > "" && audioRecorder.duration > 0
        onClicked: {
            audio.source = audioRecorder.actualLocation;
            audio.play();
        }
    }
}

録音のプロパティ

AudioRecorder のメソッドは録音するツールを提供しますが、このコンポーネントはプロセスを通知する多数のプロパティを提供するので、ニーズに合わせて詳細な情報を構成できます。次のサンプル コードは、役に立つ可能性があるプロパティを制御する方法を示しています。

input プロパティは、オーディオを取得するデバイスを表します。これは、当初はシステムのデフォルト設定になっていますが、利用可能な任意の入力デバイスに変更できます。

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Default input"
                color: "black"
            }
            Text {
                text: audioRecorder.defaultInput
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
        }
        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Input device"
                color: "black"
            }
            Text {
                text: audioRecorder.input
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            ComboBox {
                model: audioRecorder.availableInputs
                textRole: "description"
                Layout.fillWidth: true
                onActivated: {
                    audioRecorder.input = model[index].name;
                }
            }
        }

containerFormat プロパティは、AudioRecorder コンポーネントが出力するファイル タイプを表します。

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Container format"
                color: "black"
            }
            Text {
                text: audioRecorder.containerFormat
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            ComboBox {
                model: audioRecorder.availableContainerFormats
                textRole: "description"
                Layout.fillWidth: true
                onActivated: {
                    audioRecorder.containerFormat = model[index].name;
                }
            }
        }

codec プロパティは、containerFormat プロパティと異なり、録音をエンコードして処理する方法を定義します。通常、ファイルの大きさや圧縮方法を制御するのは、ファイルタイプではなくコーデックです。codec プロパティは、上記の containerFormat プロパティと同様に操作できます。

録音のボリュームは、volume プロパティで整数を使用して制御されます。デバイスが録音する通常のボリュームは 1 として定義され、たとえば 0.5 は半分のボリュームで録音されます。次のサンプル コードは、0 ~ 1 を 10 等分したスライダーを使用して、このプロパティを制御しています。

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Volume"
                color: "black"
            }
            Text {
                text: audioRecorder.volume
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            Slider {
                Layout.fillWidth: true
                minimumValue: 0
                maximumValue: 1
                stepSize: 0.1
                value: audioRecorder.volume
                onValueChanged: {
                    audioRecorder.volume = value;
                }
            }
        }

outputLocation プロパティは、このページの上部にあるコントロール パネルのサンプル コードのファイル ダイアログで設定されます。これは、ファイルの保存に指定する場所を定義します。録音を開始すると、これに基づいて actualLocation プロパティが設定され、実際に作成されたファイルのパスを表します。ほとんどの場合、これら 2 つのプロパティは同じになりますが、異なる場合もあります。