Yah, saya pikir saya menemukan solusi untuk looper audio multitrack Linux command-line - dan itu adalah dengan menggunakan ChucK => Skrip Bahasa Pemrograman Audio yang tepat waktu dan on-the-fly .
Pertama-tama, ChucK
dapat diinstal melalui sudo apt-get install chuck
di Debian / Ubuntu. Namun, setelah Anda menginstal, coba ketik chuck
dan kemudian TABdi terminal; Anda harus mendapatkan sesuatu seperti:
$ chuck
chuck chuck.alsa chuck.oss
... maksudnya - perhatikan bahwa ada tiga ChucK
executable; masing-masing untuk backend audio Linux yang terpisah - dan perhatikan bahwa executable default chuck
, sebenarnya mengacu pada JACK (executable lainnya, jelas, merujuk ke ALSA dan OSS).
Karena sebagian besar pengguna di Linux (juga saya sendiri) sebenarnya tidak jack
menginstal - menjalankan chuck
executable dapat menyebabkan kekecewaan, karena tidak akan menghasilkan suara (diberikan yang jack
tidak ada pada sistem); lihat, misalnya:
Anda mungkin ingin menjalankan chuck --probe
dan melihat apa yang dilaporkan untuk backend yang berbeda - mengharapkan keluhan dari chuck
jika JACK tidak ada dan berjalan, tetapi chuck.alsa
harus lulus:
$ chuck --probe
[chuck]: (via rtaudio): no devices found for compiled audio APIs!
[chuck]:
# .....
$ chuck.alsa --probe
[chuck]: found 4 device(s) ...
[chuck]: ------( chuck -- dac1 )---------------
[chuck]: device name = "hw:SB,0"
[chuck]: probe [success] ...
[chuck]: # output channels = 6
[chuck]: # input channels = 2
[chuck]: # duplex Channels = 2
# .....
Untuk sebagian besar pengguna, maka menjalankannya chuck.alsa
seharusnya melakukan trik - namun, perhatikan bahwa ini kemungkinan akan mengambil perangkat audio secara langsung (sepertinya tidak chuck
disadari pulseaudio
) - dan kemudian Anda tidak akan dapat menjalankan penghasil audio lainnya program (suka vlc
) secara paralel, dan memiliki suara yang dicampur dari kedua aplikasi (aplikasi lain pada dasarnya akan tetap diam).
Tapi ini sedang dicatat - kita sekarang dapat melanjutkan dengan ChucK
skrip untuk pengulangan.
Salah satu hal hebat tentang itu ChucK
adalah bahwa pada dasarnya kita dapat mendefinisikan satu skrip yang menangani pemutaran dan perulangan hanya satu suara - dan kemudian memanggil beberapa contoh skrip itu secara paralel - yang secara efektif menciptakan looper audio multitrack!
Setelah beberapa bermain-main dengan ChucK
contoh - lihat:
... Saya berhasil memasak naskah saya sendiri - terutama berdasarkan pada contoh: sndbuf.ck dan valueat.ck - yang saya sebut loopsndbuf.ck :
// sound file
// initialize empty string variable for filename
"" => string filename;
// set a default filename to be loaded
"/path/to/freesound.org/100391__dobroide__20100627-creek.wav" => filename;
// if arguments are passed to the script,
// use the first argument as filename instead
if( me.args() ) me.arg(0) => filename;
0.5 => float myvolume;
if( me.args() ) if (me.arg(1) != "") Std.atof(me.arg(1)) => myvolume;
<<< "myvolume: " + myvolume >>>;
SndBuf buf;
filename => buf.read;
myvolume => buf.gain;
1.0 => buf.rate;
// time loop
Impulse i => dac;
while( true )
{
int pos;
repeat( buf.samples() )
{
buf.valueAt( pos ) => i.next;
pos++;
1::samp => now;
}
}
( lihat versi online untuk komentar lebih lanjut )
Setelah menyimpan skrip ini, sekarang kita dapat menyebutnya dengan chuck
juru bahasa:
chuck.alsa loopsndbuf.ck
... yang akan mulai memuat suara seperti dalam pengaturan default, dan mengulanginya. Atau, kita dapat memanggil skrip dengan argumen - perhatikan bahwa karakter untuk memisahkan argumen dari chuck
skrip adalah colon ( :
):
chuck.alsa loopsndbuf.ck:/path/to/freesound.org/23222__erdie__thunderstorm2.wav:0.4
... atau, - akhirnya - kita dapat memanggil beberapa instance loopsndbuf.ck
skrip, yang chuck
akan berjalan secara paralel. Untuk ini, saya lebih suka meletakkan semuanya dalam skrip bash, sebut saja loopchuck.sh
:
set -x
PTH="/path/to/freesound.org"
chuck.alsa \
loopsndbuf.ck:$PTH/15528__ch0cchi__domestic-cat-purr.wav:1.0 \
loopsndbuf.ck:$PTH/100391__dobroide__20100627-creek.wav:0.05 \
loopsndbuf.ck:$PTH/23222__erdie__thunderstorm2.wav:0.4 \
loopsndbuf.ck:$PTH/2519__rhumphries__rbh-rain-01.wav:0.4 \
loopsndbuf.ck:$PTH/18766__reinsamba__chimney-fire.wav:0.4 \
loopsndbuf.ck:$PTH/53380__eric5335__meadow-ambience.wav:0.4
Menjalankan skrip ini pada dasarnya harus memuat instance skrip yang terpisah, masing-masing dengan file dan volumenya sendiri - chuck
kemudian akan memuat semua audio ke dalam memori, meludahkan sesuatu seperti ini ke stdout:
$ ./loopchuck.sh
++ PTH=/path/to/freesound.org
++ chuck.alsa loopsndbuf.ck:/path/to ....
"myvolume: 1.0000" : (string)
"myvolume: 0.0500" : (string)
"myvolume: 0.4000" : (string)
"myvolume: 0.4000" : (string)
"myvolume: 0.4000" : (string)
"myvolume: 0.4000" : (string)
... dan kemudian, semua skrip akan mulai pada saat yang sama - dan kemudian akan mengulang semua bunyi secara individual pada akurasi sampel, sesuai dengan panjang file mereka - membungkus loop untuk setiap file, ketika menyimpulkan, secara terpisah. Dengan kata lain, fase loop independen ( mirip dengan bagaimana program GUI terminatorX memperlakukan loop secara default ) - dan itulah yang saya cari :)
!! Perhatikan bahwa Anda mungkin harus menekan CTRL+ Cdua kali untuk menghentikan loopchuck.sh
skrip sepenuhnya . ( dan ya, sampel audio yang digunakan berasal dari Freesound.org )
Namun, perlu diketahui bahwa ketika chuck
memuat semua file ini dalam memori, ia menggunakan cukup banyak CPU yang mereproduksi dan mencampur loop ini - dan karena itu diharapkan memiliki penurunan dalam audio, jika OS harus menangani beberapa operasi berat (seperti GUI, katakanlah dalam hal ini ketika menggulir halaman web di browser Anda). Untuk menghindari ini, saya kira jack
setup harus digunakan - tetapi kemudian kita harus terlibat dengan prioritas real-time Linux dan yang lainnya (yang tidak selalu merupakan proses yang mudah).
Yah, saya kira saya senang sekarang - karena hanya ini yang saya inginkan ( saya hanya berharap saya dapat mencampur output audio ini dengan satu dari say vlc
atau youtube di firefox
, meskipun - selesai, periksa jawaban lainnya ) :)
; Semoga ini membantu orang lain juga,
Ceria!