4641585
V2EX  ›  问与答

新手第一次写 shell 脚本遇到了一个问题

  •  
  •   4641585 · Nov 25, 2015 · 2937 views
  •   You need to sign in to view this topic
    This topic created in 3825 days ago, the information mentioned may be changed or developed.

    在 OS X 下有一个命令行音乐播放器 afplay

    但是这个命令每次只能接受一个参数

    我尝试写一个脚本让它可以播放文件下所有的音乐文件

    首先想到的就是

    #!/bin/zsh
    
    for music in "$@"
    do
            afplay ${music}
    done
    

    尝试运行,出现了

    may only specify one file to play
    

    于是我意识到应该是播放结束后执行下一次循环

    但是……

    要怎么知道当前这首歌已经播放完成了呢?

    10 replies    2015-11-25 13:15:04 +08:00
    manoon
        1
    manoon  
       Nov 25, 2015
    逻辑上来讲
    想办法去判断一首歌的时间长度,
    如果没有办法去判断,那就都设成 5 分钟

    我是打酱油的,提供一个思路,哈哈。
    kendetrics
        2
    kendetrics  
       Nov 25, 2015
    意思就是在播放中再次执行命令就会输出 may only specify one file to play ?
    你在循环里加个判断呢,如果输出匹配这个就不跳到下一首的名字去,而是继续尝试执行这一首的命令
    4641585
        3
    4641585  
    OP
       Nov 25, 2015 via iPhone
    @kendetrics
    我用
    ./mysh.sh
    来执行,
    直接就会蹦出那句提示
    v2gba
        4
    v2gba  
       Nov 25, 2015   ❤️ 1
    for SONG in *.mp3 ; do afplay ${SONG} ; done
    4641585
        5
    4641585  
    OP
       Nov 25, 2015
    @kendetrics
    ➜ /Users/{user}/Downloads/floder git:(master) ✗ ./test1 *.wav
    {
    may only specify one file to play

    Audio File Play
    Version: 2.0
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

    Usage:
    afplay [option...] audio_file

    Options: (may appear before or after arguments)
    {-v | --volume} VOLUME
    set the volume for playback of the file
    {-h | --help}
    print help
    { --leaks}
    run leaks analysis
    {-t | --time} TIME
    play for TIME seconds
    {-r | --rate} RATE
    play at playback rate
    {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
    {-d | --debug}
    debug print output
    } *n #n=$#
    4641585
        6
    4641585  
    OP
       Nov 25, 2015
    @MrGba2z

    现在比较困惑的是怎么写成一个脚本来执行
    hienchu
        7
    hienchu  
       Nov 25, 2015 via iPhone
    找个能分析 mp3 的工具,得到时间长度,问题就解决了。如果不想用工具,可以根据码率和文件大小做个大概的估计
    liberize
        8
    liberize  
       Nov 25, 2015
    我这儿 afplay 是同步的,播完才会播下一首,脚本运行没问题
    4641585
        9
    4641585  
    OP
       Nov 25, 2015
    @liberize

    能不能分享一下脚本
    liberize
        10
    liberize  
       Nov 25, 2015
    @4641585 就你的脚本,你试下 afplay 单独播一首,是不是播完才退出
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:11 · PVG 23:11 · LAX 08:11 · JFK 11:11
    ♥ Do have faith in what you're doing.