Objetos de áudio

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.