linux centos fedora rosegarden 播放 midi 音乐

linux fedora32 播放midi音乐
其实这个日志,没想记那么多,只是为了在linux下找一个midi的播放器,默认播放器只能播放普通格式,不支持midi格式。
最终找到一个类似winamp的播放器qmmp,挺好用的。
安装
sudo yum install qmmp
运行
qmmp
好了,已经实现播放midi的功能,新手下面不用看了,只是我手贱,顺便看了一下ALSA方面的文章,可以用其他的播放器,那装一个玩玩吧,tmd都是泪。
=============================================
一、ALSA MIDI
MIDI:Musical Instrument Digital Interface 音乐设备数字化接口)
https://alsa-project.org/wiki/Main_Page
上面有你找的包括源代码
ALSA:Advanced Linux Sound Architecture 高级Linux声音架构
二、安装ALSA驱动
(一)下载源码安装,自行下载编译。
(二)yum 安装
sudo yum install alsa-lib-devel.x86_64 
sudo yum install alsa-tools-firmware.x86_64 
sudo yum install alsa-utils.x86_64  
sudo yum install patchage.x86_64 
补丁:Jack and ALSA based audio/MIDI
应该会很顺利安装成功的
三、fluidsynth音频合成软件
(一)安装
sudo yum install fluidsynth

sudo yum install qsynth
sudo yum install fluid-soundfont-gm
sudo yum install qjackctl
#sudo yum install rosegarden 这个当时没有安装(幸亏放在后面,不然直接崩溃放弃)
如果顺利的话可执行下面命令,没有出错的话,那就大功告成。
(二)运行

喜欢用GUI界面的运行qsynth

下面可以不用启动GUI界面,命令行就可以运行。
fluidsynth -help 查看帮助 太多不详细介绍
参数说明:
-s 作为服务
--audio-driver=alsa                         (-a alsa)指通用的声卡驱动
-o audio.alsa.device=hw:0            (可以不要默认值)声卡设备位置,可以用aplay -l 查看
-l                        不联接服务器
-i             不读取shell
song.mid 要播放的音乐名称
/usr/share/sounds/sf2/FluidR3_GM.sf2 音色库
1、服务端播放midi
fluidsynth --server --audio-driver=jack --connect-jack-outputs /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
fluidsynth -s -a jack -j /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
上面两个命令均能运行,只不过第二个为简化版,如果等同效果一样,为什么还要两个命令呢,那要问开发者了,第一个比较清晰,他也可能是100个字符,不过程序员要挨骂了^_^。
当然也可以开启服务,其他登录端播放,命令如下格式
fluidsynth -s -a jack -j /usr/share/soundfonts/FluidR3_GM.sf2 

ls -la /usr/share/sounds/sf/FluidR3_GM.sf2 这个文件其实是软链接,无所谓的,只要指向正确就可以。

sudo ln -s   /usr/share/soundfonts/FluidR3_GM.sf2  /usr/share/sounds/sf/FluidR3_GM.sf2
2、客户端播放midi
查看端口
aplaymidi -l
播放 
aplaymidi -p 128:0 song.mid
3、直接播放
fluidsynth -a alsa -l -i /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 song.mid
fluidsynth -a pulseaudio -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 song.mid

其实编辑 vi /.fluidsynth文件内容更好,如:

set synth.dynamic-sample-loading        True
set synth.lock-memory                   True
set audio.alsa.device                   hw:0
set audio.driver                        jack
set audio.file.endian                   auto
set audio.jack.autoconnect              True
set audio.jack.id                       fluidsynth
set audio.jack.multi                    True
set midi.autoconnect                    True
set midi.driver                         alsa_seq
set midi.realtime-prio                  90
set player.reset-synth                  True
set player.timing-source                sample
set synth.cpu-cores                     2
set synth.default-soundfont             /usr/share/soundfonts/FluidR3_GM.sf2
set synth.gain                          5
set synth.ladspa.active                 True
set synth.polyphony                     256
set synth.reverb.active                 True
set synth.sample-rate                   48000.000


4、服务命令

help all

settings

player_loop -1 一直重复播放 player_next 下一首 player_stop停止
quit  安全退出
shell 端不正常出错可用下面命令kill
sudo killall jackd 

sudo jack_control stop
四、常用辅助工具

aplay -l
命令行声音调整,好多参数,控制ALSA的调节器,并且支持多声卡.可查看help
amixer
调整音量
amixer set Master 100%
alsa有一个带界面声音调整工具
自动打开默认声卡
alsamixer -c 0
aplaymidi -l

alsactl store保存声卡配置文件

alsactl restor恢复默认值
播放
aplaymidi -p 128:0 song.mid
加上参-d 10 测试中好像播放完成后延迟时间

alsactl 声卡设置工具
alsactl -h
arecord,aplay是命令行录音播放工具
aplaymidi播放MIDI文件
alsamixer终端界面声卡音量调器
arecordmidi录制标准的MIDI文件
amidi端口进行读写工具

四、问题及解决方法
系统设置声卡一定要选对,不然没声音的^_^。
alsa基本是不会出问题的,主要是fluidsynth的问题。
(一)基本调试
1、查看启用频率1000
grep ^CONFIG_HZ /boot/config-`uname -r`
CONFIG_HZ_1000=y
CONFIG_HZ=1000
2、查看设备
cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xd0700000 irq 28
3、查看驱动
aplay -L
card 0: PCH [HDA Intel PCH], device 0: ALC272 Analog [ALC272 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC272 Digital [ALC272 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
4、查看midi端口
aplaymidi -l
Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
128:0    FLUID Synth (7076)               Synth input port (7076:0)
5、发送数据到端口
aplaymidi -p 128:0 song.mid
6、查看权限
sudo fuser -v /dev/snd/*
(二)出错调试
1、出错信息1
The capture device "hw:0" is already in use jackd(KILL掉谁在使用声卡)
Trying to load portnames from /etc/jack/cards/HDA Intel PCH.ss.ports.out
Trying to load portnames from /etc/jack/cards/HDA Intel PCH.ports.out
lash_open_socket: could not connect to host 'localhost', service '14541'
解决办法:
sudo vi /etc/fstab
添加或修改这两行后reboot
/dev/shm                                        tmpfs   defaults                0 0
/dev/pts                                        devpts  defaults                0 0
2、出错信息2
cannot lock down memory area
ulimit -l   查看
max locked memory       (kbytes, -l) 65536
第一种方法:修改这两个文件,linux系统配置文件,不建议修改,如果系统管理员在不影响稳定的情况下可编辑。
/etc/systemd/system.conf
/etc/systemd/user.conf
DefaultLimitMEMLOCK=131072  DefaultLimitMEMLOCK=134217728 
好奇怪,为什么是这样的数据,原来是1024单位啊。
128kb=128*1024=131072
128mb=131072*1024=134217728
第二种方法修改下面文件,测试通过
/etc/security/limits.d/audio.conf
@audio - rtprio 95 
@audio - memlock unlimited
其实很简单,就是内存修改为无限制。
添加abc用户的audio、jackuser权限

sudo groupadd realtime
sudo groupadd jackuser
sudo fuser -v /dev/snd/*
sudo usermod -a -G audio abc
sudo usermod -a -G jackuser abc

sudo usermod -a -G realtime abc


第三种方法修改下面文件,测试后没成功失败。
vi /etc/security/limits.d/99-realtime-privileges.conf 
@realtime - rtprio 98 
@realtime - memlock unlimited

vi /etc/security/limits.d/99-realtime-privileges.conf 
@jackuser - rtprio 98\9 
@jackuser - memlock unlimited

sudo yum install -y sysfsutils
vi /etc/udev/rules.d/40-timer-permissions.rules
KERNEL=="rtc0", GROUP="audio"
KERNEL=="hpet", GROUP="audio"
vi /etc/sysfs.conf
class/rtc/rtc0/max_user_freq = 2048
vi /etc/sysctl.conf
dev.hpet.max-user-freq=2048
chmod 660 /dev/hpet /dev/rtc0
chgrp audio /dev/hpet /dev/rtc0

五、安装rosegarden

https://rosegardenmusic.com/
最新版本为20.12
===============================
cmake安装 版本要3以上。
yum install -y gcc gcc-c++ make automake
wget cmake-3.19.3.tar.gz
tar -zxvf cmake-3.19.3.tar.gz
cd cmake-3.19.3
sudo ./bootstrap 
sudo make 
sudo make install
============================
下载解压缩
cd rosegarden-20.12
vi README
可以先看下。
下面开始安装
pwd
/home/abc/rosegarden-20.12
显示当前路径
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
===================
不行,有很多的出错提示,大部分为Qt5组件缺失,本人一直GNOME或XFCE,也就是GTK组件。算了还是装个KDE吧

sudo yum install @KDE

==============================
yum install swithcdesk
界面切换命令
swithcdesk KDE
swithcdesk xfce
startxfce4
============================
仍然不行,还是老实按提示安装吧
sudo yum search  XX
sudo yum install XX
配合www.bing.com搜索

yum install qt-creator
yum isntall Qt5
yum isntall libudev-devel
yum install mesa-libGL-devel

https://www.esaracco.fr/documentation/linuxaudio/linuxaudio/build-ladspa.html
http://www.ladspa.org/download/ladspa_sdk_1.15.tgz

cd src
sudo make
sudo make install

dssi
sudo yum install dssi-devel-1.1.1-8.el7.nux.x86_64.rpm
.......
终于没错误提示

上面大部分是源码安装,数不完的wget tar config make make installl

下面是通过yum search 找到安装包,64位,经测试成功,不用编译源码。

=====================================
sudo yum install cmake3
sudo yum install qt5-qtbase-devel.x86_64
sudo yum install ladspa-devel.x86_64
sudo yum install liblo.x86_64
sudo yum install dssi-devel.x86_64
sudo yum install liblo-devel.x86_64
sudo yum install liblrdf-devel.x86_64
sudo yum install fftw-devel.x86_64
sudo yum install libsamplerate-devel.x86_64
sudo yum install libsndfile-devel.x86_64
sudo yum install lirc-devel.x86_64
sudo yum install jack-audio-connection-kit-devel.x86_64
sudo yum install qt5-qttools-devel.x86_64
======================================

rosegarden-20.12编译要用cmake3.0以上版本,如果电脑已经安装cmake3,可以直接cmake,如果是2.0版本,通过yum install 安装cmake3,要执行cmake3
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make3 -j4
sudo make3 install
编译时间估计要10分钟
rosegarden 
界面终出来了。

======================
安装完成后才看到,rosegarden维基网站安装说明。
https://rosegardenmusic.com/wiki/dev:contributing
ubuntu debian arch 都有安装包可以下载,fedora 只有9以前的,下面是必须的组件。
gcc
gcc-c++
cmake
make
pkgconfig
qt5-qtbase-devel
alsa-lib-devel
jack-audio-connection-kit-devel
ladspa-devel
dssi-devel
liblo-devel
lirc-devel
liblrdf-devel
fftw3-devel
lilypond
libsamplerate-devel
libsndfile-devel
perl
bash
tar
gzip
libSM-devel
======================

yum 安装的FluidSynth qsynth的版本太旧了,闲来无事,更新版本吧,当然不想更新的
下面的这部分内容不要看了,编译过程会有出错提示,按提示修正就可以。
========================================
FluidSynth runtime version 2.1.6
当前版本

yum install libtool        :inet_ntop... yes

git clone https://github.com/FluidSynth/fluidsynth
cd fluidsynth
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make -j4
sudo make install

Qsynth - A fluidsynth Qt GUI Interface version: 0.9.0.10
当前版本
git clone https://github.com/rncbc/qsynth
cd qsynth
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make -j4
sudo make install
=========================================

顺便更新一下JACK

www.jackaudio.org

jack1源码安装https://jackaudio.org/downloads/

git clone git://github.com/jackaudio/jack1.git

cd jack1

git submodule init

git submodule update

./autogen.sh ./configure make make install

jack2 JACK 1.9.17.

下载解压后执行命令编译,感觉linux 上面好多的新软件最好用源码编译,打包软件更新速度太慢了。

./waf --help 可加参数--dbus  --samplerate=yes

./waf --prefix=/usr configure

./waf build

sudo ./waf install

=====================================================================

六、运行(centos7 fedora32通过测试)

===============
打开三个命令行窗口分别执行
qsynth
qjackctl
rosegarden
===============

^_^

以后有时间分析一下midi格式,毕竟midi1.0标准已经使用近40年,midi2.0新标准快发布测试。

猜你喜欢

转载自blog.csdn.net/lenovo8088/article/details/112586977