<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<resources>

    <string name="app_name">Loopback App</string>

    <string name="buttonPlay_play">Refresh Screen</string>
    <string name="buttonPlay_pause">Pause</string>
    <string name="buttonTest_enabled">Round-Trip\nLatency Test</string>
    <string name="buttonTest_disabled">FX Disabled Loopback 2</string>
    <string name="buttonSave">Save Results</string>
    <string name="buttonZoomOutFull">Unzoom</string>
    <string name="buttonZoomOut">Zoom Out</string>
    <string name="buttonZoomIn"> Zoom In</string>
    <string name="buttonAbout">About</string>
    <string name="buttonRecorderBufferPeriod">Recorder</string>
    <string name="buttonPlayerBufferPeriod">Player</string>
    <string name="ReadHistTitle">Frequency vs. Recorder Buffer Period (ms) Plot</string>
    <string name="WriteHistTitle">Frequency vs. Player Buffer Period (ms) Plot</string>
    <string name="buttonBufferTest">Buffer Period\n&amp; Glitch Test</string>
    <string name="buttonCalibrateSoundLevel">Calibrate Sound Level Now</string>
    <string name="buttonGlitches">Glitches</string>
    <string name="numGlitches">Total Number of Glitches:</string>

    <!-- disabled -->
    <string name="buttonZoomInFull">In Full</string>

    <string name="buttonSettings">Settings</string>


    <string name="labelMicSource">Microphone Source</string>
    <string-array name="mic_source_array">
        <item>DEFAULT</item>
        <item>MIC</item>
        <item>CAMCORDER</item>
        <item>VOICE_RECOGNITION</item>
        <item>VOICE_COMMUNICATION</item>
        <item>REMOTE_SUBMIX (Java only)</item>
        <item>UNPROCESSED (N or later)</item>
    </string-array>

    <string name="labelPerformanceMode">Performance Mode</string>
    <string-array name="performance_mode_array">
        <item>DEFAULT</item>
        <item>NONE</item>
        <item>LATENCY</item>
        <item>LATENCY_EFFECTS</item>
        <item>POWER_SAVING</item>
    </string-array>

    <string name="labelInfo">Test settings will appear here after the first test is run</string>
    <string name="labelSettings">SETTINGS</string>
    <string name="labelAbout">About</string>
    <string name="labelSamplingRate">Sampling Rate</string>
    <string name="AboutInfo">Round-trip audio latency testing app\n
        using the Dr. Rick O\'Rang audio loopback dongle.\n
        Authors: Ricardo Garcia (rago), Tzu-Yin Tai, and Brandon Swanson\n
        Open source project on:\n
        https://github.com/gkasten/drrickorang\n
        References:\n
        https://source.android.com/devices/audio/latency.html\n
        https://goo.gl/dxcw0d\n\n\n
        adb parameters:  all parameters are optional. If not specified, defaults will be used.\n
        -ei SF \t\t\t\t\t\t\t\t\t\t\t\t ####\t\t sampling frequency \n
        -ei BS \t\t\t\t\t\t\t\t\t\t\t\t ####\t\t down sample block size \n
        -es Filename \t\t\t\t\t\t\t ssss\t\t\t output filename \n
        -ei MicSource \t\t\t\t\t\t\t ####\t\t microphone source\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 0: DEFAULT\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 1: MIC\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 2: CAMCORDER\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 3: VOICE_RECOGNITION\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 4: VOICE_COMMUNICATION\n
        -ei AudioThread \t\t\t\t\t ####\t\t Audio Thread Type\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 0: Java\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 1: Native (SLES)\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 2: Native (AAudio)\n
        -ei AudioLevel \t\t\t\t\t\t ####\t\t Audio Level [0:15]\n
        -ei RecorderBuffer \t\t\t\t ####\t\t Recorder Buffer Frames\n
        -ei PlayerBuffer \t\t\t\t\t\t ####\t\t Player Buffer Frames\n
        -ei TestType \t\t\t\t\t\t\t\t ####\t\t Audio Test Type\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 222: Latency Test\n
        \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 223: Buffer Test\n
        -ei BufferTestDuration \t ####\t\t Buffer Test Duration \n
        -ei NumLoadThreads \t ####\t\t Number of Simulated Load Threads (0 - 20) \n
        -ei CI \t ####\t\t Channel Index for USB Audio (0 - 8) \n
        -ez CaptureSysTrace \t ####\t\t enable/disable systrace and bugreport capturing \n
        -ez CaptureWavs \t ####\t\t enable/disable .wav file snippets capturing \n
        -ei NumCaptures \t ####\t\t Number of systrace/bugreport and/or wav snippets to capture \n
        -ei WaveDuration \t ####\t\t Duration in seconds of captured wave files
        \n\n\n

        Example: adb shell am start -n org.drrickorang.loopback/.LoopbackActivity \n
        --ei SF 48000 --es FileName output --ei MicSource 3 --ei AudioThread 1 --ei AudioLevel 12
        --ei TestType 223 --ei BufferTestDuration 5 --ez CaptureWavs true --ei NumCaptures 5
    </string>

    <!-- spinnerSamplingRate Options -->
    <string-array name="samplingRate_array">
        <item>8000</item>
        <item>11025</item>
        <item>22050</item>
        <item>44100</item>
        <item>48000</item>
    </string-array>

    <string name="labelAudioThreadType">Audio Thread Type</string>

    <!-- spinnerAudioThreadType Options -->
    <string-array name="audioThreadType_array">
        <item>Java</item>
        <item>native (SLES)</item>
        <item>native (AAudio)</item>
    </string-array>

    <string name="labelChannelIndex">Channel Index</string>

    <!-- spinnerChannelIndex Options -->
    <string-array name="channelIndex_array">
        <item>Mono</item>
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
    </string-array>

    <string name="labelPlayerBuffer">Player Buffer (Frames) (Max: %1$d)</string>
    <string name="labelRecorderBuffer">Recorder Buffer (Frames) (Max: %1$d)</string>
    <string name="buttonDefaultSettings">Compute Default Settings</string>
    <string name="buttonRecordDefault">System Default Recorder Buffer</string>
    <string name="labelBufferTestDuration">Buffer Test Duration (Seconds) (Max: %1$d)</string>
    <string name="labelBufferTestWavePlotDuration">Buffer Test Wave Plot Duration (Seconds)
                                                   (Max: %1$d)</string>
    <string name="loadThreadsLabel">Number of Simulated Load Threads</string>
    <string name="enableSystrace">Systrace Captures During Test</string>
    <string name="enableBugreport">BugReport Captures During Test</string>
    <string name="enableWavSnippets">Wav Snippet Captures During Test</string>
    <string name="enableSoundLevelCalibration">
        Calibrate sound level before latency test (experimental)</string>
    <string name="numCapturesSetting">Number of Systrace/BugReport and or Wav Snippets to Capture
    </string>
    <string name="labelIgnoreFirstFrames">
        Frames to ignore at the start of the latency test (Max: %1$d)</string>

    <string name="SaveFileDialogLabel">Save Files To:</string>
    <string name="SaveFileDialogOK">//mnt/sdcard/</string>
    <string name="SaveFileDialogChooseFilenames">Choose Filenames \n and Location</string>
    <string name="heatTitle">Glitches and Callbacks over Time</string>
    <string name="compareAll">Compare All</string>

    <string name="systraceHelp">
        To use this feature it is necessary to launch a shell script on the Android device using ADB
        shell.  This script is responsible for launching an asynchronous Systrace and writing its
        buffer to file when signaled by the Loopback App.
        \n\n
        At the completion of the audio glitch/buffer test the Loopback App will signal the script to
        exit so the script must be started before each test.
        \n\n
        The Loopback App places this script on the Android device when launched at
        \n
        /sdcard/Loopback/loopback_listener
        \n\n

        Trace Categories: The loopback_listener script takes as arguments the categories to be
        tracked in the Systrace. By default the sched and audio categories are included.  For a list
        of available categories see\n
        developer.android.com/tools/help/systrace.html
        \n\n

        Example invocation:\n
        adb shell \"sh /sdcard/Loopback/loopback_listener load am\"
    </string>

    <string name="calibrateSoundLevelHelp">
        This feature is highly experimental. It will try various volume levels until it picks one
        that it thinks is optimal. It has only been tested with the loopback plug and may fail
        completely in open air.
    </string>

    <string name="notificationText">Please disregard me.</string>
</resources>
