Sox/Terminalで「オーディオファイルを巻き戻せません」と表示されます。

Sox/Terminalで「オーディオファイルを巻き戻せません」と表示されます。

端末で次のコマンドを実行します。

for i in  $(ls -1 /home/pi/Desktop/Music/Acapella/*.mp3|sort -R); do sox -t mp3 $i -t wav - ; done | sudo ./pi_fm_rds -freq 102.1  -audio - -ps ZSFM -rt "ZSFM"

デフォルトでは、forloopを使用してディレクトリ内のすべてのファイルを繰り返し、すぐにwavファイルに変換してからpifmコマンドにパイプします。しかし、唯一の問題は、最初のファイルの後に次のように表示されることです。

sox WARN sox: `-' output clipped 773 samples; decrease volume?
Could not rewind in audio file, terminating
Terminating: cleanly deactivated the DMA engine and killed the carrier

これが靴下の問題なのか端末の問題なのかはよくわかりません。これが何を意味するのか、そして解決策は何ですか?

pifmコマンドの後に「done」と入力しましたが、各ファイルに対してpfmコマンドが1回実行されますが、pifmコマンドは引き続き実行され、forloopは再生中のファイルでのみ実行したいと思います。

答え1

soxにファイルを提供しています。変換してストリーミングした後、次のファイルをインポートする前に終了します。

さまざまな方法でこれを実行できます。そしていいえ、lsそのように使用しないでください。

playテスト目的で使用するもの:

#! /bin/sh -

path="/home/pi/Desktop/Music/Acapella/"

find "$path" -name '*.mp3' -print0 |
    sort -z -R |
    xargs -0 cat |
    sox -t mp3 - -t wav - |
    play -

ここで誰かが言った。

  • find$pathwhereで終わるファイルを検索し、-nameゼロ.mp3バイトで区切られたファイル名を印刷します。\0
  • sort-Rパイプのランダム入力/は0findで区切られています-z。 (別名シャッフル)
  • xargs0 で区切られたファイル名で指定された-0ファイルを連結します。
  • sox
    • -t mp3 -:stdinから読み取ったmp3入力(標準入力)
    • -t wav -:wavと入力して標準出力に書き込みます(標準出力)。
  • play標準入力のデータ-

ファイル名に改行がないことを保証できる場合は、一時プレイリストを使用することもできます。M3Uです、もっと知りたい場合はWikipediaをご覧ください。

#! /bin/sh -

# ARG 1 is path
path="$1"

# Create temporary file to use as playlist
playlist="$(mktemp /tmp/sox.XXXXXXXX.m3u)"
# Delete playlist on exit
trap 'rm "$playlist"' EXIT

#Create playlist
find "$path" -name '*.mp3' -print |
    sort -R >"$playlist"

sox "$playlist" -t wav - | play -

関連情報