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

2015-11-25 00:06:36 +08:00
 4641585
在 OS X 下有一个命令行音乐播放器 afplay

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

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

首先想到的就是

```
#!/bin/zsh

for music in "$@"
do
afplay ${music}
done
```

尝试运行,出现了

```
may only specify one file to play
```

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

但是……

要怎么知道当前这首歌已经播放完成了呢?
2359 次点击
所在节点    问与答
10 条回复
manoon
2015-11-25 00:21:44 +08:00
逻辑上来讲
想办法去判断一首歌的时间长度,
如果没有办法去判断,那就都设成 5 分钟

我是打酱油的,提供一个思路,哈哈。
kendetrics
2015-11-25 00:35:08 +08:00
意思就是在播放中再次执行命令就会输出 may only specify one file to play ?
你在循环里加个判断呢,如果输出匹配这个就不跳到下一首的名字去,而是继续尝试执行这一首的命令
4641585
2015-11-25 00:51:11 +08:00
@kendetrics
我用
./mysh.sh
来执行,
直接就会蹦出那句提示
MrGba2z
2015-11-25 00:53:35 +08:00
for SONG in *.mp3 ; do afplay ${SONG} ; done
4641585
2015-11-25 07:51:07 +08:00
@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
2015-11-25 08:09:31 +08:00
@MrGba2z

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

能不能分享一下脚本
liberize
2015-11-25 13:15:04 +08:00
@4641585 就你的脚本,你试下 afplay 单独播一首,是不是播完才退出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX