OArcGIS AppStudio fornece um componente de gravação de alto nível para processar áudio, incluindo funções para controlar e monitorar a gravação. Isto pode ser utilizado para criar ferramentas eficientes para coletar dados em qualidades e tamanhos configuráveis para as necessidades do seu aplicativo.
Controles do gravador
O componente AudioRecorder fornece funções para controlar o processo da gravação de áudio. Os métodos de registrar, pausar e parar fornecem ferramentas de nível básico que podem ser complementadas por outros métodos.
Esta amostra de código fornece um painel de controle geral para gerenciar o processo da gravação de áudio:
//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();
}
}
}
Propriedades de gravação
Enquanto o método AudioRecorder fornecer as ferramentas para registrar áudio, o componente fornecerá várias propriedades que informam o processo, permitindo uma experiência mais informada que você pode configurar para suas necessidades. As seguintes amostras de código fornecem alguns meios para controlar propriedades potencialmente úteis.
A propriedade input descreve o dispositivo que será capturador de áudio. Isto será iniciado conforme o padrão do sistema, mas pode ser alterado para qualquer dispositivo de entrada disponível.
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;
}
}
}
A propriedade containerFormat descreve o tipo de arquivo no qual o componente AudioRecorder será produzido.
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;
}
}
}
Não deve ser confundido com a propriedade containerFormat , a propriedade codec define o método no qual a gravação de áudio será codificada e processada. Codec, ao invés do tipo de arquivo, geralmente controla o quanto grande ou compacto será um arquivo. A propriedade codec pode ser manipulada da mesma forma que a propriedade containerFormat acima.
O volume no qual o áudio será gravado é controlado pela propriedade volume na forma de um inteiro. O volume no qual seu dispositivo normalmente gravaria é definido como 1, portanto, por exemplo, 0.5 gravará a meio volume. Esta amostra de código controla esta propriedade com um controle deslizante de 0 a 1, aumentando a cada décimo.
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;
}
}
}
A propriedade outputLocation , configurada através da caixa de diálogo do arquivo na amostra de código do painel de controle na parte superior desta página, define o local pretendido para salvar o arquivo. Após iniciar a gravação, uma propriedade actualLocation é configurada com base nisto, descrevendo o caminho do arquivo que realmente foi feito. Na maioria dos casos, estas duas propriedades serão as mesmas, mas há algumas exceções.