moc(Music On Console):Linux 上,一個基於 ncurses 庫的命令行音樂播放器

分類:IT技術 時間:2017-08-11
-- 我無意鼓勵別人去學什麽 Geek 精神,雖然在某些時刻,我也是很喜歡 Unix 哲學的。

  -- 假如,你對圖形界面音頻播放器的高內存占用真的覺得不爽的話,那不妨去試試命令行音樂播放器吧。

  -- 也許,命令行音樂播放器不具備許多圖形界面音樂播放器的某些功能,但請相信我,你所需要的本地音樂播放器所具備的功能在將它們配置完成了之後就有了,真的。最重要的是:它們對內存的要求真的比圖形界面音樂播放器少太多了。

  moc 是一款運行在 linux 終端(終端和偽終端 pts )上的音樂播放器(據我所知,cmus 是另外一款有名的命令行音樂播放器,它的功能貌似要比 mocp 強一些,配置也稍簡單一點。雖然不知道 cmus 是否可以支持使用 osdlyrics 加載桌面歌詞,但毫無疑問,moc 是可以的),假如有 pam 的話貌似還可以在終端上使用鼠標。

>   事實上,由 moc 軟件包所提供的 *mocp* 程序才是真正的音樂播放器程序。因為是基於 ncurses 庫的,所以它在黑乎乎的 Linux 核心控制臺(字符界面)上也能工作的很好,雖然,Linux 核心控制臺默認是沒有中文支持的,但假如在 fbterm (因為 fbterm 是直接從核心控制臺啟動的,不需要運行 X 服務)上運行的話卻能獲得不錯的體驗(需要一番手動配置才行,如果全是英文歌曲的話例外)。


--------------------
## 1. Install moc from system mirrlist ##
+ 基本上很多 Linux 發行的官方源中已經包含了這個軟件包,因此安裝的話直接使用默認的軟件包管理工具安裝就行了。Arch Linux 的是 pacman。
+ mocp 播放音頻需要多媒體解碼器插件支持,因此在啟動 mocp 之前,安裝多媒體解碼器是有一些必要性的,如果需要啟用更多的音頻格式支持的話。關於多媒體解碼器,可以參考 [Arch Linux 的多媒體解碼器條目](https://wiki.archlinux.org/index.php/Codecs)。

>   假如希望 mocp 可以像某些應用程序一樣能有一個圖標停靠在面板上並能通過這個圖標對播放器進行控制的話,那就安裝 tray 版本的 moc(只是一個封裝),可以在啟動時直接啟動 mocp 服務和播放器並停靠在面板上,支持在停止/播放/暫停/退出、下一首/上一首等動作中切換,不過其中的一些動作需要在 mocp 中配置播放列表才能得到正確響應。 

## 2. mocp Configure ##
>   mocp 默認會讀取音頻文件元信息(包括標題,歌手,專輯等信息)並顯示在播放列表,這當然沒有任何問題。
然而,因為 Windows 中的音頻文件元信息(ID 標簽)所使用的 GBK 字符編碼集和 Linux 使用的 UTF-8 字符編碼集在編碼方式存在很大的差異。因此,從 windows 下載的音頻文件可能在播放列表中很多文件信息顯示為亂碼。

也許不讀取這些元信息可以讓 moc 的文件信息不顯示為亂碼,但並不能從根本上解決音頻文件元信息顯示為亂碼的問題!如果確實需要元信息正常顯示,可以在 [Arch wiki 中文化條目][0] 找到解決方案。

!在配置 mocp 之前,從 moc 的 man 手冊頁或者 info 頁獲取更多的信息(比如基本使用方式,配置文件是什麽,應該放到什麽位置,格式應該是什麽樣的......) 也許是一個不錯的做法。`mocp --help` `man mocp` `info mocp`

### 2.1 mocp 配置文件 ###
  
  拷貝 mocp 示例配置文件(這在 moc 的 man 或者 info 頁有更詳細的介紹)到 ~/.moc (沒有就創建),參數配置可以從示例文件 config.example (可以運行 locate config.example)中找到 。也許 mocp 的示例配置文件使用了英文,看起來有些晦澀難懂,但作者解釋的很清楚)。 

```Bash
 mkdir ~/.moc 
 cp $(locate config.example) ~/.moc/config 
```
 
下面這些都是從示例配置文件拷過來的,以 # 號開始的行被視為註釋。
命令行上的 -O 選項能覆蓋任何配置文件中的選項
```Bash
mocp -O AutoNext=no -O messagelingertime=1 -O XTerms+=xxt:xwt 
```

========== ~/.moc/config ========== 
```Bash
 ReadTags = no # 不讀取音頻文件元信息

 MusicDir = /media/Others/Music # MusicDir?
 StartInMusicDir = yes # 啟動時進入 MusicDir?
 #Sort = FileName # 排序方式,默認使用了文件名
  
 # Ignore CRC errors in MP3 files? Most players do that, so the default value is 'yes'. 
 MP3IgnoreCRCErrors = yes # 忽略音頻文件 CRC 錯誤?
  
 # 設置播放標誌 
 Repeat = yes #是否循環播放 
 Shuffle = yes #是否開啟隨機播放 
 AutoNext = yes #是否自動播放下一首 
  
 # 狀態欄默認顯示格式?
 # %n - Track number,%a - Artist,%A - Album,%t - Title,%(X:TRUE:FALSE) 
 # Ternary expression: if X exists, do TRUE,otherwise FALSE. The escape character must be doubled (i.e., '\\'). (See zshmisc documentation for more information.) 
 FormatString = "%t" 
 SoundDriver = ALSA:OSS:JACK # 聲音驅動?現代默認都使用了ALSA
 ALSAMixer2 = Master 
 Softmixer_SaveState = yes # 保存軟件音效狀態?
 #Equalizer_SaveState = yes # 保存eq音效? 
  
 ShowHiddenFiles = yes # 顯示隱藏文件?
 HideFileExtension = yes # 是否隱藏文件擴展名?
 ShowFormat = no # 在列表中顯示文件格式?
 ShowTime = yes # 顯示音頻文件時間信息?
 ShowTimePercent = yes # 使用百分比顯示播放進度?
 Theme = user_moca_theme # 主題?用戶自定義主題位於 ~/.moc/themes
  
 AutoLoadLyrics = yes # 自動載入歌詞?
 LyricsTimeout = 2 
  
 # Assume this encoding for ID3 version 1/1.1 tags (MP3 files). Unlike ID3v2, UTF-8 is not used here and MOC can't guess how tags are encoded.Another solution is using librcc (see the next option). This option is ignored if UseRCC is set to 'yes'. 
 ID3v1TagsEncoding = WINDOWS-1250 
  
 UseRCC = yes # Use librcc to fix ID3 version 1/1.1 tags encoding. 
  
 #UseRCCForFilesystem = yes # Use librcc to filenames and directory names encoding. 
  
 # When this option is set the player assumes that if the encoding of ID3v2 is set to ISO-8859-1 then the ID3v1TagsEncoding is actually that and applies appropriate conversion. 
 #EnforceTagsEncoding = no 
  
 # Enable the conversion of filenames from the local encoding to UTF-8.  
 FileNamesIconv = yes # 允許轉換文件名本地編碼到 UTF-8?
 SavePlaylist = yes # 退出後保存播放列表?
 SyncPlaylist = yes # 同步播放列表?
  
 # moc鍵盤映射配置 
 ## 一個示例文件keymap.example在 $prefix/share/moc下 
 Keymap = keymap 
 Allow24bitOutput = no # 允許 24 位輸出
 PlaylistNumbering = yes # 播放列表項編號?
 Layout1 = playlist(0,0,FILL,100%) # mocp播放界面布局配置 
 FollowPlayedFile = yes  # 跟隨正在播放的文件?
  
 # What to do if the interface was started and the server is already playing something from the playlist? If CanStartInPlaylist is set to 'yes', the interface will switch to the playlist. When set to 'no' it will start from the last directory. 
 CanStartInPlaylist = yes 
  
 PlaylistFullPaths = no # 是否顯示播放列表文件全路徑 
 ........... 
```
 
----------------------------------------------------------------------------------------------------
### 2.2 mocp鍵盤映射配置 ###

!mocp鍵盤映射自定義,示例鍵盤映射可以從$prefix/share/moc/keymap.example找到,mocp 的所有鍵映射可以直接在 mocp 界面按 h 或者 ? 獲得。

========== ~/.moc/keymap ==========  
```bash
menu_up            = k UP 
menu_down        = j DOWN 
menu_page_up            = ^b PAGE_UP 
menu_page_down        = ^d PAGE_DOWN 
menu_first_item        = M-b HOME 
menu_last_item        = M-d END 
```

----------------------------------------------------------------------------------------------------
### 2.3 mocp 主題:一個好的主題能產生不錯的顯示效果,假如真的需要的話。###
>   mocp 主題默認安裝到 $prefix/share/moc/themes 目錄下,可以自定義主題只對用戶生效(放到 ~/.moc/themes 目錄下)。

>   mocp 啟動時指定的主題或者在用戶級配置文件 ~/.moc/config 中指定的主題可以自動從 $prefix/share/moc/themes 和 ~/.moc/themes 中讀取.(沒有就要在 ~/.moc/config的Theme 使用絕對路徑來指定) 

----------------------------------------------------------------------------------------------------
創建 ~/.moc/themes 目錄以及拷貝主題骨架文件。
```Bash
 mkdir -pv ~/.moc/themes 
 cp /usr/share/moc/themes/moca_theme ~/.moc/themes/user_moca_theme  
```

========== ~/.moc/themes/user_moca_theme ========== 
```Bash
background        = white    default bold     
frame            = white    default bold     
window_title        = yellow    default    bold 
directory        = white        default 
selected_directory    = white        default bold 
playlist        = white default 
selected_playlist    = cyan        default    bold 
file            = green default bold 
selected_file        = white black bold 
....... 
```

----------------------------------------------------------------------------------------------------
>   如果 mocp 是運行在 fbterm 上的,請不要隨意將終端類型設為 fbterm,雖然這樣理論上是可以支持 256 色顯示(如果需要 256 色,那還不如直接在 fbterm 上運行 tmux 來得到真正的 256 色顯示,在運行了 tmux 的fbterm 上,應用程序可以正常運行和繪制,最主要的實際內存占用也不算高),因為這會讓一些基於 ncursers 庫的命令行程序(比如mc和alsamixer,mocp)的界面變得淩亂。

雖然 vim 不是這樣。

## 3. osdlyrics ##
>   雖然 mocp 聲稱自己可以在控制臺上加載歌詞(但僅限於某些 utf-8 編碼的 ascii 文本(純英文),而且不支持同步滾動),假如需要一個能加載歌詞(包括桌面歌詞)的軟件的話,可以嘗試一下 osdlyrics。

(osdlyrics 是一個集下載,加載與顯示音頻歌詞的 Linux 通用實現,它支持多種播放器,比如 smplayer,vlc,RhythmCat,moc 等,理論上,osdlyrics 是支持 moc的,但實際上也確實支持,但在加載歌詞時卻存在卡頓的問題。而且,假如某一首音頻文件所對應或者關聯的 *lrc* 文件存在問題的話(比如格式不是 UTF-8),也會讓 mocp 直接阻塞,這個時候點擊 mocp 時是不會產生響應的)。

  osdlyrics 有兩種啟動方式,一種是先啟動一個 osdlyrics 所支持的播放器(關於它所支持的播放器,當未打開任何播放器時打開 osdlyrics 即可看到),然後再啟動 osdlyrics 時會自動加載音頻文件的歌詞。另外一種方式就是直接啟動 osdlyrics 的同時啟動想要啟動的播放器,mocp 也支持被這樣啟動(這同樣需要進行設置)。

## 4. moc 在 Fedora 上運行出現的一個錯誤...... ##
> WARNING: The following fatal error message may be bogus!
If you have an empty /etc/popt.d directory, try
adding an empty file to it.  If that does not fix
the problem then you have a genuine error.

FATAL_ERROR: Error reading default POPT config file: 沒有那個文件或目錄
這個錯誤很好解決,那就是可以直接創建一個空的文件到這個目錄。以根用戶權限執行:
``` Bash
 mkdir -pv /etc/popt.d
 touch /etc/popt.d/mocp.conf
```
[0]:  https://wiki.archlinux.org/index.php/Arch_Linux_Localization_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

Tags: 播放器 音樂 Linux 軟件包 終端 控制臺

文章來源:


ads
ads

相關文章
ads

相關文章

ad