顯示具有 Music 標籤的文章。 顯示所有文章
顯示具有 Music 標籤的文章。 顯示所有文章

2026-03-05

在手機上安裝完整的Linux

 termux出來很多年了,之前曾經用了一下,覺得沒什麼特別,就沒再用了。最近在網路上看到它已經能跑『完整』的Linux環境,於是再裝來玩玩看。termux標榜的是它直接使用手機的硬體,不是建構的虛擬環境裡或是透過vnc來達成。

 可以抓現成的binary apk,再透過USB(或走TCPIP)用adb把它安裝到Android手機裡,不需root你的手機。

 直接到github下載apk(以下是目前的穩定版)
https://github.com/termux/termux-app/releases/tag/v0.118.3

 把手機用USB連到電腦上,執行安裝
adb install termux-app_v0.118.3+github-debug_arm64-v8a.apk

 安裝後打開termux APP,先執行以下幾個命令
termux-setup-storage
apt update
apt upgrade

 接下來就能用apt(或用pkg指令,如果apt沒有你要的程式時)指令來安裝你想要的程式,例如
apt install wget
apt install vim
apt install vifm
apt install mpv
apt install python
apt install openssh
順便裝一下yt-dlp,從這裡抓能在linux環境直接跑的"yt-dlp"
https://github.com/yt-dlp/yt-dlp/releases
把"yt-dlp"放在你的termux下任何地方,並設定PATH到".bashrc"

 試一下執行mpv收聽網路上的串流音樂的指令,例如:
mpv http://213.141.131.10:8002/clarinet 
mpv http://serpent0.duckdns.org:8088/kbsfm.pls
mpv https://stream.classic.nl/classicnl-soundtracks.mp3
mpv https://tunein.cdnstream1.com/3519_96.aac
mpv http://tsfjazz.ice.infomaniak.ch:80/tsfjazz-high
mpv https://stream.epic-piano.com/chopin

 如果手機連上藍牙喇叭或耳機,這樣就能從藍牙喇叭聽mpv播放的串流音樂了。
可以寫個python程式,把上面的收聽串流的指令整合起來方便操作。

 也可以讀寫Android手機裡的其他APP所使用的檔案
cd ~/storage
ls -l 
看一下有哪些目錄

 vifm <--執行它來管理檔案

 在手機上跑cli程式已能滿足我目前的需要,至於在手機上跑完整Linux Desktop感覺沒什麼需要,畢竟手機螢幕就那麼小,之後再來試試termux-x11跑GUI。

 有興趣跑termux-x11然後安裝Linux完整桌面環境的人,可以試試以下幾個安裝script,都很新,有的才幾天前,也有兩三個月前,應該很容易完成。
https://github.com/orailnoor/termux-linux-setup
https://github.com/jarvesusaram99/termux-hacklab
https://github.com/jarvesusaram99/ubuntu-on-android

2024-05-31

用mpv看youtube也可以選字幕

用瀏覽器看youtube的壞處是廣告隨之而來,雖然firefox可以安裝adblock,但是在瀏覽器環境下看video還是不方便,例如要把螢幕截圖或是音量大小聲,都不如在mpv環境直接用手指來得方便。

個人認為mpv 是最方便的影音播放程式,它可以在command line執行,所以可以搭配其他程式來呼叫進行。各Linux版本都可以直接用它的管理程式來安裝,或是到以下官網下載。

https://mpv.io/

mpv可以分別按's'或大寫'S'來截圖,大寫'S'不含字幕,小寫會把字入納入。
最主要的是在mpv.conf裡加上這幾行有關截圖規格、存放目錄、檔名

screenshot-format=jpg
screenshot-jpeg-quality=90
screenshot-directory=~/caps/
screenshot-template="mpv_%ty-%tm%td_%tH%tM-%tS-%wT"

mpv 直接按 '/' 來把音量變小,或按'*' 來放大音量。

mpv也可以有各種語言字幕,當然是依youtube是否提供為準。
以下幾行關於影像解析度、字體、語言的設定,是針對較近的mpv版本使用。

ytdl-format=bestvideo[height<=?1080]+bestaudio/best
sub-font='Noto Sans'
sub-auto=fuzzy
ytdl-raw-options=ignore-config=,sub-lang="en,eng,enUS,en-US,cht,tc,zh,chi,zho,zh-TW,zh-CN,ja,jp",write-sub=,write-auto-sub=

就算你不看中國簡體字,也有需要寫zh-CN,因為youtube有些video雖然提供的是台灣正體字的字幕,但卻把定義寫成zh-CN,沒加這項就沒有字幕可看。

最後,要用mpv看youtube的話,要安裝yt-dlp,這裡有最新版
https://github.com/yt-dlp/yt-dlp

2022-05-27

fluxbox搭配pulseaudio

 fluxbox是我已經用了十幾年的window manager,我不喜歡各種Desktop, 像是GNOME
、Unity或KDE……等等Desktop, fluxbox唯一不方便的是menu未能羅列系統裡已安裝
的軟體,不過可以抓這個
https://github.com/gapan/xdgmenumaker
使用方法是:
xdgmenumaker -i -f fluxbox > $HOME/.fluxbox/sysmenu
然後在 menu把它include進去就可以了

fluxbox好用的地方在於keyboard可以任意設定來用
例如先用xev來找出某個按鍵的值,以下括號裡是我的鍵盤值,跟你的
不一定一樣

右邊獨立數字鍵的 "-"(82) 做為音量減少用
pactl set-sink-volume 7 -3%
右邊獨立數字鍵的 "+"(86) 做為音量增加用
pactl set-sink-volume 7 +3%
右邊獨立數字鍵的 "Enter"(104) 做為靜音用
pactl set-sink-mute toggle
右邊獨立數字鍵的 "."(91) 做為切換pulseaudio sink用
pactl set-default-sink N <--sink 的前導數字
(pacmd list-sinks|grep index <--有"*"號的是目前使用的)

以上可以先寫成script來讓 $HOME/.fluxbox/keys 呼叫 

pulseaudio, version:13.99.1(我目前用的版本)
要先裝好 pulseaudio-module-zeroconf,它的設定在
/etc/pulse/default.pa 或是
$HOME/.config/pulse/default.pa

做為server用的加上:
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24 <--這是local IP (不需要 auth-anonymous=1)
load-module module-zeroconf-publish
做為client用的加上: load-module module-zeroconf-discover

這樣在別台跑 pulseaudio 的電腦就可以用
pactl list short sinks 找出有哪些 sinks 可用,再以
pactl set-default-sink N <--上面列出的某一個前導數,來切換 sink.

例如我用一台orange pi zero當Internet Radio,固定連到藍芽音響,
把這台ip利用pulseaudio 設成server,家裡各台電腦就不必特別去連藍芽音響就能
播放,而各台電腦可以按右邊數字鍵"."來切換把聲音送到藍芽或是在local聽。

2021-12-31

取得網路串流的URL

為什麼要取得網路串流的URL?因為眾多網站的串流都是要操作滑鼠去點按才能聽,
這樣就不能用自動化的程式去選播收聽,所以要想辦法把它的連結找出來。

以下是用firefox來說明,其它的browser應該有類似的用法。

先以祖國古典音樂電台網站為例:
https://www.classic.nl/livestreams

找到它的播放按鈕,就是一個很一般的三角型讓你Play的,按右鍵,選Inspect

找第一橫列的 Network
找第二橫列右邊的 Media
看Indicator裡有沒有 media 按下去
看File這一欄連結的字串,按老鼠右鍵Copy URL(或Copy cURL,或Open in New Tab)
會得到以下這一串資料

https://22543.live.streamtheworld.com/CLASSICFMAAC.aac?tdsdk=js-2.9&pname=TDSdk&pversion=2.9&banners=none&sbmid=c01352ab-737f-4992-9291-8544a0764fa1

而我們要的就是 https://22543.live.streamtheworld.com/CLASSICFMAAC.aac

再以我國的教育廣播電台為例:
https://www.ner.gov.tw/
找「收聽頻道」點下去找到第一個「臺北總臺FM臺」的三角型,一樣用上面列的方法,
在File這一欄看到一個數字"1",Copy URL得到
https://cast.ner.gov.tw/1

這樣就可以用任何自動化程式(bash/python)來把串流的URL交給播放程式收聽了。

2021-11-28

crontab定時播放音樂

最近做了一個Internet Radio, 收集了一百多個有興趣的網路電台,然後想用定時
機制來播放,當然"sleep"是一個立即可用的工具,但是要去算「睡幾分鐘」就不方便
,這時想到Linux環境下的crontab是個好用的工具,可以自由設定月、日、星期、日
、分來做一些原本要手工啟動的工作。

它的基本語法就是「分 時 日 月 星 程式(參數)」

但是遇到的問題是,設定好「程式+參數」之後,時間到了確實有進行動作,但是我要的
是播放音樂叫我起床卻沒有聲音!

為了證實程式有做動作,設了一個參考檔,只有程式有動起來,就會產生參考檔。

然而在時間到的時候,參考檔有產出,喇叭卻沒發出聲音!?
一開始以為是tty的問題,試來試去也是沒聲音,最後終於找到原因,就是環境參數
XDG_RUNTIME_DIR的問題。

這個參數雖然以 X開頭,但實際上跟Xorg無關,在純console mode也需要設定它。

因此把執行程式改成獨立的script,然後在script裡面設定環境參數,如下:

export XDG_RUNTIME_DIR="/run/user/NNNN"
/PATH/music_player URL
這裡的 /run/user/NNNN 要看你電腦裡的實際字串,它可能是1000或999
這樣就能借由crontab來定時播放音樂了。

2021-04-25

辨識是否在WSL或正常Linux環境

 例用python來播放網路影音的script, 為了在標準Linux或是在WSL環境都能通用,
首先需要辨識環境,再啟用對應的播放軟體。

我們可以用 os.uname() 或 platform.uname() 來判別是在正常Linux環境或是在WSL
下的Linux環境,再呼叫指定的播放器。

在WSL環境的Linux可以直接執行Windows的播放器,例如VLC, 它在WSL裡的路徑是
/mnt/c/Program\ Files/VideoLAN/VLC/vlc.exe

platform.uname()或是os.uname() 如果是在WSL裡的linux執行會列出:
uname_result(system='Linux', node='MY_LAPTOP', release='5.4.72-microsoft-standard-WSL2', version='xxxxxx', machine='x86_64')

import csv, platform, os
from sys import argv, exit

LIST="""\
Classic Portland,http://allclassical-ice.streamguys.com/ac96kmp3
Classic NL,http://playerservices.streamtheworld.com/pls/CLASSICFM.pls
Clarinet obbo,http://213.141.131.10:8002/clarinet
Caprice cello, http://79.111.14.76:8002/cello
Chamber music,http://chambermusic.stream.publicradio.org/chambermusic.mp3
WMNF,http://stream.wmnf.org:8000/wmnf_hd3
Taiwan PBS,http://stream.pbs.gov.tw:1935/live/mp3:PBS/playlist.m3u8
ICRT,http://live.leanstream.co/ICRTFM-MP3"""

MENU = csv.reader(LIST.split('\n'))
n = 1

if len(argv) == 1:
   for x,y in MENU:
       if n%3 == 0:
          END = '\n'
       else:
          END = '\t'
       print('\033[32;1m'+str(n)+'.\033[m' +x,end=END)
       n+=1
   print('\n')
   exit(1)
else:
   for x,y in MENU:
       if argv[1].isdigit():
           if n == int(argv[1]):
               MusicLink = y
               break
           else:
               n+=1

if 'WSL' in platform.uname().release:
      PLAYER = '/mnt/c/Program\ Files/VideoLAN/VLC/vlc.exe'
else:
      PLAYER = 'mpv'

os.system('%s %s '%(PLAYER,MusicLink))

 

2020-07-19

把聲音丟到別台電腦

在同一個LAN內設好某一台已經接上喇叭的電腦做為audio server, 然後在別台電腦
播放的聲音,都可以丟到這台server放出聲音。

固然個別的應用軟體可以把聲音丟到特定的一台電腦,例如:
mpv --pulse-host=192.168.5.10 http://stream.srg-ssr.ch/m/rsc_fr/aacp_96

但是每個產生聲音的應用程式都要加上遠端server的參數就有一點麻煩,如果直接
在電腦總控聲音的設定檔寫好遠端電腦的傳輸協定,就可以一次搞定,不必每一個
應用軟體都設定。

可以利用pulseaudio來達成這個目的。
要做為音效server的電腦:
/etc/pulse/default.pa
load-module module-native-protocol-tcp \
auth-ip-acl=127.0.0.1;192.168.5.0/24 [auth-anonymous=1]
以上是接受整個網段其他電腦都可以把聲音丟過來。
(記得firewall要打開4713)

同一段LAN內其他client電腦:
/etc/pulse/default.pa
load-module module-tunnel-sink \
sink_name=NEO server=tcp:192.168.5.10:4713
(那一台server電腦是NanoPi NEO, 名字可以隨便寫)

設定好之後執行一下 pulseaudio -k; pulseaudio --start

這樣在同一個LAN內的任何電腦(client)都可以把任何程式產生的聲音丟給NEO,
包括在看youtube所產生的聲音也一樣會被丟到server.


2019-01-01

Roland AE-05 連接Linux

拿到一支Roland AE-05(Aerophone Go), 從說明書看,它可以透過藍牙跟手機連接,
然後利用手機來設定AE-05,或是用手機接受AE-05來播放額外的MIDI音源,因為
AE-05內建只有11種音源(包括一組打擊樂器),如果用手機可以播放額外幾十種音源,
不過這時要把AE-05本身的音量關到零。

首先遇到的問題就是手機無法連上AE-05的藍牙,裝了Aerophone Go APP也是連不到,
經過確認是安鳳無法連AE-05,只能用哀鳳或哀Pad連!(需要iOS 11或以上)

把AE-05透過USB線插到電腦後可以看到VID/PID

lsusb
Bus 006 Device 002: ID 0582:01d1 Roland Corp.

cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xd4500000 irq 30
 1 [AE05           ]: USB-Audio - AE-05
                      Roland AE-05 at usb-0000:00:1d.1-1, full speed

cat /proc/asound/AE05/usbid
0582:01d1

cat /proc/asound/AE05/usbmixer
USB Mixer: usb_id=0x058201d1, ctrlif=0, ctlerr=0
Card: Roland AE-05 at usb-0000:00:1d.1-1, full speed

dir /dev/snd/by-id/
total 0
lrwxrwxrwx 1 root root 12 12月 30 20:33 usb-Roland_AE-05_FFFFFFFEFFFF-00 -> ../controlC1

以上確認Linux能夠看到Roland AE-05的device, 再來檢查一下是否能收到AE-05送過來
的訊號?

aconnect -i
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 20: 'AE-05' [type=kernel]
    0 'AE-05 MIDI 1    '

指定 port 20
aseqdump -p 20

這時按AE-05的鍵或是吹氣出聲,都會從螢幕上列出一大串MIDI的值
 20:0   Control change          0, controller 2, value 95
 20:0   Control change          0, controller 11, value 95
 20:0   Control change          0, controller 2, value 90
 20:0   Control change          0, controller 11, value 90
 20:0   Control change          0, controller 2, value 82
 20:0   Control change          0, controller 11, value 82
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0F 64 03 F7
 20:0   Control change          0, controller 2, value 90
 20:0   Control change          0, controller 11, value 90
 20:0   Note on                 0, note 47, velocity 100
 20:0   Note off                0, note 45, velocity 0
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0F 60 07 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0E 60 08 F7
 20:0   Control change          0, controller 2, value 82
 20:0   Control change          0, controller 11, value 82
 20:0   Note on                 0, note 65, velocity 100
 20:0   Note off                0, note 47, velocity 0
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 06 60 10 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 06 40 30 F7
 20:0   Control change          0, controller 2, value 74
 20:0   Control change          0, controller 11, value 74

還未解決的問題是能否吹奏AE-05 讓腦裡來播出各種MIDI?

2017-03-31

DietPi 網路收音機

前陣子Asus低調的出了一款Tinker board, 可以說是仿Raspberry Pi, 因為
整個尺寸跟layout可以說完全跟Raspberry Pi一樣, 大概就是RAM比較大,有2G,
在台灣的售價不高於2200元.(RPi 3 大約1350元)

http://dietpi.com 是個比較特別的Raspberry Pi Linux版本, 除了是源自
Raspbian, 可以用在Raspberry Pi 之外, 還有提供給各種不同ARM SoC的版本.

它不預裝一堆你可能用不到的東西,所以整個系統可以dd到1GB的MicroSD
卡上面使用.

當然by default也就沒有Xwindow, 但因為它仍是Raspbian base, 所以可以使用
Raspbian/Debian的repository來安裝自己想要的軟體.

它有幾個特別之處,就是把常有r/w的目錄, 改成tmpfs來使用,除了可以提高
r/w速度也能延長SD卡壽命.

因為Raspberry Pi 3有Wifi, 所以接著就利用它來做為網路收音機.

先收集喜好的網路電台URL, 利用python寫一個script用來變換電台
推薦這個德國的音樂網站,有很多種類的音樂
http://stream.klassikradio.de/
用樣的利用python/bash寫一個web CGI介面, 便可以用瀏覽器控制電台變換
這樣也不需login到Raspberry Pi裡面操作

最後再加上先前利用8x8LED 加一個Arduino Micro做的顯示器
用來在開機時顯示Raspberry Pi的IP, 共兼做各種資訊的顯示
(8x8LED至少可以顯示英文字母+數字+常用符號)