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 つのプロパティは同じになりますが、異なる場合もあります。