Cool, does this replace the existing e2daudiotest I guess? Also, has it
already been shown to work on all of the listed board?

On Tue, May 15, 2012 at 9:00 AM, Harsh Prateek Bora
<harsh.b...@linaro.org>wrote:

>    AudiVal (Audio Validation Suite for Linux)
>
> This is an attempt to automate and integrate various audio related tests
> which
> can help validate audio on various boards supported by Linaro. Motivation
> for
> this project comes from various audio tests listed at:
> https://wiki.linaro.org/TomGall/LinaroAudioFeatureIndex
>
> The git repo for this project can be cloned from:
> git://git.linaro.org/people/harshbora/audival.git
>
> Various files required by this script are available in the git repo.
>
> Requesting all to test this script on various boards that you may have
> access
> to and share feedback to make it better.
>
> TODO: Add tests for Audio over USB, Bluetooth.
>
> Signed-off-by: Harsh Prateek Bora <harsh.b...@linaro.org>
>
> diff --git a/AudiVal.py b/AudiVal.py
> new file mode 100755
> index 0000000..7d56c4e
> --- /dev/null
> +++ b/AudiVal.py
> @@ -0,0 +1,247 @@
> +#!/usr/bin/env python
> +#
> +# Audival : Audio Validation Suite for Linux.
> +#
> +# Author: Harsh Prateek Bora
> +#         <harsh.b...@linaro.org>
> +#         <ha...@linux.vnet.ibm.com>
> +
> +import os
> +import sys
> +import getopt
> +from subprocess import * # for calling external programs
> +import commands # deprecated since python 2.6, Python 3.0 uses subprocess
> +
> +def usage():
> +    print "========================================="
> +    print "AudiVal: Audio Validation Suite for Linux"
> +    print "========================================="
> +    print "Usage:"
> +    print sys.argv[0], "[--check-info]"
> +    print
> +    print "Supported HW: PandaBoard (ES), BeagleBoard (XM), i.MX53,
> i.MX6, Origen, Snowball"
> +    sys.exit(1)
> +
> +SpeakerJack = {
> +    'GenuineIntel':     'Analog',
> +    'Panda':            'Headset',
> +    'Beagle':           'TWL4030',
> +    'i.MX53':           'HiFi',
> +    'i.MX6':            'HiFi',
> +    'ORIGEN':           'Pri_Dai',
> +    'Snowball':         'Headset'
> +}
> +
> +MicJack = {
> +    'GenuineIntel':     'Analog',
> +    'Panda':            'Headset', # not sure though, arecord doesnt work
> for me!
> +    'Beagle':           'TWL4030',
> +    'i.MX53':           'HiFi',
> +    'i.MX6':            'HiFi',
> +    'ORIGEN':           'Pri_Dai',
> +    'Snowball':         'Headset'
> +}
> +
> +# As and when HDMI out/in device string differs, we'll need 2
> dictionaries.
> +HDMI_Audio = {
> +    'GenuineIntel':     'HDMI',
> +    'Panda':            'HDMI',
> +    'Beagle':           'HDMI',
> +    'i.MX53':           'HDMI',
> +    'i.MX6':            'HDMI', # audio out only supported, audio in not
> supported.
> +    'ORIGEN':           'HDMI',
> +    'Snowball':         'hdmi'  # odd one, lowercase
> +}
> +
> +Audio_Devices = {
> +    'playback':    'aplay-l.log',
> +    'capture':     'arecord-l.log'
> +}
> +
> +def get_device_list(logfile):
> +    fobj = open(logfile)
> +    return fobj
> +
> +def get_card_device_info_by_name(devicestr, fobj):
> +    """Helper routine to get card, device number by interface name"""
> +    optxt = fobj.readlines()
> +    card = ""
> +    device = ""
> +    for line in optxt:
> +        if devicestr in line:
> +            cardtext, colon, text = line.partition(':')
> +            pre, sep, card = cardtext.partition(' ')
> +            devtext, colon, text = text.partition(':')
> +            pre, sep, device = devtext.partition('device ')
> +            break
> +    hwstr = 'plughw:' + card + ',' + device
> +    if card is "" and device is "":
> +        return None
> +    return hwstr
> +
> +def speaker_test_audio_jack(board):
> +    fobj = get_device_list(Audio_Devices['playback'])
> +    print "speaker-test over audio jack .."
> +    headset_jack_id = get_card_device_info_by_name(SpeakerJack[board],
> fobj)
> +    fobj.close()
> +    if headset_jack_id is None:
> +        print "No Audio Jack found !"
> +        return
> +    call("date > speaker-test-jack.log", shell=True)
> +    cmdstr = "speaker-test -D " + headset_jack_id + " -t s -c 2 -l 1 >
> speaker-test-jack.log 2>&1"
> +    call(cmdstr, shell=True)
> +    print "If you heard beeps from left and right speaker, test passed."
> +
> +def aplay_over_jack(board):
> +    fobj = get_device_list(Audio_Devices['playback'])
> +    headset_jack_id = get_card_device_info_by_name(SpeakerJack[board],
> fobj)
> +    print "Testing aplay over audio jack .."
> +    fobj.close()
> +    if headset_jack_id is None:
> +        print "No Audio Jack found !"
> +        return
> +    cmdstr = "aplay login.wav -D " + headset_jack_id
> +    call(cmdstr, shell=True)
> +    print "If you heard a stereo sound, test passed."
> +    # Check dmesg to see if there is an error or I2C error
> +    call("dmesg | tail | grep error", shell=True)
> +    print "Note: Error, if any, shall be displayed above."
> +
> +def arecord_and_aplay_over_audio_jack(board):
> +    # Record the WAV stream and play it back.
> +    fobj = get_device_list(Audio_Devices['capture'])
> +    mic_jack_id = get_card_device_info_by_name(MicJack[board], fobj)
> +    if mic_jack_id is None:
> +        print "No Mic Jack found !"
> +        return
> +    cmdstr = "arecord -c 2 -f S16_LE -d 10 -r 44100 aud44k16S.wav -D " +
> mic_jack_id
> +    print "Testing arecord over audio jack .."
> +    print "Started recording audio over jack for 10 seconds (replay
> follows) .."
> +    call(cmdstr, shell=True)
> +    print "Replaying the recorded audio now .."
> +    call("aplay aud44k16S.wav", shell=True)
> +    # Check dmesg to see if there is an error or I2C error
> +    call("dmesg | tail | grep error", shell=True)
> +    print "If you heard the recorded audio, test passed."
> +    print "Note: Error, if any, shall be displayed above."
> +    fobj.close()
> +
> +def speaker_test_over_hdmi(board):
> +    """ speaker-test over HDMI audio interface. """
> +    fobj = get_device_list(Audio_Devices['playback'])
> +    print "Running speaker-test over HDMI .."
> +    # Automatic detection of card,device number for HDMI interface
> +    hdmi_hw_id = get_card_device_info_by_name(HDMI_Audio[board], fobj)
> +    if hdmi_hw_id is None:
> +        print "No HDMI device found !"
> +        return
> +    cmdstr = "speaker-test -D " + hdmi_hw_id + " -t s -c 2 -l 1 >
> speaker-test-hdmi.log 2>&1"
> +    print "speaker-test over HDMI .."
> +    call(cmdstr, shell=True)
> +    print "If you heard beeps from left and right speaker, test passed."
> +    fobj.close()
> +
> +def arecord_and_aplay_over_hdmi(board):
> +    """ arecord and aplay over HDMI audio interface. """
> +    fobj = get_device_list(Audio_Devices['capture'])
> +    print "Testing arecord over HDMI .."
> +    # Automatic detection of card,device number for HDMI interface
> +    hdmi_hw_info = get_card_device_info_by_name(HDMI_Audio[board], fobj)
> +    if hdmi_hw_info is None:
> +        print "No HDMI device found !"
> +        sys.exit(1)
> +        return
> +    arecord_cmd = "arecord -D " + hdmi_hw_info + " -c 2 -f S16_LE -d 10
> -r 44100 aud44k16S.wav"
> +    aplay_cmd = "aplay -D " + hdmi_hw_info + " aud44k16S.wav"
> +    print "Started recording audio over HDMI for 10 seconds (replay
> follows).."
> +    call(arecord_cmd, shell=True)
> +    print "Replaying the recorded audio now .."
> +    call(aplay_cmd, shell=True)
> +    # Check dmesg to see if there is an error or I2C error
> +    call("dmesg | tail | grep error", shell=True)
> +    print "If you heard the recorded audio, test passed."
> +    print "Note: Error, if any, shall be displayed above."
> +    fobj.close()
> +
> +def mixer_panda():
> +    # silently setup mixer using -q
> +    call("amixer sset Headset 10 -q", shell=True)
> +    call("amixer sset 'Headset Left Playback' 'HS DAC' -q", shell=True)
> +    call("amixer sset 'Headset Right Playback' 'HS DAC' -q", shell=True)
> +
> +def mixer_nop():
> +    pass # for unknown mixer settings
> +
> +MixerSetup = {
> +    'GenuineIntel':     mixer_nop,
> +    'Panda':            mixer_panda,
> +    'Beagle':           mixer_nop,
> +    'i.MX53':           mixer_nop,
> +    'i.MX6':            mixer_nop,
> +    'ORIGEN':           mixer_nop,
> +    'Snowball':         mixer_nop
> +}
> +
> +def audio_tests(board):
> +    MixerSetup[board]()
> +    # minimal speaker test producing a sine wave tone.
> +    speaker_test_audio_jack(board)
> +
> +    # testing alsa with a stereo sound using aplay over jack
> +    aplay_over_jack(board);
> +    # Record a WAV stream using arecord and play it back over jack.
> +    arecord_and_aplay_over_audio_jack(board)
> +
> +    # speaker-test over HDMI
> +    speaker_test_over_hdmi(board) # Need to test, dont have HDMI hw !
> +    # arecord and aplay over HDMI
> +    arecord_and_aplay_over_hdmi(board) # Need to test, dont have HDMI hw !
> +
> +
> +def check_sound_info():
> +    print
> +    print "Running alsa-info.sh ..\n"
> +    call("alsa-info.sh --stdout", shell=True)
> +    print "************************************************\n"
> +
> +def main():
> +    cpuinfo = ["Beagle", "Panda", "i.MX6", "i.MX53", "ORIGEN",
> "Snowball", "GenuineIntel"]
> +    long_options = ["check-info"]
> +    runtest = ""
> +    try:
> +        opts, args = getopt.getopt(sys.argv[1:], "", long_options)
> +    except getopt.GetoptError, err:
> +        # print help information and exit
> +        # will print something like "option -a not recognized"
> +        sys.stderr.writelines(str(err)+"\n")
> +        usage()
> +
> +    call("aplay -l > aplay-l.log", shell=True)
> +    call("arecord -l > arecord-l.log", shell=True)
> +
> +    for opt, arg in opts:
> +        if opt == '--check-info':
> +            print "Checking Sound/Audio related info ..."
> +            check_sound_info()
> +            sys.exit(0)
> +        else:
> +            print "unhandled option:", opt
> +            usage()
> +
> +    cpufile = open("/proc/cpuinfo")
> +    cputext = cpufile.readlines()
> +
> +    for line in cputext:
> +        for board in cpuinfo:
> +            if board in line:
> +                print "Hardware Detected: %s" % board
> +                print "Running audiotests for %s .." % board
> +                audio_tests(board)
> +                sys.exit(0)
> +
> +    print "Err, looks like your hardware is not supported."
> +    print "Please report to harsh.b...@linaro.org"
> +    sys.exit(1)
> +
> +if __name__ == "__main__":
> +    main()
> diff --git a/login.wav b/login.wav
> new file mode 100644
> index 0000000..ec06433
> Binary files /dev/null and b/login.wav differ
>
> _______________________________________________
> linaro-dev mailing list
> linaro-dev@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-dev
>
_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to