#mpd #music #file-path #alsa #fifo #service #devices

app hidamari

姬达玛里 MPD 控制器

1 个不稳定版本

0.1.0 2020 年 8 月 19 日

#488音频

MIT/Apache

3.5MB
11K SLoC

Rust 8K SLoC // 0.0% comments JavaScript 3K SLoC // 0.0% comments Bitbake 11 SLoC // 0.2% comments

姬达玛里

姬达玛里是 MPD (音乐播放器守护进程) 的控制器。

您可以通过 PC 或 Futurephone 浏览器控制 MPD。

您可以轻松地从库中选择歌曲,操作播放列表,播放/停止歌曲。

此外,视觉动画会在播放时让您感觉良好。

日本文档在此处 here

演示视频

它正在开发中。

YouTube

屏幕截图

它正在开发中。

播放列表

播放器

  • 频谱可视化
  • 频谱可视化
  • 频谱可视化
  • 频谱可视化全屏模式

功能

  • 它是用 RUST 实现的。它基本上是一个使用 tokio、hyper 和 wrap 的网络服务。
  • 您可以通过浏览器播放/停止播放列表、调整音量、编辑播放列表、查看库,并执行其他基本 MPD 操作。此外,还使用 WebSocket 实时将 MPD 状态和频谱信息发送到浏览器。
  • 使用 MPD 的 FIFO 输出对 PCM 数据进行 FFT 分析,并将频谱信息发送到浏览器。这使得浏览器能够可视化音乐的频谱信息。
  • ALSA的PCM数据输入可以通过HIDAMARI转换为HTTP流,并由MPD播放。这使得可以播放音频源板上的线路输入,并且通过使用bluealsa,您还可以在MPD格式中播放其他蓝牙设备的音乐。
    • MPD 0.22.x中似乎增强了ALSA输入,但与当前发布的MPD 0.21.x版本兼容性不好。
  • MPD的FIFO输出可以直接重定向到HIDAMARI的ALSA输出。这使得您可以使用bluealsa在其他蓝牙设备上播放音乐。
    • 输出到ALSA也可以使用MPD完成,但由于输出设备不能动态添加,每次都必须重新启动MPD,这在HIDAMARI中是不必要的。
  • MPD的HTTP输出可以通过HIDAMARI代理。这使得您可以使用与访问HIDAMARI的http相同的路径获取MPD的HTTP输出。
  • 您可以从浏览器管理您的蓝牙设备。蓝牙配对也可以从浏览器进行。
    • MPD可以用作浏览器中的蓝牙音乐源或蓝牙扬声器。
  • 您可以得到专辑封面。专辑封面可以从本地音乐文件标签数据、本地目录中的图像文件或UPNP服务器(DLNA服务器)中检索。
    • 专辑封面似乎在MPD 0.22.x中得到了增强,但在当前发布的MPD 0.21.x版本中表现不佳。
  • 所有MPD和HIDAMARI的操作都可以通过JavaScript等从http REST格式完成。这使得您能够以自己的方式自定义UI。您还可以自定义矢量信息可视化。

构建和运行。

Debian或Raspbian(树莓派操作系统)

  • 安装以下内容

    • mpd
    • bluez
    • bluealsa
  • 通过使用mpd的FIFO输出,在/etc/mpd.conf中进行以下设置,然后重新启动mpd。

audio_output {
    type                    "fifo"
    name                    "my_fifo"
    path                    "/tmp/mpd.fifo"
    format                  "44100:16:2"
}
$ systemctl restart mpd.service
  • 要启用bluealsa配置文件,修改/lib/systemd/system/bluealsa.service脚本如下
[Unit]
Description=BluezALSA proxy
Requires=bluetooth.service
After=bluetooth.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/bluealsa -p a2dp-source -p a2dp-sink
$ systemctl daemon-reload
$ systemctl restart bluealsa.service
  • 安装构建所需的库。
    • 您需要以下库
    • libasound2-dev
    • libflac-dev libflac8
    • libogg-dev libogg0
    • libdbus-1-dev libdbus-1-3
    • libsystemd-dev libsystemd0
    • liblz4-dev liblz4-1
    • liblzma-dev liblzma5
    • libgcrypt20-dev libgcrypt20
    • libgpg-error-dev libgpg-error0
$ apt-get install libasound2-dev libflac-dev libflac8 libogg-dev libogg0
$ apt-get install libdbus-1-dev libdbus-1-3 libsystemd-dev libsystemd0 liblz4-dev liblz4-1 liblzma-dev liblzma5 libgcrypt20-dev libgcrypt20 libgpg-error-dev libgpg-error0
  • 对于libflac,执行以下操作以避免编译错误
$ cd /usr/lib/x86_64-linux-gnu
or
$ cd /usr/lib/arm-linux-gnueabihf
$ ln -s libFLAC.so libflac.so
  • 获取源代码并编译它。
    • 如果可能,使用--release编译。如果您使用--debug编译,CPU负载高,执行速度慢。
$ git clone https://github.com/zuntan/hidamari.git
$ cd hidamari
$ cargo build --release
  • 向执行(或编译)用户的组中添加一个蓝牙组。没有这个,您将无法从HIDAMARI控制蓝牙。
$ usermod -G bluetooth -a <<User>>
  • 检查hidamari.conf。下面是hidamari.conf中的值。

  • 执行。

$ cargo run --release

Debian为树莓派进行交叉构建

  • 作为先决条件,您应该能够使用上面描述的方法使用Debian进行编译。

  • 安装工具链。例如,安装~/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf。

$ cd ~
$ wget https://dl.armbian.com/_toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
$ tar xvJf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
$ vi ~/.profile
export PATH="$HOME/.cargo/bin:$HOME/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH"
  • 将raspbian仓库添加到APT系统。
$ cat <EOT > /etc/apt/sources.list.d/raspbian.list
deb [arch=armhf] http://archive.raspbian.org/raspbian jessie main contrib non-free
EOT
$ wget https://archive.raspbian.org/raspbian.public.key -O - | apt-key add -
$ dpkg --add-architecture armhf
$ dpkg --print-foreign-architectures
  • 实现armhf库。
$ apt-get update
$ apt-get install libasound2-dev:armhf libflac-dev:armhf libflac8:armhf libogg-dev:armhf libogg0:armhf
$ apt-get install libdbus-1-dev:armhf libdbus-1-3:armhf libsystemd-dev:armhf libsystemd0:armhf liblz4-dev:armhf liblz4-1:armhf liblzma-dev:armhf liblzma5:armhf libgcrypt20-dev:armhf libgcrypt20:armhf libgpg-error-dev:armhf libgpg-error0:armhf
  • 对于libflac,执行以下操作以避免编译错误
$ cd /usr/lib/arm-linux-gnueabihf
$ ln -s libFLAC.so libflac.so
  • 使用cargo构建。我们需要设置一些环境变量。
$ export PKG_CONFIG_armv7_unknown_linux_gnueabihf=1
$ export PKG_CONFIG_PATH_armv7_unknown_linux_gnueabihf=/lib/arm-linux-gnueabihf/pkgconfig
$ cargo build --release --target armv7-unknown-linux-gnueabihf
  • 检查构建文件。
$ file target/armv7-unknown-linux-gnueabihf/release/hidamari
target/armv7-unknown-linux-gnueabihf/release/hidamari: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped
  • 将生成的可执行文件传输到您的树莓派,然后在树莓派上运行它。

执行所需的文件

  • hidamari
    • 可执行程序
  • hidamari.conf
    • 配置文件。同一目录或/etc中的hidamari.conf被引用。(您也可以在运行时将其指定为第一个参数。)
  • hidamari_dyn.conf
    • 动态配置文件。每次您在UI上更改设置时,配置文件都会被保存。您可以在hidamari.conf中指定位置。默认情况下,它与主应用程序的执行目录相同。
  • _contents
    • 它包含用于hidamari的html、javascript等。您可以在hidamari.conf中指定目录位置。默认情况下,它与主执行目录相同。

hidamari.conf

  • 文件格式为toml。
#
# The format of this file is TOML.
#
config_dyn          = "hidamari_dyn.conf"
bind_addr           = "0.0.0.0:18080"
mpd_addr            = "127.0.0.1:6600"
mpd_httpd_url       = "http://127.0.0.1:8080"
self_url_for_mpd    = ""
mpd_protolog        = false
mpd_fifo            = "/tmp/mpd.fifo"
mpd_fifo_fftmode    = 0
contents_dir        = ""
albumart_upnp       = false
albumart_localdir   = "/var/lib/mpd/music"
- config_dyn : file path
    - Specify the file path for hidamari_dyn.conf.
- bind_addr : ipaddr
    - Specify the port on which HIDAMARI listens for HTTP services.
- mpd_addr : ipaddr
    - Specify the service listen port of MPD from HIDAMARI's point of view.
- mpd_httpd_url : URI
    - Specifies the listen port for the HTTP stream service in MPD as seen by HIDAMARI. This will be used for stream proxies. If you don't need it, set it to "".
- self_url_for_mpd : ipaddr
    - Specify the HIDAMARI alsa stream protocol to be presented to MPD. If this value is "", then http://127.0.0.1:<<bind_addr's port value>> will be used. This is the URL prefix for the HIDAMARI HTTP service from MPD's point of view.
- mpd_protolog : true/false
    - This switch is used to log the execution of MPD commands.
- mpd_fifo : File path
    - Specifies the path to the MPD FIFO pipe.
- mpd_fifo_fftmode : 0 - 5
    - Specifies the mode of FFT processing. Normally 0. (Buffer size: 4096, buffer slide size: 2048, frequency resolution: 1/2 oct )
    - Changing the value changes the buffer size, buffer slide size and frequency resolution of the FFT process. The higher the number, the worse the accuracy is, and the lower the load is.
- contents_dir : File path.
    - The directory path to the directory where hidamari html, javascript, etc. are stored. If this value is "", the current path /_contents is referenced.
- albumart_upnp : true/false
    - If the database of MPD is upnp, set this to true.
- albumart_localdir : File path
    - When albumart is acquired, albumart is acquired from the music files under the specified directory.

API。

待办事项。

实现概述

待办事项。

另请参阅

依赖项

~29–42MB
~720K SLoC